VB6またはVB2005 Express Edition を利用してプログラムをしています。
ocx や DirectShow を利用して、一般的なプレーヤーを作製するところまではできたのですが、
私が作製したものでは再生速度を変えると音程も変わってしまいます。
VBMP3.DLL を利用するとタイムストレッチが可能になるのですが、
再生速度が1倍以上のため、低速時の再生ができません。
速度を音程を独立して操作することは可能でしょうか?
wavファイルだと速度に応じてサンプリングをコンバートしたものを
メモリーに吐き出して再生させることは、時間的に間に合うか
間に合わないかは別にして出来そうですが、MP3では難しいのでは。
我龍院忠太さん、コメントありがとうございます。
やはりMP3だと厳しいですか・・。
外部DLLやなんらかのコントロールを利用したかったのですが、
なかなか都合いいものはないものですね。
やはりMP3を一旦waveにデコードし、メモリに展開した上でサンプリングレートに応じて細切れに分解し、
再生速度に合わせて各データを順次再生していくっていう流れになるのでしょうか。
私の知識では敷居が高くて、なかなか実現させるのは難しいと思いますが、
なんとか情報を集めてトライしてみたいと思います。
もし参考になるHPや書籍等ありましたら、紹介して頂けるとうれしいです。
遅いスピードでも音程を変えないで再生するには、サンプリングを間引く必要が有ります。
たとえばスピードを半分にしたい場合は、一つおきにサンプリングを間引けば良いわけです。
(当然音質は低下します、周波数の上限が半分になります)
ファイルに書き出して良いのなら、テクニック的にはそれ程難しいことはないのですが、
再生しながら連続的にスピードを変化させるのはかなりのテクニックが必要です。
>もし参考になるHPや書籍等ありましたら、紹介して頂けるとうれしいです。
1、「VisualBasic4パワフルテクニック大全集 Vol.1」
VB4(^^;ですが非常に丁寧に書かれています、手に入りにくいのが難点。
2、「Bisual Basic 6.0の応用50例」
メモリー
コピペが切れてしまいました。orz
2、「Bisual Basic 6.0の応用50例」
メモリー上のWAVデーターの再生方法が書かれています。
我龍院忠太さん、丁寧な解説ありがとうございます。
教えて頂いた書籍を探し、色々勉強してみたいと思います。
また疑問点が出たときにアドバイスを頂けると幸いです。
ツイート | ![]() |