
前提
Pythonで任意の音声を読み込んで、早送りで再生したいのですが、
方法を探しても見つからなかった為、質問させていただきました。
実現したいこと
Pythonで音声を早送りで再生したい
※可能であれば任意の位置から早送りで再生
※今回simpleaudioを使用しておりますが、こだわりはない為
他に方法があればご教示いただけますと幸いです。
試したこと
wavファイルを読み込んで、simpleaudioで再生すること、
wave_read.readframes()で音声のデータを読み込んで、任意の部分を切り取る程度には出来ました。
python
1import wave 2import simpleaudio 3 4audio_file_path = "./test.wav" 5wave_read = wave.open(audio_file_path, 'rb') 6num_channels = wave_read.getnchannels() 7bytes_per_sample = wave_read.getsampwidth() 8sample_rate = wave_read.getframerate() 9frame_rate = wave_read.getnframes() 10 11# 部分音声再生 5秒の位置から10秒 12audio_start = 5 * sample_rate 13audio_range = 10 * sample_rate 14wave_read.setpos(audio_start) 15audio_data = wave_read.readframes(audio_range) 16play_obj = simpleaudio.play_buffer(audio_data, num_channels, bytes_per_sample, sample_rate) 17 18# 再生中か確認する 19while True: 20 if play_obj.is_playing(): 21 pass 22 else: 23 break 24 25 # 音声停止 26play_obj.stop()
補足情報(FW/ツールのバージョンなど)
wave_read.readframes()で読み込んだ音声データの配列を一定間隔で歯抜けにすると、早送りになるのではとイメージはしております。

詳しくないですが、以下の2つがありそうで、初めの方が難易度が高そうな感じがします。
(再サンプリングとかするのだろうと想像します)
なので、もう少しどうしたいか加えると詳しい方の回答がもらえるかもしれません。
・ 音程を変えずに速さだけ変更する処理
・ 速さを変える時に音程も同時に変わってしまう処理
参考
https://www.wizard-notes.com/entry/python/pyrubberband
上記webページには
・音程を変えずに速さだけ変更する処理
・速さを変えずに音程だけ変更する処理
のやり方が書かれてます
もし
・速さを変える時に音程も同時に変わってしまう処理
がやりたいなら、上記二つの合わせ技でできると思います
fourteenlength様
コメントありがとうございます。
音声について詳しくない為に質問としても漠然としてしまいました。
音程なども含めてどうしたいかというところで、今後質問する際にぜひ参考にさせて頂きます。
jbpb0様
コメントありがとうございます。
ご紹介いただいたページを参考に早速対応に取り組んでみたいと思います。

回答1件
あなたの回答
tips
プレビュー