【发布时间】:2020-06-04 15:09:49
【问题描述】:
我有一个 python 应用程序,它从麦克风获取音频,将其发送到服务器,然后服务器将其发送到 javascript 应用程序。
我查了一下,python应用发送的数据和javascript接收的数据是一样的。
在控制台的 javascript 应用程序中,会出现以下消息:Uncaught (in promise) DOMException: Unable to decode audio data。
我认为问题是因为发送的数据是原始数据,没有“.wav”标头,但我也尝试使用 wave 将数据写入文件并读取它,出现同样的错误。
使用 websockets 以二进制数据的形式发送/接收数据。
Python 代码:
# self data in init
self.sampleRate = 44100
self.duration = 1 / 30
self.channels = 2
self.chunk = 1024
self.format = pyaudio.paInt16
# code
pyAudio = 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 = data
stream.stop_stream()
stream.close()
pyAudio.terminate()
- 录制数据是发送到 javascript 应用程序的数据。
- 我知道我应该记录多个帧,但我这样做是因为它更易于测试。
JavaScript 代码:
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);
}
我也尝试过使用 sounddevice python 模块,但我得到了同样的错误(正常方法,我无法让 Stream 回调方法工作)。
谢谢。
【问题讨论】:
标签: javascript python pyaudio