为了账号安全,请及时绑定邮箱和手机立即绑定

未捕获(承诺)DOM异常:无法将音频数据从自解码为 JavaScript

未捕获(承诺)DOM异常:无法将音频数据从自解码为 JavaScript

蓝山帝景 2022-09-16 21:53:45
我有一个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(() => {


            });

        }

    };

}


查看完整回答
反对 回复 2022-09-16
  • 1 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信