c++ - 分别更改左右声道音量 waveOut SetVolume C++

标签 c++ waveout

实际上我想将音频设备的左声道和右声道的音量控制给用户,用户为每个声道使用不同的数字。 我使用了“waveOutSetVolume()”。它有 2 个参数。第一个是句柄,第二个是十六进制或 DWORD 数字。

我有 2 个数字。每个 channel 一个,然后将它们转换为字符串。现在如何将它们转换为“0x”格式的十六进制? 一般如何分别改变每个 channel 的音量?

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);

关于c++ - 分别更改左右声道音量 waveOut SetVolume C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22785199/

相关文章:

c++ - 如何检测对临时对象成员的引用

c++ - 使用 VS 宏设置 PreprocessorDefinitions

audio - 使用 WaveOUT API 产生无失真的 Tone 声音所需的最小音频缓冲区是多少

c++ - 双缓冲 waveOutWrite() 像 hell 一样口吃

Windows 核心音频 API + WaveOutXxx API

c++ - 在模板类中实例化自由模板函数

c++ - NetApiBufferFree 返回 ERROR_INVALID_PARAMETER(错误代码 87)

c++ - 如果类型来自 std,是否可以创建一个特征来回答?

c# - 内存样本中的Naudio回放会产生声音的延迟和不美观的间隙