在 QAudioOutput 中改变音量后的噪音
Noise after changing volume in QAudioOutput
我正在尝试在 "raw format" 中使用 QAudioOutput 和 wav 来播放声音。定时器超时后(每 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++;
一切正常,但是当我尝试在 QAudioOutput 中更改音量,例如 0.2(我的主音量为 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
嗯,根据 The ABCs of PCM (Uncompressed) digital audio 在 最后的注释 -
For some reason, WAV files don't support signed 8-bit format, so when reading and writing WAV files, be aware that 8-bits means unsigned, but in virtually all other cases it's safe to assume integers are signed.
我通过将原始 wav 转换为 16 位格式解决了一段时间的问题。
我正在尝试在 "raw format" 中使用 QAudioOutput 和 wav 来播放声音。定时器超时后(每 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++;
一切正常,但是当我尝试在 QAudioOutput 中更改音量,例如 0.2(我的主音量为 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
嗯,根据 The ABCs of PCM (Uncompressed) digital audio 在 最后的注释 -
For some reason, WAV files don't support signed 8-bit format, so when reading and writing WAV files, be aware that 8-bits means unsigned, but in virtually all other cases it's safe to assume integers are signed.
我通过将原始 wav 转换为 16 位格式解决了一段时间的问题。