Шум после изменения громкости в QAudioOutput


Я пытаюсь воспроизвести звук с помощью QAudioOutput и wav в "raw-формате". После таймаута таймера (каждые 50 мс) я делаю следующее:

QByteArray TempSBuffer;
short int *hi;

// Check if wav has reached their end and reset its position to the beginning if yes
if((m_timerStepNum+1)*m_audioOutput->periodSize()>=m_soundBuffer.size()) {
    m_timerStepNum=0;
}
// 2. Write the buffer data for the next timecycle into a temporary QByteArray TempSBuffer
TempSBuffer=m_soundBuffer.mid(m_timerStepNum*m_audioOutput->periodSize(), m_audioOutput->periodSize());
hi=(short int *)TempSBuffer.data();

for(int i=0;i < m_audioOutput->periodSize() / 2;i++) { hi[i]*= m_audioOutput->volume(); }

// 4. Play the resulting buffer
m_ioDevice->write(TempSBuffer, m_audioOutput->periodSize());
m_timerStepNum++;

Все играет нормально, но когда я пытаюсь изменить громкость, скажем, 0.2 в QAudioOutput (и моя основная громкость составляет 100%), у меня ужасный шум. Я должен признать, что это происходит только для моего одного файла wav, который имеет формат:

bitsPerSample: 8
channels: 1
frequency: 16000

Другие файлы воспроизводятся нормально, как я уже сказал. Примеры формата хорошо сыгранных волн:

bitsPerSample: 16
channels: 1
frequency: 22050

bitsPerSample: 16
channels: 2
frequency: 22050

bitsPerSample: 16
channels: 2
frequency: 22050
1 2

1 ответ:

Ну, согласно Азбуке PCM (несжатого) цифрового аудио в Заключительных нотах -

По какой-то причине WAV-файлы не поддерживают 8-битный формат со знаком, поэтому при чтении и записи WAV-файлов помните, что 8-бит означает без знака, но практически во всех остальных случаях можно с уверенностью предположить, что целые числа подписаны.

Я решил на некоторое время свою проблему, преобразовав мой raw wav в 16-битный формат.