用DirectX 做录音,如何监控输入的音量波形数据,以生成实时波行图?
以前我用 WAV SDK 写数据的时候,可以通过 waveInOpen 函数,指定一个 callback function, 这时录制的数据,就可以通过这个 callback function 获取到,然后经过分析, 可以知道当时音量波数数据,从而在界面上生成实时波形图.就象 windows 自带的那个录音机一样.
我现在在使用 DirectX 制作录音程序.碰到了两个问题:
1. 如果在 DirectX 获取当前录音的音量波形数据, 从而生成实时波形图?我录音的流程是:
Microphone(Sound card)-> Audio Compression -> AVI Mux -> *.avi
2. 如何监控 Mixer 控件状态的改变? 例如,当用户通过 Windows 的音量调节,将 Microphone 输入改成 Stereo Mix 输入时, 或者调整了音量的大小时,应用程序会收到一个 MM_MIXM_CONTROL_CHANGE 事件.我现在的控制都是通过 DIREXTX控制的,不想再掺入 Multimedia SDK 的代码.这部分DirectX 有办法实现么?
[解决办法]
问题1)Audio Compression 之前是pcm数据的样本,你一样可以根据样本值分析生成波谱表
问题2)对volume,同样有事件监控,你可以用Mixer API CALLBACK_EVENT或者CALLBACK_FUNCTION监控,关于DX有没有,我倒是不知道,你可以看看Graph没有向上投递Event