1

Я использую AudioContextdecodeAudioData на mp3-файле, который дает мне AudioBuffer. С этим звуковым буфером я продолжаю рисовать форму этого mp3-файла на холсте, используя данные, возвращаемые getChannelData().AudioBuffer «getChannelData()» эквивалент для MediaStream (или MediaStreamAudioSourceNode)?

Теперь я хочу использовать тот же код для рисования формы звуковых данных MediaStream, что означает, что мне нужен один и тот же тип ввода/данных. Я знаю, что MediaStream содержит информацию в реальном времени, но должен быть способ доступа к каждому новые данные из MediaStream как

в Float32Array, содержащий данные

PCM, которая является то, что AudioBuffer «s getChannelData возвращается.

Я попытался обернуть MediaStream с MediaStreamAudioSourceNode и кормить его в AnalyserNode использовать getFloatFrequencyData() (который возвращает Float32Array), но я могу сказать, что данные отличаются от данных, я получаю от getChannelData(). Может быть, это не данные «PCM»? Как я могу получить данные «PCM»?

Надеюсь, это ясно. Спасибо за помощь!

ответ

2

Во-первых, примечание о том, что AnalyserNode только выборочно обрабатывает данные, но не будет обрабатывать все это. Я думаю, что это хорошо соответствует вашему сценарию, но просто знайте, что если вам нужны все данные (например, вы буферизируете аудио), вам нужно будет использовать ScriptProcessor вместо этого сегодня.

Предполагая, что вам просто нужны образцы данных, вы можете использовать AnalyserNode, но вы должны вызвать getFloatTimeDomainData(), а не getFloatFrequencyData(). Это даст вам данные PCM (FrequencyData дает вам FFT данных PCM).

+0

'getFloatTimeDomainData()' похоже, не возвращает данные того же типа, что и 'getChannelData()', поскольку результат, который я получаю от рисования формы волны на холсте с помощью 'getFloatTimeDomainData()', не очень хорош. Вы уверены, что оба массива представляют одни и те же данные и организованы одинаково? – maximedupre

+1

Если MediaStream имеет несколько каналов (например, стерео), 'AnalyserNode' смешивает их с моно. Вам нужно будет разделить данные MediaStream (используя «ChannelSplitterNode», чтобы получить нужную дорожку и отправить ее в анализатор. –

+0

@ RaymondToy Спасибо, Раймонд, который спас меня! Можете ли вы опубликовать это как ответ? Или cwilso , можете ли вы обновить свой ответ, чтобы включить эту дополнительную информацию? – maximedupre

 Смежные вопросы

  • Нет связанных вопросов^_^