我有一个python应用程序,它从麦克风获取音频,将其发送到服务器,服务器又将其发送到javascript应用程序。我已经检查过,python应用程序发送的数据与javascript应用程序接收的数据相同。在控制台的 java 脚本应用程序中,将显示以下消息:。Uncaught (in promise) DOMException: Unable to decode audio data我认为问题是因为发送的数据是原始数据,没有“.wav”标头,但我也尝试使用wave将数据写入文件并读取它,出现相同的错误。数据作为二进制数据发送/接收,使用网页密码。蟒蛇代码:# self data in initself.sampleRate = 44100self.duration = 1 / 30self.channels = 2self.chunk = 1024self.format = pyaudio.paInt16# codepyAudio = pyaudio.PyAudio()frames = []stream = pyAudio.open( format=self.format, channels=self.channels, rate=self.sampleRate, input=True, output=True, frames_per_buffer=self.chunk)data = stream.read(int(44100 / self.chunk * self.duration))frames.append(data)recording = datastream.stop_stream()stream.close()pyAudio.terminate()记录数据是发送到 java 脚本应用程序的数据。我知道我应该录制多个帧,但我这样做了,因为它更容易测试。脚本代码:function playByteArray(byteArray) { var arrayBuffer = new ArrayBuffer(byteArray.length); var bufferView = new Uint8Array(arrayBuffer); for (i = 0; i < byteArray.length; i++) { bufferView[i] = byteArray[i]; } context.decodeAudioData(arrayBuffer, function(buffer) { buf = buffer; play(); });}function play() { var source = context.createBufferSource(); source.buffer = buf; source.connect(context.destination); source.start(0);}我也用声音设备python模块尝试过它,但我得到了同样的错误(正常方法,我无法让Stream回调方法工作)。
1 回答
慕的地8271018
TA贡献1796条经验 获得超4个赞
我解决了将 更改为以下函数的问题:playByteArray
function playByteArray(byteArray) {
audio = new Audio();
var blob = new Blob([byteArray], { type: 'audio/wav; codecs=0' });
var url = window.URL.createObjectURL(blob);
audio.src = url;
audio.oncanplaythrough = (event) => {
var playedPromise = audio.play();
if (playedPromise) {
playedPromise.catch((e) => {
console.log(e);
if (e.name === 'NotAllowedError' || e.name === 'NotSupportedError') {
console.log(e.name);
}
}).then(() => {
});
}
};
}
添加回答
举报
0/150
提交
取消