VC调节音量

简介: //----------------------------设定音量--------------------------------------- bool GetVolumeControl(HMIXER hmixer ,long componentType,long ctrlType,MIXERCONTROL* mxc) { MIXERLINECONTROLS mxlc; MIXER

//----------------------------设定音量--------------------------------------- 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; } //--------------------------------------------------------------------------- long GetMuteValue(HMIXER hmixer ,MIXERCONTROL *mxc) { MIXERCONTROLDETAILS mxcd; MIXERCONTROLDETAILS_BOOLEAN mxcdMute; mxcd.hwndOwner = 0; mxcd.cbStruct = sizeof(mxcd); mxcd.dwControlID = mxc->dwControlID; mxcd.cbDetails = sizeof(mxcdMute); mxcd.paDetails = &mxcdMute; mxcd.cChannels = 1; mxcd.cMultipleItems = 0; if (mixerGetControlDetails((HMIXEROBJ)hmixer, &mxcd,MIXER_OBJECTF_HMIXER|MIXER_GETCONTROLDETAILSF_VALUE)) return -1; return mxcdMute.fValue; } //--------------------------------------------------------------------------- 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 SetMuteValue(HMIXER hmixer ,MIXERCONTROL *mxc, bool mute) { MIXERCONTROLDETAILS mxcd; MIXERCONTROLDETAILS_BOOLEAN mxcdMute;mxcdMute.fValue=mute; mxcd.hwndOwner = 0; mxcd.dwControlID = mxc->dwControlID; mxcd.cbStruct = sizeof(mxcd); mxcd.cbDetails = sizeof(mxcdMute); mxcd.paDetails = &mxcdMute; mxcd.cChannels = 1; mxcd.cMultipleItems = 0; if (mixerSetControlDetails((HMIXEROBJ)hmixer, &mxcd, MIXER_OBJECTF_HMIXER|MIXER_SETCONTROLDETAILSF_VALUE)) return 0; return 1; } //--------------------------------------------------------------------------- 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; } //--------------------------------------------------------------------------- unsigned WINAPI GetVolume(int dev)//得到设备的音量dev=0主音量,1WAVE ,2MIDI ,3 LINE IN { long device;unsigned rt=0; MIXERCONTROL volCtrl; HMIXER hmixer; switch (dev) { case 1: device=MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT; break; case 2: device=MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER; break; case 3: // device=MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC; break; // cd 音量 // device=MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE; break; //麦克风音量 // device=MIXERLINE_COMPONENTTYPE_SRC_LINE; break; //PC 扬声器音量 device=MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC; break; default: device=MIXERLINE_COMPONENTTYPE_DST_SPEAKERS; } if(mixerOpen(&hmixer, 0, 0, 0, 0)) return 0; if(!GetVolumeControl(hmixer,device,MIXERCONTROL_CONTROLTYPE_VOLUME,&volCtrl)) return 0; rt=GetVolumeValue(hmixer,&volCtrl)*100/volCtrl.Bounds.lMaximum; mixerClose(hmixer); return rt; } //--------------------------------------------------------------------------- bool WINAPI SetVolume(long dev,long vol)//设置设备的音量 { // dev =0,1,2 分别表示主音量,波形,MIDI ,LINE IN // vol=0-100 表示音量的大小 , 设置与返回音量的值用的是百分比,即音量从0 - 100,而不是设备的绝对值 // retrun false 表示设置音量的大小的操作不成功 // retrun true 表示设置音量的大小的操作成功 long device; bool rc=false; MIXERCONTROL volCtrl; HMIXER hmixer; switch (dev) { case 1: device=MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT; break; case 2: device=MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER; break; case 3: device=MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC; break; default: device=MIXERLINE_COMPONENTTYPE_DST_SPEAKERS; } if(mixerOpen(&hmixer, 0, 0, 0, 0)) return 0; if(GetVolumeControl(hmixer,device,MIXERCONTROL_CONTROLTYPE_VOLUME,&volCtrl)) { vol=vol*volCtrl.Bounds.lMaximum/100; if(SetVolumeValue(hmixer,&volCtrl,vol)) rc=true; } mixerClose(hmixer); return rc; } //--------------------------------------------------------------------------- bool WINAPI SetMute(long dev,long vol)//设置设备静音 { // dev =0,1,2 分别表示主音量,波形,MIDI ,LINE IN // vol=0,1 分别表示取消静音,设置静音 // retrun false 表示取消或设置静音操作不成功 // retrun true 表示取消或设置静音操作成功 long device; bool rc=false; MIXERCONTROL volCtrl; HMIXER hmixer; switch (dev) { case 1: device=MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT; break; case 2: device=MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER; break; case 3: device=MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC; break; default: device=MIXERLINE_COMPONENTTYPE_DST_SPEAKERS; } if(mixerOpen(&hmixer, 0, 0, 0, 0)) return 0; if(GetVolumeControl(hmixer,device,MIXERCONTROL_CONTROLTYPE_MUTE,&volCtrl)) if(SetMuteValue(hmixer,&volCtrl,(bool)vol)) rc=true; mixerClose(hmixer); return rc; } //--------------------------------------------------------------------------- bool WINAPI GetMute(long dev)//检查设备是否静音 { //dev =0,1,2 分别表示主音量,波形,MIDI ,LINE IN // retrun false 表示没有静音 // retrun true 表示静音 long device; bool rc=false; MIXERCONTROL volCtrl; HMIXER hmixer; switch (dev) { case 1: device=MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT; break; case 2: device=MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER; break; case 3: device=MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC; break; default: device=MIXERLINE_COMPONENTTYPE_DST_SPEAKERS; } if(mixerOpen(&hmixer, 0, 0, 0, 0)) return 0; if(GetVolumeControl(hmixer,device,MIXERCONTROL_CONTROLTYPE_MUTE,&volCtrl)) rc=GetMuteValue(hmixer,&volCtrl); mixerClose(hmixer); return rc; } 使用: //调节音量 void __fastcall TForm1::TrackBar0Change(TObject *Sender) { SetVolume(0,TrackBar0->Position*10); } //静音 void __fastcall TForm1::CheckBox0Click(TObject *Sender) { SetMute(0,CheckBox0->Checked); } 

相关文章
|
存储
QT图形视图框架绘制曲线图和Smith图
QT图形视图框架绘制曲线图和Smith图
689 0
|
7月前
|
机器学习/深度学习 传感器 数据采集
告别死记硬背,这篇机器学习“黑话”指南让你秒变内行
本 glossary 以工业制造为隐喻,系统梳理机器学习全链路核心概念:从数据预处理(特征工程、归一化、降维等)、主流算法(SVM、CNN、Transformer等),到训练优化(损失函数、反向传播、正则化)、模型评估(混淆矩阵、F1、AUC)及工程部署(MLOps、边缘推理)。共52个术语,兼顾准确性与可理解性,助力快速掌握ML知识体系。(239字)
680 4
|
8月前
|
人工智能 机器人 API
从“调个 API”到“自己养模型”:用 Python 快速构建聊天机器人的完整路径
从“调个 API”到“自己养模型”:用 Python 快速构建聊天机器人的完整路径
765 4
|
3月前
|
人工智能 安全 API
阿里云百炼 Token Plan 团队版上线!Qwen3.8抢先体验!
阿里云百炼Token Plan以统一Credits计费,打通文本、图像、视频等多模态模型及主流AI工具,支持三档包月套餐、团队管控、高峰算力隔离与数据隐私保障,一站式解决预算混乱、模型割裂、限流卡顿、安全隐忧四大痛点。
|
6月前
|
机器学习/深度学习 人工智能 缓存
大模型应用:情感分析:用Stacking堆叠集成+大模型实现1+1>2的AI决策.92
本文详解Stacking集成学习:通过多层协作提升模型性能。第一层用互补小模型(如朴素贝叶斯、SVM、轻量BERT)并行预测;第二层引入大模型作为元模型,融合原始文本与各小模型输出,动态加权、纠错推理,实现“1+1>2”。附完整代码与情感分析实测(准确率从87.3%提升至94.0%)。
333 2
|
9月前
|
运维 监控 Cloud Native
Linux Kernel:云原生时代的操作系统内核
Linux Kernel是1991年Linus创建的开源内核,作为云计算与容器技术的基石,支撑进程隔离(Namespace/Cgroups)、K8s资源限制、eBPF监控等核心能力。掌握其五大子系统,是运维深入云原生的关键。(239字)
1180 10
|
9月前
|
人工智能 搜索推荐 安全
2026年LLM Agent对比传统Agent优势有哪些
2026年,AI正经历从“工具”到“伙伴”的范式革命。传统Agent受限于僵化流程,而LLM Agent以大模型为“大脑”,具备规划、记忆与工具调用能力,实现从执行到思考的跨越。适应复杂任务、动态决策与多智能体协作,推动AI迈向可信生产力。企业需拥抱认知驱动的智能体系统,构建人机协同的未来工作流。
1016 0
|
机器学习/深度学习 传感器 算法
【航迹】基于MN逻辑算法实现航迹关联和卡尔曼滤波外推附matlab代码
【航迹】基于MN逻辑算法实现航迹关联和卡尔曼滤波外推附matlab代码
759 0
|
传感器 人工智能 数据挖掘
柔性电子器件:未来可穿戴技术的趋势
【9月更文挑战第30天】柔性电子器件是一种将电子元件集成在柔性基板上的新兴技术,具备出色的灵活性和适应性。本文探讨了其定义、发展历程及关键技术,并展望了其在可穿戴设备中的应用前景。柔性电子器件不仅能够实时监测生理信号,还能实现自然图像显示和持久能量供应,推动医疗健康、智能手表等领域的发展。尽管面临制造成本和耐久性等挑战,其市场潜力巨大,预计到2025年将达到340亿美元,引领智能穿戴技术的新时代。
1225 2
|
存储 安全 编译器
【C++核心】一文理解C++面向对象(超级详细!)
这篇文章详细讲解了C++面向对象的核心概念,包括类和对象、封装、继承、多态等。
525 2

热门文章

最新文章