CまたはPythonでの音声同期

audio
CまたはPythonでの音声同期

サウンドを再生し、これまでに再生された音の量を確実に伝える方法があります。 私はいくつかのサウンドライブラリを見てきましたが、それらはすべて恐ろしく不十分に文書化されており、「PlaySound、質問なし」ルーチンをエクスポートするようです。

つまり、これが欲しい:

a = Sound(filename)
PlaySound(a);
while true:
    print a.miliseconds_elapsed, a.length
    sleep(1)

C、C ++、またはPythonソリューションを推奨します。 ありがとうございました。

  1  0


ベストアンサー

これはほとんどの場合、ハードウェア依存(サウンドカードなど)とOS依存(OSなどで使用されるバッファのサイズ)の両方になります。

あなたが達成しようとしていることについてもう少しお話しいただければ幸いです。また、これがどのハードウェアとOSで動作するかについての仮定を立てることができるのでしょうか?

考えられる解決策の1つは、サウンドの再生が多かれ少なかれすぐに開始されると仮定し、妥当な精度のタイマーを使用して、再生されたサウンドの量を確認することです(既知の固定サンプルレートを持つため)。

0


  • BASS Audio Library *(http://www.un4seen.com/)を使用します

_
_BASSは、WindowsおよびMac OSXソフトウェアで使用するためのオーディオライブラリです。 その目的は、開発者に強力で効率的なサンプル、ストリーム(MP3、MP2、MP1、OGG、WAV、AIFF、カスタム生成など、アドオン経由)、MOD音楽(XM、IT、S3M、MOD、MTM、 UMX)、MO3音楽(MP3 / OGG圧縮MOD)、および録音機能。 サイズが100KB_未満の小さなDLLにすべて含まれています。*
_

BASSを使用するCプログラムは、次のように簡単です。

HSTREAM str;
BASS_Init(-1,44100,0,0,NULL);
BASS_Start();
str=BASS_StreamCreateFile(FALSE,filename,0,0,0);
BASS_ChannelPlay(str,FALSE);
while (BASS_ChannelIsActive(str)==BASS_ACTIVE_PLAYING) {
  pos=BASS_ChannelGetPosition(str,BASS_POS_BYTE);
}
BASS_Stop();
BASS_Free();

0


また、サウンドカードバッファに直接書き込むことができる素敵なオーディオライブラリも探しています。 私はまだ自分でそれを見る時間を持っていませんでしたが、http://people.csail.mit.edu/hubert/pyaudio/ [pyAudio]はかなりいい感じです。 ページを下にスクロールすると、似たような例が表示されます。

バッファサイズ、チャンネル数、サンプルレートの助けを借りて、各ループステップが継続する時間を簡単に計算して印刷できます。

0


タイトルとURLをコピーしました