Javascript 如何将Blob转换为Int16Array

Javascript 如何将Blob转换为Int16Array,javascript,mp3,Javascript,Mp3,我有一个Blob中的WAV文件,为了将其转换为MP3,我需要先将其转换为Int16Array(按照这里的示例:) 例如 这是可能的吗?如果您知道数据实际上是一个16位ints的blob,那么是的,这是可能的: 通过FileReader的readAsArrayBuffer(,)将Blob读入ArrayBuffer ArrayBuffer可在FileReader的result属性或onload回调参数的event.target.result属性中找到(见下文) 通过Int16Array构造函数将Ar

我有一个Blob中的WAV文件,为了将其转换为MP3,我需要先将其转换为Int16Array(按照这里的示例:)

例如


这是可能的吗?

如果您知道数据实际上是一个16位
int
s的blob,那么是的,这是可能的:

  • 通过
    FileReader
    readAsArrayBuffer
    (,)将
    Blob
    读入
    ArrayBuffer

    ArrayBuffer
    可在
    FileReader
    result
    属性或
    onload
    回调参数的
    event.target.result
    属性中找到(见下文)

  • 通过
    Int16Array
    构造函数将
    ArrayBuffer
    作为
    Int16Array
    查看:

    const data = new Int16Array(fr.result);
    
  • 现在,
    data
    是blob中的数组缓冲区,被视为
    Int16Array

    大致如下:

    const fr = new FileReader();
    fr.onload = () => {
        // It worked
        const array = new Int16Array(fr.result);
        // ...use the array here...
    };
    fr.onerror = () => {
        // The read failed, handle/report it
    };
    fr.readAsArrayBuffer(samples);
    
    如果要跨请求重用加载完成处理程序,可以接受
    event
    参数并使用
    event.target.result
    而不是
    fr.result

    function loaded(event) {
        const array = new Int16Array(event.target.result);
        // ...use the array here...
    }
    
    // ...
    
    fr.onload = loaded;
    

    您必须使用FileReader API:您成功地解决了这个问题吗?如果下面回答了您的问题(堆栈溢出的工作方式),您可以通过单击旁边的复选标记来“接受”答案,从而将其从未回答的问题列表中删除。但前提是你的问题真的得到了回答;如果没有,您可以向问题添加更多详细信息来解释答案没有解决的问题。现在我可以向上投票:)注意,您还可以使用onload事件参数
    .target.result
    const fr = new FileReader();
    fr.onload = () => {
        // It worked
        const array = new Int16Array(fr.result);
        // ...use the array here...
    };
    fr.onerror = () => {
        // The read failed, handle/report it
    };
    fr.readAsArrayBuffer(samples);
    
    function loaded(event) {
        const array = new Int16Array(event.target.result);
        // ...use the array here...
    }
    
    // ...
    
    fr.onload = loaded;