65.9K
CodeProject 正在变化。 阅读更多。
Home

音频混音器功能演示

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.79/5 (49投票s)

2002年10月26日

4分钟阅读

viewsIcon

450534

downloadIcon

28493

多个演示应用程序,演示如何在您自己的应用程序中使用音频混合器函数。

引言

音频混合器函数是一组用于控制音频线路路由到目标设备以进行播放或录制的函数。它们还可以控制音量和其他效果。尽管此 API 只有十个函数和两个消息,但由于其灵活性,有些人可能觉得使用起来有点困难。在这里,我将演示四个简单的程序,以说明如何使用这个强大的 API。我将这四个程序保持得尽可能简单,并且一个程序只做一件事,这样您就可以轻松理解它们。我还尽可能尝试将实际操作与用户界面分开。与音频混合器函数相关的所有函数都带有前缀“amd”。我没有为这些函数编写 C++ 类,因为这里的主要目的是为您提供一个教程。为了掌握这个 API,您可以阅读 Platform SDK 中关于音频混合器的文档,并玩弄这四个程序。您可能还想查看 Platform SDK 音频示例“Mixapp: Sample Mixer Application”,它并不容易阅读。

为了更好地理解音频混合器函数,请牢记以下关键事实。

  • 系统中存在零个、一个或多个音频混合器设备。
  • 每个音频混合器设备都有一个或多个目标音频线路。
  • 每个目标音频线路都关联有零个、一个或多个源音频线路。
  • 每个(目标或源)音频线路都关联有零个、一个或多个混合器控件。混合器控件可以执行任意数量的功能(例如控制音量),具体取决于关联音频线路的特性。

所有四个程序都是基于 MFC 对话框的。为了简洁起见,如果系统中存在多个混合器设备,它们总是使用第一个混合器设备。在程序 1、2 和 4 中,`mixerOpen()` 函数在 `fdwOpen` 参数中调用 `CALLBACK_WINDOW` 标志,并在 `dwCallback` 参数中传入一个窗口句柄,以便在消息队列中接收 `MM_MIXM_CONTROL_CHANGE` 消息,从而刷新控件的状态。

程序 1. 主静音

Master Mute

此程序等同于 Windows 音量控制中用于播放的“全部静音”复选框。主静音控件是 `MIXERLINE_COMPONENTTYPE_DST_SPEAKERS` 目标音频线路的 `MIXERCONTROL_CONTROLTYPE_MUTE` 控件。它属于开关控件(`MIXERCONTROL_CT_CLASS_SWITCH`),是双态开关。它使用 `MIXERCONTROLDETAILS_BOOLEAN` 结构来检索和设置控件属性。每当单击复选框时,就会调用 `CMuteDlg::amdSetMasterMuteValue()` 来相应地设置主静音值。一旦主静音控件的状态发生更改,就会收到 `MM_MIXM_CONTROL_CHANGE` 消息。在这种情况下,将调用 `CMuteDlg::amdGetMasterMuteValue()` 来检索主静音控件的当前值并相应地更新复选框的状态。

程序 2. 主音量

Master Volume

此程序等同于 Windows 音量控制中用于播放的“音量控制”滑块。主音量控件是 `MIXERLINE_COMPONENTTYPE_DST_SPEAKERS` 目标音频线路的 `MIXERCONTROL_CONTROLTYPE_VOLUME` 控件。它属于滑块控件(`MIXERCONTROL_CT_CLASS_FADER`),具有线性刻度。它使用 `MIXERCONTROLDETAILS_UNSIGNED` 结构来检索和设置控件属性。每当单击滑块时,就会调用 `CVolumeDlg::amdSetMasterVolumeValue()` 来相应地设置主音量值。一旦主音量控件的状态发生更改,就会收到 `MM_MIXM_CONTROL_CHANGE` 消息。在这种情况下,将调用 `CVolumeDlg::amdGetMasterVolumeValue()` 来检索主音量控件的当前值并相应地更新滑块的状态。

程序 3. 波形电平表

Wave Meter

此程序等同于 Windows 音量控制中用于播放的“波形电平表”控件。波形电平表控件是与 `MIXERLINE_COMPONENTTYPE_DST_SPEAKERS` 目标音频线路关联的 `MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT` 源音频线路的 `MIXERCONTROL_CONTROLTYPE_PEAKMETER` 控件。它属于仪表控件(`MIXERCONTROL_CT_CLASS_METER`),用于测量通过音频线路的数据。它使用 `MIXERCONTROLDETAILS_SIGNED` 结构来检索和设置控件属性。创建了一个定时器以监视波形电平表控件的值。一旦收到 `WM_TIMER` 消息,将调用 `CMeterDlg::amdGetWaveMeterValue()` 来检索波形电平表控件的当前值并相应地更新进度条的状态。

运行它并通过其他应用程序播放声音文件,您可以看到它在跳动。请注意,MIDI 或 CD 音频的声音不会在这里反映出来,因为它们分别通过 `MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER` 或 `MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC` 源音频线路。

程序 4. 麦克风选择

Microphone Select

此程序等同于 Windows 音量控制中用于录制的“麦克风选择”复选框。麦克风选择控件是 `MIXERLINE_COMPONENTTYPE_DST_WAVEIN` 目标音频线路的 `MIXERCONTROL_CONTROLTYPE_MIXER` 或 `MIXERCONTROL_CONTROLTYPE_MUX` 控件之一。它属于列表控件(`MIXERCONTROL_CT_CLASS_LIST`),为复杂的音频线路提供单选或多选状态。它使用 `MIXERCONTROLDETAILS_BOOLEAN` 结构来检索和设置控件属性。每当单击复选框时,就会调用 `CSelectDlg::amdSetMicSelectValue()` 来相应地设置麦克风选择值。一旦麦克风选择控件的状态发生更改,就会收到 `MM_MIXM_CONTROL_CHANGE` 消息。在这种情况下,将调用 `CSelectDlg::amdGetMicSelectValue()` 来检索麦克风选择控件的当前值并相应地更新复选框的状态。

祝您编程愉快,好运!

© . All rights reserved.