1

decodeAudioData을 mp3 파일에 사용하면 AudioBuffer이됩니다. 이 오디오 버퍼로, 나는 getChannelData()에 의해 반환 된 데이터를 사용하여 캔버스에이 mp3 파일의 파형을 그립니다.AudioStream의 "getChannelData()"는 MediaStream (또는 MediaStreamAudioSourceNode)과 동일합니까?

이제 동일한 코드를 사용하여 MediaStream의 오디오 데이터 파형을 그려야합니다. 즉, 동일한 종류의 입력/데이터가 필요합니다. 나는 MediaStream 실시간 정보가 들어 알지만, 인 PCM 데이터

를 포함하는 MediaStream

로 Float32Array에서 각각의 새로운 데이터에 액세스 할 수있는 방법이 있어야 무엇 AudioBuffergetChannelData 보고.

은 내가 MediaStreamAudioSourceNode으로 MediaStream을 포장하고 (A Float32Array를 반환하는) getFloatFrequencyData()를 사용하는 AnalyserNode로 먹이려고했는데, 나는 데이터가 내가 getChannelData()에서 얻는 데이터는 다른 알 수 있습니다. 어쩌면 "PCM"데이터가 아닐까요? "PCM"데이터는 어떻게 얻을 수 있습니까?

바라건대 이것은 분명합니다. 도와 주셔서 감사합니다!

답변

2

먼저 AnalyserNode는 데이터를 가끔 샘플링하지만 모든 데이터를 처리하지는 않습니다. 나는 당신의 시나리오와 잘 어울리는다고 생각하지만, 모든 데이터 (오디오를 버퍼링하는 것 같은)가 필요하다면, 대신에 오늘 ScriptProcessor를 사용할 필요가 있다는 것을 알아야한다.

데이터의 샘플을 원한다면 AnalyserNode를 사용할 수 있지만 getFloatFrequencyData()가 아닌 getFloatTimeDomainData()를 호출해야합니다. 그러면 PCM 데이터가 제공됩니다 (FrequencyData가 PCM 데이터의 FFT를 제공함).

+0

getFloatTimeDomainData()'getFloatTimeDomainData()'가 캔버스의 파형을 그릴 때 얻는 결과와 같이 'getChannelData()'와 같은 종류의 데이터를 반환하지 않는 것 같습니다. 두 배열이 모두 같은 데이터를 나타내며 같은 방식으로 구성되어 있습니까? – maximedupre

+1

MediaStream에 여러 채널 (스테레오, 말)이있는 경우, 'AnalyserNode'는 이들을 모노로 믹스합니다. MediaStream 데이터를 분리해야합니다 (ChannelSplitterNode를 사용하여 원하는 트랙을 가져 와서 분석기로 보냅니다.) –

+0

@ RaymondToy 저를 구해준 Raymond에게 감사드립니다. ,이 추가 정보를 포함하도록 답변을 업데이트 할 수 있습니까? – maximedupre

관련 문제