waveout — изменение громкости левого и правого каналов по отдельности waveOutSetVolume Переполнение стека

На самом деле я хочу передать пользователю регулятор громкости левого и правого каналов аудиоустройства, который использует разные номера для каждого канала.
Я использовал «waveOutSetVolume ()». Он имеет 2 аргумента. Первый — дескриптор, а второй — шестнадцатеричный или номер DWORD.

Я получил 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);
}

1

Решение

Я исправлю это

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

waveOutSetVolume(hWaveOut,dd+d);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]