【问题标题】:Can't catch error in try/catch section, decodeAudioData无法捕获 try/catch 部分中的错误,decodeAudioData
【发布时间】:2023-01-14 07:53:12
【问题描述】:

我有一个损坏的 .mp3 文件用于测试,如果没有“应用程序崩溃”,我无法捕获错误

该操作发生在后端,然后/catch 不适用于 decodeAudioData

const AudioContext = require('web-audio-api').AudioContext;
const context = new AudioContext();

const calcTempo = async (buffer) => {
  let audioBuffer;
  try {
    audioBuffer = await new Promise((resolve, reject) =>
      context.decodeAudioData(buffer, resolve, reject)
    );
  } catch (e) {
    console.log(e)
  }
}

/usr/src/app/node_modules/av/src/core/stream.js:489 throw new Error("Invalid utf16 sequence."); ^

错误:无效的 utf16 序列。 在 Stream.decodeString (/usr/src/app/node_modules/av/src/core/stream.js:489:23) 在 Stream.readString (/usr/src/app/node_modules/av/src/core/stream.js:403:27) 在 Class.decodeFrame (/usr/src/app/node_modules/mp3/src/id3.js:117:39) 在 Class.readFrame (/usr/src/app/node_modules/mp3/src/id3.js:59:30) 在 Class.read (/usr/src/app/node_modules/mp3/src/id3.js:18:33) 在 Class.readChunk (/usr/src/app/node_modules/mp3/src/demuxer.js:161:37) 在缓冲源。 (/usr/src/app/node_modules/av/src/demuxer.js:49:19) 在 BufferSource.EventEmitter.emit (/usr/src/app/node_modules/av/src/core/events.js:64:12) 在 BufferSource.loop (/usr/src/app/node_modules/av/src/sources/buffer.js:49:21) 在立即。 (/usr/src/app/node_modules/av/src/sources/buffer.js:4:59) 在 runCallback (timers.js:693:18) 在 tryOnImmediate (timers.js:664:5) 在 processImmediate (timers.js:646:5) 在 process.topLevelDomainCallback (domain.js:121:23) [nodemon] 应用程序崩溃 - 在开始之前等待文件更改...

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    这看起来像是Promiseasync-await 的混合方法。

    如果你尝试了一种纯粹的方法,比如

    const AudioContext = require('web-audio-api').AudioContext;
    const context = new AudioContext();
    
    const calcTempo = async (buffer) => {
      let audioBuffer;
      try {
        audioBuffer = await context.decodeAudioData(buffer);
      } catch (e) {
        console.log(e)
      }
    }
    

    如这里所建议的:https://developer.mozilla.org/en-US/docs/Web/API/BaseAudioContext/decodeAudioData

    【讨论】:

    • 你好!谢谢你的回答 试过了,不行/usr/src/app/node_modules/web-audio-api/build/AudioContext.js:98 else successCallback(audioBuffer) ^ TypeError: successCallback is not a function
    • 我认为 web-audio-api 与 WebApi 不同
    • 你或许是正确的。有什么特别的原因,为什么你会用那个而不是原生的?这里有兼容性问题吗?特别是它已经在 alpha 中使用了 7 年,因此我不会使用 web-audio-api
    • Node.js 不支持网络音频,因为它不是 JavaScript 语言本身的一部分——它是一个单独的网络平台 JavaScript API。
    【解决方案2】:

    您缺少回调函数的 {} 括号

    try {
      audioBuffer = await new Promise((resolve, reject) => {
        context.decodeAudioData(buffer, resolve, reject)
      });
    }
    

    【讨论】:

    • 将“{}”替换为“()”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-21
    • 1970-01-01
    相关资源
    最近更新 更多