私は、javascript フロント エンド、フラスコ サーバー、Microsoft の音声認識サービスを結び付けようとしています。
Microsoft のサーバーは、特定のパラメーターを持つオーディオ データを要求します。特に、16000 フレームレート\周波数を要求します。
しかし、Windows のブラウザーからは 41000 しか取得できません。現在、41000 でオーディオを取得し、次のように保存します。
audioData = message['audio']
af = wave.open('audioData.wav', 'w')
af.setnchannels(1)
af.setparams((1, 2, 16000, 0, 'NONE', 'Uncompressed'))
af.writeframes(audioData)
af.close()
オーディオは、dict\json データの形式で socketio を介して受信されます。何も変更せずに直接保存すると、問題なく聞こえます。しかし、サンプル レートを 16000 に変更すると、明らかに歪んで非常に遅く聞こえるため、数秒のオーディオが 1 分程度に伸びます。
Python 3.4 でのサウンドに影響を与えずに、オーディオ レートを正しく変更するにはどうすればよいですか?
ありがとう。
編集: これが作業コードです:
with open("audioData_original.wav", 'wb') as of:
of.write(message['audio'])
audioFile = wave.open("audioData_original.wav", 'r')
n_frames = audioFile.getnframes()
audioData = audioFile.readframes(n_frames)
originalRate = audioFile.getframerate()
af = wave.open('audioData.wav', 'w')
af.setnchannels(1)
af.setparams((1, 2, 16000, 0, 'NONE', 'Uncompressed'))
converted = audioop.ratecv(audioData, 2, 1, originalRate, 16000, None)
af.writeframes(converted[0])
af.close()
audioFile.close()
ここでの欠点は、json を介して mediaRecorder Api からオーディオ データを取得しても、メモリ内にあることです...そして、ディスクに書き留めて、再度開き、wave の関数を使用してサンプリング レートを取得できるようにします。しかし、ディスクに書き込まずにどうすればよいでしょうか? ありがとう。そのために新しい質問をしなければならない場合は、確かにそれを行うことができます.
EDIT2:
ああ、わかりました、私自身のフォローアップの質問に答えます-io.BytesIO
トリックをしました.