生のサウンドデータサンプルの配列があり、再生中のオーディオの進行状況とともに波形を表示するグラフィカルプレーヤーを作成しようとしています。
matplotlibで簡単にプロットでき、audiolabで再生できますが、audiolabには再生ヘッドの「現在の場所」を取得する方法がないようです。
これを実行できるモジュールはありますか?
「シーク」機能ではなくプログレスバーが必要な場合 - 完了した量と残っている量を表示したいだけの場合は、tkintr を使用して簡単に構築し、現在持っているものと統合できます。
さもないと、
プログレスバーを表示するモジュールは基本的に 2 つあります。
PyAudio は MP3 のみを再生します。主な欠点。でも使いやすいです。
多くの異なるフォーマットをサポートし、プログレスバー機能も備えた Snack という別のモジュールがあります。
これは少し使いにくいですが、最近、いくつかの優れたチュートリアル/サンプルが利用可能になったと聞きました。
ですから、それが必要な場合は、スナックにシフトすることをお勧めします。
乾杯。
オーディオ フレームの数とサンプルレートがわかっている場合は、現在の位置を知るために audiolab を使用する必要はありません。計算できます。
Sndfile.frames / Sndfile.samplerate
ファイルの長さを秒単位で示します。これを、サウンド ファイルが開始してからの経過時間と組み合わせて、相対的な現在の位置を計算することができます。原理を説明するには:
import time
start_time = time.time()
duration_s = sndfile.frames / sndfile.samplerate
while 1:
elapsed_time = time.time() - start_time
current_location = elapsed_time / float(duration_s)
if current_location >= 1:
break
time.sleep(.01)
これを実際に実装するには、Python スレッドを使用してサウンド ファイルを非同期で再生し、親スレッドで現在の位置を (上記のように) 計算します。再生が失敗した場合に対処するには、呼び出しをscikits.audiolab.play()
例外ハンドラーでラップthreading.Event
し、 play() 呼び出しが失敗した場合に親スレッドにイベントを渡すために使用します。
親スレッドでは、それに応じて確認する必要がありますevent.isSet()
。
if current_location >= 1 or fail_event.isSet():
break
あなたが探しているものを実行できる良いコードを見つけました。リンクは次のとおりです: https://gist.github.com/deeplycloudy/2152643 著者からのコードを実行できませんでしたが、そのリポジトリの下のコメントにいくつかの修正を加えました。
サルドス!!