Как преобразовать ArrayBuffer в AudioBuffer?

Я передаю arrayBuffer для преобразования в audioBuffer, чтобы иметь возможность его слушать.

Я получаю поток через событие websocket

retrieveAudioStream(){
  this.socket.on('stream', (buffer) => {
    console.log('buffer', buffer)
  })
}

buffer - это arrayBuffer, и мне нужно, чтобы он был audioBuffer, чтобы иметь возможность прослушивать его в моем приложении.

Как я могу это сделать?


person Stretch0    schedule 24.05.2018    source источник
comment
Взгляните на это: developer.mozilla.org/en- США/docs/Web/API/BaseAudioContext/   -  person Get Off My Lawn    schedule 24.05.2018
comment
Согласно этому посту SO невозможно декодировать аудиоданные"> stackoverflow.com/questions/38589614/ AudioContext.decodeAudioData просто не предназначен для декодирования частичных файлов. Из-за того, что мой поток представляет собой фрагменты arrayBuffer, я не могу декодировать его с помощью этого метода. Любые другие предложения?   -  person Stretch0    schedule 24.05.2018
comment
Существует очень отличный пример, в котором используется MediaSource ( который работает так же для аудиопотоков), и я использую его для потоковой передачи аудио по частям из ответа 206, он работает очень хорошо.   -  person Jankapunkt    schedule 23.06.2019
comment
Это тоже может помочь. Он использует decodeAudioData для декодирования ArrayBuffer в AudioBuffer и добавления фрагментов вместе. stackoverflow.com/questions/14143652/   -  person Bart Van Remortele    schedule 27.06.2019


Ответы (2)


Вы можете использовать метод BaseAudioContext.createBuffer(). Он используется для

создать новый пустой объект AudioBuffer, который затем можно заполнить данными и воспроизвести через AudioBufferSourceNode

Для получения дополнительной информации см. MDN: https://developer.mozilla.org/en-US/docs/Web/API/BaseAudioContext/createBuffer

person Orkhan Huseynli    schedule 25.06.2019
comment
Для объектов AudioBuffer требуется Float32Arrays, чего нет у OP (ArrayBuffers представляют фрагменты данных). Есть ли способ преобразовать ArrayBuffer фрагментов данных в AudioBuffers? - person Ken Hilton; 25.06.2019
comment
Я считаю, что вы можете создать любой типизированный массив из ArrayBuffer. Таким образом, вы должны быть в состоянии преобразовать ArrayBuffer в Float32Array - person Orkhan Huseynli; 25.06.2019

Поскольку вы выполняете потоковую передачу мультимедиа, а не загружаете файл, а затем декодируете аудиоданные, AudioContext.createMediaStreamSource() будет гораздо лучше подходить для вашего варианта использования.

Подробнее читайте здесь https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/createMediaStreamSource

person Hemant Parashar    schedule 29.06.2019