关于音量控制的问题

时间:2021-05-31 20:09:21
要在程序里面设置音量的播放音量,并且让其不影响系统或者别的程序的音量,这个是否有相关的api接口?

有尝试如下做法:
1、用mixer这套,是直接修改了系统的混音器来改变音量,这个貌似不能满足要求。

2、用mciSendCommand这套的
mciSendCommand(m_hDev, MCI_SETAUDIO, MCI_DGV_SETAUDIO_VALUE | MCI_DGV_SETAUDIO_ITEM, (DWORD)(LPVOID)&mciSetAudioPara);

返回错误码247即MCIERR_UNSUPPORTED_FUNCTION。


哪位高手帮忙解决下。

17 个解决方案

#1


使用mci放音?

#2


试试auxSetVolume

#3


引用 1 楼 ndy_w 的回复:
使用mci放音?

恩,是的,是使用mci放音的,然后看到有这么个参数 MCI_SETAUDIO,以为没问题了,没想到不起作用

#4


我实现的是 程序中一旦调整音量,就调整了系统的音量,想LZ学习。。

#5


引用 2 楼 buyong 的回复:
试试auxSetVolume


我有使用过waveOutSetVolume这个api,跟auxsetvolume应该是一样的。
我是这么使用的waveOutSetVolume(0,100);没有什么效果

#6


引用 4 楼 lichunli1022 的回复:
我实现的是 程序中一旦调整音量,就调整了系统的音量,想LZ学习。。


呵呵,估计就是用直接调用混音器这套api了

#7


你先试试waveOutSetVolume(0,0);如果还没效果,说明你的hwo设置不对。
waveOutSetVolume返回值检查了吗
引用 5 楼 freshman45 的回复:
引用 2 楼 buyong 的回复:
试试auxSetVolume


我有使用过waveOutSetVolume这个api,跟auxsetvolume应该是一样的。
我是这么使用的waveOutSetVolume(0,100);没有什么效果

#8


mci对audio好像不能设置音量,video可以...

#9


waveOutSetVolume试试看

#10


引用 7 楼 buyong 的回复:
你先试试waveOutSetVolume(0,0);如果还没效果,说明你的hwo设置不对。
waveOutSetVolume返回值检查了吗


有检查了这个返回值是0;没有错误。
对了,我播放音效是用mci这套。

#11


引用 8 楼 ndy_w 的回复:
mci对audio好像不能设置音量,video可以...


好像看其msdn的描述,好像是有这么一说。

#12


独立控制音量用 DirectSound

#13


引用 12 楼 zgl7903 的回复:
独立控制音量用 DirectSound


我这边用的是mci做播放处理,可以用directsound控制音量,是否有相关的代码?

#14


mixerSetControlDetails( 
(HMIXEROBJ)m_HMixer, 
&mxcd, 
MIXER_OBJECTF_HMIXER|MIXER_SETCONTROLDETAILSF_VALUE) != MMSYSERR_NOERROR )

#15


引用 14 楼 king_query 的回复:
mixerSetControlDetails( 
(HMIXEROBJ)m_HMixer, 
&mxcd, 
MIXER_OBJECTF_HMIXER|MIXER_SETCONTROLDETAILSF_VALUE) != MMSYSERR_NOERROR )


我就是这么用的啦,混音器这套还是会影响到系统的音量的

#16


#include "Digitalv.h"

#pragma comment(lib,"winmm.lib")

MCI_DGV_SETAUDIO_PARMS mciDSP;

mciDSP.dwItem=MCI_DGV_SETAUDIO_VOLUME;
mciDSP.dwValue=nVolumeValue;

mciSendCommand(nDeviceID,MCI_SETAUDIO,MCI_DGV_SETAUDIO_VALUE|MCI_DGV_SETAUDIO_ITEM,(DWORD)(LPVOID)&mciDSP);

应该能行!

#17


//mci设置音量,mciSendString设置音量
mciSendString(L"setaudio "+exName+" volume to 500", 0, 0, 0); //500是设置的音量值

#1


使用mci放音?

#2


试试auxSetVolume

#3


引用 1 楼 ndy_w 的回复:
使用mci放音?

恩,是的,是使用mci放音的,然后看到有这么个参数 MCI_SETAUDIO,以为没问题了,没想到不起作用

#4


我实现的是 程序中一旦调整音量,就调整了系统的音量,想LZ学习。。

#5


引用 2 楼 buyong 的回复:
试试auxSetVolume


我有使用过waveOutSetVolume这个api,跟auxsetvolume应该是一样的。
我是这么使用的waveOutSetVolume(0,100);没有什么效果

#6


引用 4 楼 lichunli1022 的回复:
我实现的是 程序中一旦调整音量,就调整了系统的音量,想LZ学习。。


呵呵,估计就是用直接调用混音器这套api了

#7


你先试试waveOutSetVolume(0,0);如果还没效果,说明你的hwo设置不对。
waveOutSetVolume返回值检查了吗
引用 5 楼 freshman45 的回复:
引用 2 楼 buyong 的回复:
试试auxSetVolume


我有使用过waveOutSetVolume这个api,跟auxsetvolume应该是一样的。
我是这么使用的waveOutSetVolume(0,100);没有什么效果

#8


mci对audio好像不能设置音量,video可以...

#9


waveOutSetVolume试试看

#10


引用 7 楼 buyong 的回复:
你先试试waveOutSetVolume(0,0);如果还没效果,说明你的hwo设置不对。
waveOutSetVolume返回值检查了吗


有检查了这个返回值是0;没有错误。
对了,我播放音效是用mci这套。

#11


引用 8 楼 ndy_w 的回复:
mci对audio好像不能设置音量,video可以...


好像看其msdn的描述,好像是有这么一说。

#12


独立控制音量用 DirectSound

#13


引用 12 楼 zgl7903 的回复:
独立控制音量用 DirectSound


我这边用的是mci做播放处理,可以用directsound控制音量,是否有相关的代码?

#14


mixerSetControlDetails( 
(HMIXEROBJ)m_HMixer, 
&mxcd, 
MIXER_OBJECTF_HMIXER|MIXER_SETCONTROLDETAILSF_VALUE) != MMSYSERR_NOERROR )

#15


引用 14 楼 king_query 的回复:
mixerSetControlDetails( 
(HMIXEROBJ)m_HMixer, 
&mxcd, 
MIXER_OBJECTF_HMIXER|MIXER_SETCONTROLDETAILSF_VALUE) != MMSYSERR_NOERROR )


我就是这么用的啦,混音器这套还是会影响到系统的音量的

#16


#include "Digitalv.h"

#pragma comment(lib,"winmm.lib")

MCI_DGV_SETAUDIO_PARMS mciDSP;

mciDSP.dwItem=MCI_DGV_SETAUDIO_VOLUME;
mciDSP.dwValue=nVolumeValue;

mciSendCommand(nDeviceID,MCI_SETAUDIO,MCI_DGV_SETAUDIO_VALUE|MCI_DGV_SETAUDIO_ITEM,(DWORD)(LPVOID)&mciDSP);

应该能行!

#17


//mci设置音量,mciSendString设置音量
mciSendString(L"setaudio "+exName+" volume to 500", 0, 0, 0); //500是设置的音量值