Я использую AudioContext
decodeAudioData
на mp3-файле, который дает мне AudioBuffer
. С этим звуковым буфером я продолжаю рисовать форму этого mp3-файла на холсте, используя данные, возвращаемые getChannelData()
.AudioBuffer «getChannelData()» эквивалент для MediaStream (или MediaStreamAudioSourceNode)?
Теперь я хочу использовать тот же код для рисования формы звуковых данных MediaStream
, что означает, что мне нужен один и тот же тип ввода/данных. Я знаю, что MediaStream
содержит информацию в реальном времени, но должен быть способ доступа к каждому новые данные из MediaStream
как
в Float32Array, содержащий данные
PCM, которая является то, что AudioBuffer
«s getChannelData
возвращается.
Я попытался обернуть MediaStream
с MediaStreamAudioSourceNode
и кормить его в AnalyserNode
использовать getFloatFrequencyData()
(который возвращает Float32Array
), но я могу сказать, что данные отличаются от данных, я получаю от getChannelData()
. Может быть, это не данные «PCM»? Как я могу получить данные «PCM»?
Надеюсь, это ясно. Спасибо за помощь!
'getFloatTimeDomainData()' похоже, не возвращает данные того же типа, что и 'getChannelData()', поскольку результат, который я получаю от рисования формы волны на холсте с помощью 'getFloatTimeDomainData()', не очень хорош. Вы уверены, что оба массива представляют одни и те же данные и организованы одинаково? – maximedupre
Если MediaStream имеет несколько каналов (например, стерео), 'AnalyserNode' смешивает их с моно. Вам нужно будет разделить данные MediaStream (используя «ChannelSplitterNode», чтобы получить нужную дорожку и отправить ее в анализатор. –
@ RaymondToy Спасибо, Раймонд, который спас меня! Можете ли вы опубликовать это как ответ? Или cwilso , можете ли вы обновить свой ответ, чтобы включить эту дополнительную информацию? – maximedupre