質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.44%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

3回答

1569閲覧

pydubによるwavデータの自動再生ができない

ASAtech

総合スコア4

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2023/03/30 04:12

実現したいこと

pydubを使用して、wavデータを自動再生したい

前提

pythonのpydubモジュールを使用して、wavデータを自動再生しようとしています。そこで下記のテストプログラムを実行しましたが、音声が再生されません。考えられる原因について、ご教授頂けますと幸いです。

発生している問題・エラーメッセージ

特にエラーメッセージはありません

該当のソースコード

python

1from pydub import AudioSegment 2from pydub.playback import play 3 4# WAVファイルの読み込み 5audio = AudioSegment.from_file("./test.wav", format="wav") 6 7# 再生 8play(audio)

試したこと

・ffmpegがインストールされていることを確認した
・simpleaudioモジュールでも試したが、同様に処理は正常に実行されるものの、音声が再生されなかった
・display関数を使うことでpython上で再生することはできたものの、自動再生は出来ない(再生ボタンを押す必要がある)

display関数を使用

1from pydub import AudioSegment 2from IPython.display import Audio, display 3 4# 音声ファイルを読み込み 5sound = AudioSegment.from_wav("./test.wav") 6 7# 音声を再生 8with sound.export(format='wav') as wav_file: 9 wav_data = wav_file.read() 10 display(Audio(wav_data, rate=44100, autoplay=True))

補足情報(FW/ツールのバージョンなど)

・python3.9
・VS code

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

simpleaudio周りに問題がありそうということはわかったものの、ご回答頂いたものを試してみましたが解決しませんでした。pydubの代わりにwinsoundを使用したところ再生することが出来ました。ご回答頂いた方々は大変ありがとうございました。

投稿2023/03/30 08:12

ASAtech

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

simpleaudioモジュールでも試したが、同様に処理は正常に実行されるものの、音声が再生されなかった

GitHub リポジトリで pydub のソースコードを確認してみると、simpleaudio モジュールがインストールされている場合には simpleaudio で再生が行われます。なので、問題は pydub ではなく simpleaudio にあるのではないかと思われます。

https://github.com/jiaaro/pydub/blob/master/pydub/playback.py#L51

python

1def _play_with_simpleaudio(seg): 2 import simpleaudio 3 return simpleaudio.play_buffer( 4 seg.raw_data, 5 num_channels=seg.channels, 6 bytes_per_sample=seg.sample_width, 7 sample_rate=seg.frame_rate 8 ) 9 10def play(audio_segment): 11 try: 12 playback = _play_with_simpleaudio(audio_segment) 13 try: 14 playback.wait_done() 15 except KeyboardInterrupt: 16 playback.stop() 17 except ImportError: 18 pass 19 else: 20 return 21 22 try: 23 _play_with_pyaudio(audio_segment) 24 return 25 except ImportError: 26 pass 27 else: 28 return 29 30 _play_with_ffplay(audio_segment)

_play_with_ffplay() メソッドで再生してみるとよいかもしれません。

python

1# 再生 2# play(audio) 3from pydub.playback import _play_with_ffplay 4 5_play_with_ffplay(audio)

投稿2023/03/30 07:11

melian

総合スコア20001

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ChatGPTによる回答

質問文は省略

pydubを使用して音声を再生する場合、デフォルトの再生方法はsimpleaudioモジュールを使用するため、simpleaudioが正しくインストールされているか確認する必要があります。simpleaudioが正しくインストールされている場合、他の原因を調べる必要があります。

以下は可能な原因です。

  1. 音声が再生される前にプログラムが終了している可能性があります。この場合、プログラムが終了する前に、再生が完了するまで待つようにプログラムを調整する必要があります。

  2. 再生するwavファイルのエンコード方式が正しくない可能性があります。例えば、ステレオのwavファイルを再生しようとしてモノラルのスピーカーから再生する場合、再生できない場合があります。エンコード方式を確認し、必要に応じて変換する必要があります。

  3. simpleaudioモジュールが対応していないフォーマットのwavファイルを再生しようとしている可能性があります。この場合、別のwavファイルを使用するか、別の再生方法を使用する必要があります。

  4. 再生に必要なライブラリが足りていない可能性があります。詳細なエラーメッセージを確認し、必要なライブラリをインストールする必要があります。

上記の対処方法を試してみてください。

  • 実行時にエラーメッセージは表示されていません。
  • IPython.displayを利用した上記のコードでは正常に再生されます。

以上を考慮したうえで、再び回答ください。

ありがとうございます。pydubモジュールのplay関数を使用する場合、再生が完了する前にプログラムが終了する可能性があるため、再生が終了するまで待つようにプログラムを調整する必要があります。

以下は、再生が完了するまで待つように調整する方法の例です。

python

1from pydub import AudioSegment 2from pydub.playback import play 3 4# WAVファイルの読み込み 5audio = AudioSegment.from_file("./test.wav", format="wav") 6 7# 再生 8play_obj = play(audio) 9play_obj.wait_done()

上記のコードでは、play関数によって返される再生オブジェクトを使用して、再生が完了するまで待ちます。

所感

play(audio)が非同期で実行されている可能性を指摘しているようです。
こちらでは動作確認はしていません。

投稿2023/03/30 05:10

編集2023/03/30 05:11
can110

総合スコア38317

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ASAtech

2023/03/30 08:07

回答いただきありがとうございます。 再生が完了するまで待つような調整を実施してみましたが、解決しませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.44%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問