我在mp3文件上使用AudioContext
' decodeAudioData
,这给了我一个AudioBuffer
。有了这个音频缓冲区,我继续使用getChannelData()
返回的数据在画布上绘制这个mp3文件的波形。
现在我想使用相同的代码绘制MediaStream
的音频数据波形,这意味着我需要相同类型的输入/数据。我知道MediaStream
包含实时信息,但必须有一种方法可以从MediaStream
访问每个新数据
包含PCM数据的Float32Array
这是AudioBuffer
' s getChannelData
返回的内容。
我尝试用MediaStream
包裹MediaStreamAudioSourceNode
并将其反馈到AnalyserNode
以使用getFloatFrequencyData()
(返回Float32Array
),但我可以告诉数据与我从getChannelData()
获得的数据不同。也许它不是" PCM"数据?我怎样才能得到" PCM"数据?
希望这很清楚。谢谢你的帮助!
答案 0 :(得分:3)
首先,请注意AnalyserNode仅偶尔对数据进行采样,但不会处理所有数据。我认为这很适合您的场景,但只要知道如果您需要所有数据(例如,您正在缓冲音频),您今天就需要使用ScriptProcessor。
假设您只想要数据样本,可以使用AnalyserNode,但是应该调用getFloatTimeDomainData(),而不是getFloatFrequencyData()。这将为您提供PCM数据(FrequencyData为您提供PCM数据的FFT)。
答案 1 :(得分:1)
使用音频上下文创建MediaStreamDestination,然后从流中创建新的MediaRecorder,
...
public class AppConfig extends WebSecurityConfigurerAdapter {
@Autowired
MyAuthenticationProvider myAuthenticationProvider;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.addFilterBefore(new MyAuthenticationFilter(authenticationManager()), BasicAuthenticationFilter.class)
...
}
@Bean
public AuthenticationManager authenticationManager() {
return new ProviderManager(Arrays.asList(myAuthenticationProvider));
}
}