求助mixer控制麦克风音量无效问题

hxy1937 2012-05-26 11:44:11
procedure TSoundRecord.SetMicPhoneVolum(Rate: Single);//调整麦克风音量。
var
Volume: Cardinal;
hmx: HMIXER;
mxl: MIXERLINE;
j, cConnections, cChannels: DWORD;
mxc: MIXERCONTROL;
mxlc: MIXERLINECONTROLS;
vol: MIXERCONTROLDETAILS_UNSIGNED;
mxcd: tMIXERCONTROLDETAILS;
begin
Volume := Round(Rate * MAXWORD); //要调整的音量值,rate为音量比例,MAXWORD为最大音量

mixerOpen(@hmx, 0, 0, 0, 0); //打开音频混合设备

mxl.cbStruct := SizeOf(mxl);
mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_DST_WAVEIN;//目标音频线路的控件类型.

mixerGetLineInfo(hmx, @mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);

//获取麦克风源线路,并连接到上述的线路目标
cConnections := mxl.cConnections;
for j := 0 to cConnections - 1 do
begin
mxl.dwSource := j;引
mixerGetLineInfo(hmx, @mxl, MIXER_GETLINEINFOF_SOURCE);
if MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE = mxl.dwComponentType then //如果不存在麦克风音频线路,则退出
Break;
end;

//如果存在麦克风线路,则查找音量控制
ZeroMemory(@mxlc, SizeOf(MIXERLINECONTROLS));
mxlc.cbStruct := SizeOf(MIXERLINECONTROLS);
mxlc.dwLineID := mxl.dwLineID;
mxlc.dwControlID := MIXERCONTROL_CONTROLTYPE_VOLUME;
mxlc.cControls := 1;
mxlc.cbmxctrl := SizeOf(MIXERCONTROL);
mxlc.pamxctrl := @mxc;
if mixerGetLineControls(hmx, @mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE) = 0 then
begin
cChannels := mxl.cChannels;
if (mxc.fdwControl and MIXERCONTROL_CONTROLF_UNIFORM) = 1 then //控制是否支持多声道
begin
cChannels := 1;
ZeroMemory(@mxcd, SizeOf(TMIXERCONTROLDETAILS));
mxcd.cbStruct := SizeOf(TMIXERCONTROLDETAILS);
mxcd.dwControlID := mxc.dwControlID;
mxcd.cChannels := cChannels;
mxcd.cMultipleItems := 0;
mxcd.cbDetails := SizeOf(MIXERCONTROLDETAILS_UNSIGNED);
mxcd.paDetails := @vol;

vol.dwValue := Volume;

mixerSetControlDetails(hmx, @mxcd, MIXER_SETCONTROLDETAILSF_VALUE);
end;

mixerClose(hmx);
end;
end;

上面的代码是通过混音器mixer控制麦克风音量。通过此函数可修改麦克风输入的音量。
问题是当mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_DST_WAVEIN时,mixerGetLineControls(hmx, @mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE) 为1024,即出现错误,退出程序。请问如何修正该错误
...全文
193 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧