vc++ 多媒体 怎样添加控制音量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vc++ 多媒体 怎样添加控制音量相关的知识,希望对你有一定的参考价值。

rtrt 添加一个windows media 的音量怎样弄 还有代码

我这里有调节系统音量的相关代码,希望对你有用。
请看这里(我以前做的一个音量调节软件,附源代码)
http://hi.baidu.com/qiujiejia/blog/item/407335c4b1a1acc239db49c7.html

下面是部分参考代码:
bool GetVolumeControl(HMIXER hmixer ,long componentType,long ctrlType,MIXERCONTROL* mxc)

MIXERLINECONTROLS mxlc;
MIXERLINE mxl;
mxl.cbStruct = sizeof(mxl);
mxl.dwComponentType = componentType;
if(!mixerGetLineInfo((HMIXEROBJ)hmixer, &mxl, MIXER_GETLINEINFOF_COMPONENTTYPE))

mxlc.cbStruct = sizeof(mxlc);
mxlc.dwLineID = mxl.dwLineID;
mxlc.dwControlType = ctrlType;
mxlc.cControls = 1;
mxlc.cbmxctrl = sizeof(MIXERCONTROL);
mxlc.pamxctrl = mxc;
if(mixerGetLineControls((HMIXEROBJ)hmixer,&mxlc,MIXER_GETLINECONTROLSF_ONEBYTYPE))
return 0;
else
return 1;

return 0;


unsigned GetVolumeValue(HMIXER hmixer ,MIXERCONTROL *mxc)

MIXERCONTROLDETAILS mxcd;
MIXERCONTROLDETAILS_UNSIGNED vol; vol.dwValue=0;
mxcd.hwndOwner = 0;
mxcd.cbStruct = sizeof(mxcd);
mxcd.dwControlID = mxc->dwControlID;
mxcd.cbDetails = sizeof(vol);
mxcd.paDetails = &vol;
mxcd.cChannels = 1;
if(mixerGetControlDetails((HMIXEROBJ)hmixer, &mxcd, MIXER_OBJECTF_HMIXER|MIXER_GETCONTROLDETAILSF_VALUE))
return -1;
return vol.dwValue;


bool SetVolumeValue(HMIXER hmixer ,MIXERCONTROL *mxc, long volume)

MIXERCONTROLDETAILS mxcd;
MIXERCONTROLDETAILS_UNSIGNED vol;vol.dwValue = volume;
mxcd.hwndOwner = 0;
mxcd.dwControlID = mxc->dwControlID;
mxcd.cbStruct = sizeof(mxcd);
mxcd.cbDetails = sizeof(vol);
mxcd.paDetails = &vol;
mxcd.cChannels = 1;
if(mixerSetControlDetails((HMIXEROBJ)hmixer, &mxcd, MIXER_OBJECTF_HMIXER|MIXER_SETCONTROLDETAILSF_VALUE))
return 0;
return 1;


//设置音量值
bool WINAPI SetVolume(LONG vol)

bool Result=false; //用于判断函数是否执行成功
MIXERCONTROL volCtrl;
HMIXER hmixer;
if(mixerOpen(&hmixer, 0, 0, 0, 0)) return 0;
if(GetVolumeControl(hmixer,MIXERLINE_COMPONENTTYPE_DST_SPEAKERS,MIXERCONTROL_CONTROLTYPE_VOLUME,&volCtrl))

int ChangeValue=volCtrl.Bounds.lMaximum/INTERVAL;
int TotalValue=ChangeValue*vol;
if(SetVolumeValue(hmixer,&volCtrl,TotalValue))
Result=true;

mixerClose(hmixer);
return Result;


//返回音量值
unsigned WINAPI GetVolume()

unsigned rt=0;
MIXERCONTROL volCtrl;
HMIXER hmixer;
if(mixerOpen(&hmixer, 0, 0, 0, 0)) return 0;
if(!GetVolumeControl(hmixer,MIXERLINE_COMPONENTTYPE_DST_SPEAKERS,MIXERCONTROL_CONTROLTYPE_VOLUME,&volCtrl))
return 0;
int ChangeValue=volCtrl.Bounds.lMaximum/INTERVAL; //每一次调用函数改变的音量值
rt=GetVolumeValue(hmixer,&volCtrl)/ChangeValue; //GetVolumeValue得到的是具体值
mixerClose(hmixer);
return rt;
参考技术A Mixer API函数
1获取混合器设备的数量
函数原型:
WINMMAPI UINT WINAPI mixerGetNumDevs(void);
函数说明:该函数用于获取系统中混合器设备的数量。

2打开混合器设备
函数原型:
WINMMAPI MMRESULT WINAPI mixerOpen(LPHMIXER phmx, UINT uMxId, DWORD dwCallback, DWORD dwInstance, DWORD fdwOpen);
函数说明:该函数用于打开混合器设备。
参数说明:
参数phmx是一个指向设备句柄的指针,当该函数调用成功,该指针就指向所打开的混合器设备句柄。
参数uMxId是混合器的标识号,用于指定要打开的混合器设备。
参数dwCallback是在混合器设备发生变化时,接收通知消息的窗口句柄。
参数dwInstance是传给回调函数的用户实例数据。
参数fdwOpen表示打开设备的标志。

3获取混合器设备指定音频线路的信息
函数原型:
WINMMAPI MMRESULT WINAPI mixerGetLineInfo(HMIXEROBJ hmxobj, LPMIXERLINE pmxl, DWORD fdwInfo);
函数说明:该函数用于获取混合器设备指定音频线路的信息。
参数说明:
参数hmxobj表示混合器设备对象句柄。
参数pmxl是MIXERLINE结构体对象,用于填充指定音频线路的相关信息。
参数fdwInfo用于指定得到哪些音频线路信息。

4获取与音频线路相关的控制
函数原型:
WINMMAPI MMRESULT WINAPI mixerGetLineControls(HMIXEROBJ hmxobj, LPMIXERLINECONTROLS pmxlc, DWORD fdwControls);
函数说明:该函数用于获取与音频线路相关的控制。
参数说明:
参数hmxobj表示混合器设备对象句柄。
参数pmxlc是MIXERLINECONTROLS结构体对象,用于填充控制信息。
参数fdwControls用于指定得到哪些线路的控制。

5获取指定控制器的详细信息
函数原型:
WINMMAPI MMRESULT WINAPI mixerGetControlDetails(HMIXEROBJ hmxobj, LPMIXERCONTROLDETAILS pmxcd, DWORD fdwDetails);
函数说明:该函数用于获取指定控制器的详细信息
参数说明:
参数hmxobj表示混合器设备对象句柄。
参数pmxcd是MIXERCONTROLDETAILS结构体对象,包含具体控制信息。
参数fdwDetails用于指定要获取的信息。

6设置指定控制器的详细信息
函数原型:
WINMMAPI MMRESULT WINAPI mixerSetControlDetails(HMIXEROBJ hmxobj, LPMIXERCONTROLDETAILS pmxcd, DWORD fdwDetails);
函数说明:该函数用于设置指定控制器的详细信息
参数说明:
参数hmxobj表示混合器设备对象句柄。
参数pmxcd是MIXERCONTROLDETAILS结构体对象,包含具体控制信息。
参数fdwDetails用于指定要设置的信息。

7关闭混合器设备
函数原型:
WINMMAPI MMRESULT WINAPI mixerClose(HMIXER hmx);
函数说明:该函数用于关闭混合器设备
参数说明:
参数hmx表示混合器设备对象句柄。
参考技术B 直接用类向导增加.

如何将路由添加到音量控制

【中文标题】如何将路由添加到音量控制【英文标题】:How to add a route to the volume controls 【发布时间】:2014-08-19 22:24:25 【问题描述】:

我正在更新我们的应用程序以符合新的 Google chromecast 指南。规格之一(使用硬件按钮更改接收器上的音量级别。可视音量滑块(左侧带有投射图标)应仅在按下硬件音量按钮时显示)。我假设他们的意思是这样的。

我似乎找不到任何可以添加设置标志以显示此路线或添加自定义路线的地方的地方。我浏览了 Companion 应用程序的所有内容,但没有找到任何可以完成此操作的地方。任何帮助将不胜感激。谢谢

这是我设置锁屏控件的代码的 sn-p

 AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
    audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
    ComponentName receiver = new ComponentName(context, RemoteControlReceiver.class.getName());
    audioManager.registerMediaButtonEventReceiver(receiver);

    Intent remoteControlIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
    remoteControlIntent.setComponent(receiver);
    PendingIntent mediaPendingIntent = PendingIntent.getBroadcast(context, 0, remoteControlIntent, 0);
    RemoteControlClient ctrlClient = new RemoteControlClient(mediaPendingIntent);
    ctrlClient.editMetadata(true)
            .putString(MediaMetadataRetriever.METADATA_KEY_TITLE, resources.getString(R.string.casting_episode, seriesItem.get().getName(), episodeItem.get().getEpisodeNumber()))
            .putString(MediaMetadataRetriever.METADATA_KEY_ALBUMARTIST, resources.getString(R.string.casting_to, selectedDevice.get().getFriendlyName()))
            .putBitmap(RemoteControlClient.MetadataEditor.BITMAP_KEY_ARTWORK, seriesImage.get())
            .apply();
            ctrlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_PLAYING);
    ctrlClient.setTransportControlFlags(RemoteControlClient.FLAG_KEY_MEDIA_PLAY_PAUSE | RemoteControlClient.FLAG_KEY_MEDIA_STOP);
    audioManager.registerRemoteControlClient(ctrlClient);
    audioManager.setMode(AudioManager.ROUTE_ALL);
    remoteControlClient = Optional.of(ctrlClient);

【问题讨论】:

【参考方案1】:

注册您的RemoteControlClient后,您需要将其添加到MediaRouter

mMediaRouter.addRemoteControlClient(mRemoteControlClient);

https://developer.android.com/reference/android/support/v7/media/MediaRouter.html#addRemoteControlClient(java.lang.Object)

【讨论】:

以上是关于vc++ 多媒体 怎样添加控制音量的主要内容,如果未能解决你的问题,请参考以下文章

WPF 媒体播放器(MediaElement)实例,实现进度和音量控制

是否有任何颤振插件可以控制在 Android 和 iOS 上工作的设备的媒体音量?

HMI-49-多媒体Title界面实现 4

流媒体测试的测试点

HMI-49-多媒体Title界面实现 4

多媒体集中控制系统 (4600版)