更改左右声道音量分别波出集卷C++
Change Left and Right Channels Volume seperatly waveOutSetVolume C++
>实际上我想将音频设备的左声道和右声道的音量控制交给用户,该用户为每个声道使用不同的数字。我使用了"waveOutSetVolume()"。它有 2 个参数,第一个是句柄,第二个是十六进制或 DWORD 编号。
我得到了 2 个数字,每个数字对应每个通道,然后将它们转换为字符串。现在我如何将它们转换为"0x"格式的十六进制?一般来说,如何分别改变每个通道的音量?
void Audio::setChannelsVolume(int rightChannelVolume, int leftChannelVolume)
{
if(leftChannelVolume < 0)
leftChannelVolume = 0;
if(leftChannelVolume > 100)
leftChannelVolume = 100;
if(rightChannelVolume < 0)
rightChannelVolume = 0;
if(rightChannelVolume > 100)
rightChannelVolume = 100;
stringstream volume;
if(leftChannelVolume < 7 && leftChannelVolume > 0)
volume << "0x0" << std::hex << soundVolumeCalculus(leftChannelVolume);
else
volume << "0x"<< std::hex << soundVolumeCalculus(leftChannelVolume);
if(rightChannelVolume < 7 && rightChannelVolume > 0)
volume << "0" << std::hex << soundVolumeCalculus(rightChannelVolume);
else
volume << std::hex << soundVolumeCalculus(rightChannelVolume);
string str = volume.str();
cout<<str;
const char* ch = str.c_str();
waveOutSetVolume(hWaveOut,(DWORD)ch);
}
///
int Audio::soundVolumeCalculus(int volume)
{
return (int)((65535*volume)/100);
}
我解决了这个问题
DWORD d = 0xffff & soundVolumeCalculus(leftChannelVolume) ;
DWORD dd = 0xffff0000 & (soundVolumeCalculus(rightChannelVolume)*65535);
waveOutSetVolume(hWaveOut,dd+d);
相关文章:
- FLTK 2.0构建和演示,适用于VS2019的2011年左右的代码库
- 不使用与左右停止工作命名空间 std 的简单比较
- 如何在同一行上格式化左右对齐?
- C 在同一行中左右显示文本
- 使用mynteye立体声摄像机在ROS中发布左右视频
- 如何在x轴左右绘制图形
- 是否可以从SFML中的音频样本中左右通道分开
- 单元测试 - 仅在"int main()"左右重新编译以减少编译时间
- 使用二维数组作为一维数组是否正确?可能会导致未定义的行为左右?
- 是GLM矩阵乘法左右
- python永远不能调用包含继承逻辑的c++dll或左右文件
- 分别计算左右孩子的二进制树
- 逗号操作员的左右操作数没有效果(警告)
- 操作员 左右超载
- 在二进制搜索树中左右打印子树
- 在C 中使用SFML.尝试在循环中播放WAV文件,但仅播放第一秒钟左右
- QSystemTrayicon左右单击左右单击
- clang 3.6倍左右表达
- 避免在C++中与树的左右子项重复
- 同一行上的左右对齐方式(RTF FILE)