【问题标题】:Change Left and Right Channels Volume seperatly waveOutSetVolume C++分别改变左右声道音量 waveOut SetVolume C++
【发布时间】:2014-05-12 04:28:43
【问题描述】:

实际上,我想将音频设备的左声道和右声道的音量控制权交给用户,用户对每个声道使用不同的数字。 我使用“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);
}

【问题讨论】:

    标签: c++ waveout


    【解决方案1】:

    我解决了这个问题

    DWORD d = 0xffff & soundVolumeCalculus(leftChannelVolume) ;
    DWORD dd = 0xffff0000 & (soundVolumeCalculus(rightChannelVolume)*65535);
    
    waveOutSetVolume(hWaveOut,dd+d);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-29
      相关资源
      最近更新 更多