unit 操纵声卡;
interface
uses Windows, Dialogs, MMSystem;
Type
TDeviceName = (Master, Microphone, WaveOut, Synth);// - 获取音量
function GetVolume(DN: TDeviceName): Word;
// - 设置音量
procedure SetVolume(DN: TDeviceName; Value: Word);
// - 获取静音
function GetVolumeMute(DN: TDeviceName): Boolean;
// - 设置静音
procedure SetVolumeMute(DN: TDeviceName; Value: Boolean);implementation
// - 初始化 TMixerLine
function Initial_mxl(DN: TDeviceName): TMixerLine;
begin
with Result do
begin
case DN of
Master:
dwComponentType := MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
Microphone:
dwComponentType := MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;
WaveOut:
dwComponentType := MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT;
Synth:
dwComponentType := MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER;
end;
cbStruct := SizeOf(TMixerLine);
end;
end;// - 初始化 MIXERLINECONTROLS
function Initial_mxlc(mxl: TMixerLine; var mxc: MixerControlW; dwCType: DWORD)
: MIXERLINECONTROLS;
begin
FillChar(Result, SizeOf(Result), 0);
with Result do
begin
cbStruct := SizeOf(Result);
dwLineID := mxl.dwLineID;
dwControlType := dwCType;
cControls := 1;
cbmxctrl := SizeOf(mxc);
pamxctrl := @mxc;
end;
end;// - 初始化 TMIXERCONTROLDETAILS
function Initial_mxcd(mxc: MIXERCONTROL; var vol: DWORD): TMIXERCONTROLDETAILS;
begin
FillChar(Result, SizeOf(Result), 0);
with Result do
begin
cbDetails := SizeOf(DWORD);
cChannels := 1;
cbStruct := SizeOf(Result);
cMultipleItems := 0;
dwControlID := mxc.dwControlID;
paDetails := @vol;
end;
end;// - 获取音量
function GetVolume(DN: TDeviceName): Word;
var
hMix: HMIXER;
mxl: TMixerLine;
mxlc: MIXERLINECONTROLS;
mxc: MIXERCONTROL;
mxcd: TMIXERCONTROLDETAILS;
vol: TMIXERCONTROLDETAILS_UNSIGNED;
begin
Result := 0;
// - 混频器存在且打开成功
if (mixerGetNumDevs > 0) and (mixerOpen(@hMix, 0, 0, 0, 0) = MMSYSERR_NOERROR)
then
try
mxl := Initial_mxl(DN);
// - 检取混频器有关特有线路的信息
if mixerGetLineInfo(hMix, @mxl, MIXER_GETLINEINFOF_COMPONENTTYPE) = MMSYSERR_NOERROR
then
begin
mxlc := Initial_mxlc(mxl, mxc, MIXERCONTROL_CONTROLTYPE_VOLUME);
// - 获得与音频线路相关控制的通用信息
if mixerGetLineControls(hMix, @mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE) = MMSYSERR_NOERROR
then
begin
mxcd := Initial_mxcd(mxc, DWORD(vol));
Result := vol.dwValue;
// - 获得与某音频线路相关的一个控制的属性
if mixerGetControlDetails(hMix, @mxcd, MIXER_SETCONTROLDETAILSF_VALUE)
<> MMSYSERR_NOERROR then
ShowMessage('GetControlDetails Error');
end
else
ShowMessage('GetLineInfo Error');
end;
finally
// - 关闭指定的混频器
mixerClose(hMix);
end;
end;// - 设置音量
procedure SetVolume(DN: TDeviceName; Value: Word);
var
hMix: HMIXER;
mxl: TMixerLine;
mxlc: MIXERLINECONTROLS;
mxc: MIXERCONTROL;
mxcd: TMIXERCONTROLDETAILS;
vol: TMIXERCONTROLDETAILS_UNSIGNED;
begin
// - 混频器存在且打开成功
if (mixerGetNumDevs > 0) and (mixerOpen(@hMix, 0, 0, 0, 0) = MMSYSERR_NOERROR)
then
try
mxl := Initial_mxl(DN);
// - 检取混频器有关特有线路的信息
if mixerGetLineInfo(hMix, @mxl, MIXER_GETLINEINFOF_COMPONENTTYPE) = MMSYSERR_NOERROR
then
begin
mxlc := Initial_mxlc(mxl, mxc, MIXERCONTROL_CONTROLTYPE_VOLUME);
// - 获得与音频线路相关控制的通用信息
if mixerGetLineControls(hMix, @mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE) = MMSYSERR_NOERROR
then
begin
mxcd := Initial_mxcd(mxc, DWORD(vol));
vol.dwValue := Value;
// - 设置指定控制的属性
if mixerSetControlDetails(hMix, @mxcd, MIXER_SETCONTROLDETAILSF_VALUE)
<> MMSYSERR_NOERROR then
ShowMessage('SetControlDetails Error');
end
else
ShowMessage('GetLineInfo Error');
end; finally
// - 关闭指定的混频器
mixerClose(hMix);
end;
end;// - 获取静音
function GetVolumeMute(DN: TDeviceName): Boolean;
var
hMix: HMIXER;
mxl: TMixerLine;
mxlc: MIXERLINECONTROLS;
mxc: MIXERCONTROL;
mxcd: TMIXERCONTROLDETAILS;
mcdMute: MIXERCONTROLDETAILS_BOOLEAN;
begin
Result := False;
// - 混频器存在且打开成功
if (mixerGetNumDevs > 0) and (mixerOpen(@hMix, 0, 0, 0, 0) = MMSYSERR_NOERROR)
then
try
mxl := Initial_mxl(DN);
// - 检取混频器有关特有线路的信息
if mixerGetLineInfo(hMix, @mxl, MIXER_GETLINEINFOF_COMPONENTTYPE) = MMSYSERR_NOERROR
then
begin
mxlc := Initial_mxlc(mxl, mxc, MIXERCONTROL_CONTROLTYPE_MUTE);
// - 获得与音频线路相关控制的通用信息
if mixerGetLineControls(hMix, @mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE) = MMSYSERR_NOERROR
then
begin
mxcd := Initial_mxcd(mxc, DWORD(mcdMute));
// - 获得与某音频线路相关的一个控制的属性
if mixerGetControlDetails(hMix, @mxcd, MIXER_SETCONTROLDETAILSF_VALUE)
<> MMSYSERR_NOERROR then
ShowMessage('SetControlDetails Error');
Result := (mcdMute.fValue <> 0);
end
else
ShowMessage('GetLineInfo Error');
end;
finally
// - 关闭指定的混频器
mixerClose(hMix);
end;
end;// - 设置静音
procedure SetVolumeMute(DN: TDeviceName; Value: Boolean);
var
hMix: HMIXER;
mxl: TMixerLine;
mxlc: MIXERLINECONTROLS;
mxc: MIXERCONTROL;
mxcd: TMIXERCONTROLDETAILS;
mcdMute: MIXERCONTROLDETAILS_BOOLEAN;
begin
// - 混频器存在且打开成功
if (mixerGetNumDevs > 0) and (mixerOpen(@hMix, 0, 0, 0, 0) = MMSYSERR_NOERROR)
then
try
mxl := Initial_mxl(DN);
// - 检取混频器有关特有线路的信息
if mixerGetLineInfo(hMix, @mxl, MIXER_GETLINEINFOF_COMPONENTTYPE) = MMSYSERR_NOERROR
then
begin
mxlc := Initial_mxlc(mxl, mxc, MIXERCONTROL_CONTROLTYPE_MUTE);
// - 获得与音频线路相关控制的通用信息
if mixerGetLineControls(hMix, @mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE) = MMSYSERR_NOERROR
then
begin
mxcd := Initial_mxcd(mxc, DWORD(mcdMute));
mcdMute.fValue := Ord(Value);
// - 设置指定控制的属性
if mixerSetControlDetails(hMix, @mxcd, MIXER_SETCONTROLDETAILSF_VALUE)
<> MMSYSERR_NOERROR then
ShowMessage('SetControlDetails Error');
end
else
ShowMessage('GetLineInfo Error');
end;
finally
// - 关闭指定的混频器
mixerClose(hMix);
end;
end;end.
android 缺省声卡
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
上一篇:python cv2画填充多边形

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Android Handler机制
Handler机制
ide 赋值 构造方法 -
android adb 查看声卡版本 android 声卡驱动
1、在调试中出现问题后,首先看I2C通信有没有问题,wm8960寄存器的设置是靠I2C来完成,另外I2C通信不成功在开发板中是没 有声卡相关的设备节点。 a、首先查看Machine代码中的I2C的序号、名字和地址与DSP代码中I2C的序号、名字和地址是否相对应。 &nb
android adb 查看声卡版本 android Linux ALSA 声卡驱动