Нет прямой связи между QAudioInput::bytesReady()
и QIODevice
, на котором он записывает свои сэмплы.
QAudioInput
поддерживает внутреннее устройство ввода-вывода (зависит от системы) для аудиосистемы, котораяявляется аналогом только для чтения QIODevice
.Когда вы вызываете bytesReady
, он возвращает количество байтов, доступных для чтения, аналогично QIODevice::bytesAvailable()
.Они не еще записаны в вывод QIODevice
, поэтому, когда вы делаете m_audioInputIODevice->read
сразу после него, без обработки событий, вы фактически получаете сэмплы, которые были написаны ранее, а нете, которые все еще находятся в аудио буфере.
Это, плюс буферизация IODevice, объясняет, почему числа могут отличаться, и я не вижу способа синхронизировать их вместе.
На самом деле, вы должны сделать:
const qint64 bytesRead = m_audioInputIODevice->read(m_buffer.data() + m_dataLength, bytesSpace);
, чтобы получить все, что доступно от IODevice, до вашего доступного буферного пространства.