2014-04-01 259 views
1

其實我想給音頻設備的左聲道和右聲道的音量控制給用戶,每個聲道用戶使用不同的數字。 我使用了「waveOutSetVolume()」,它有2個參數,第一個是句柄,第二個是十六進制或DWORD號。更改左右聲道音量waveOutSetVolume C++

我得到2 numbers.each每個通道,然後將它們轉換爲string.now我如何將它們轉換爲「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); 
} 

回答

0

我修復

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

waveOutSetVolume(hWaveOut,dd+d);