Открыть файл в дополнении | двоичный режим
std :: ofstream audioData ("/data/audiodata.raw", std :: fstream :: app | std :: fstream :: binary);
двоичный - двоичный - Операции выполняются в двоичном режиме, а не в текстовом.
Буфер необработанного PCM должен записываться в двоичном режиме.
Пожалуйста, проверьтекод для разницы между байтами и счетчиком (добавлены некоторые комментарии для справки, надеюсь, это решит вашу проблему)
if (mNormalSink != 0) {
/* Count is the number of Frames or sample written != bytes */
const size_t count = mBytesRemaining / mFrameSize;
ATRACE_BEGIN("write");
// update the setpoint when AudioFlinger::mScreenState changes
uint32_t screenState = AudioFlinger::mScreenState;
if (screenState != mScreenState) {
mScreenState = screenState;
MonoPipe *pipe = (MonoPipe *)mPipeSink.get();
if (pipe != NULL) {
pipe->setAvgFrames((mScreenState & 1) ?
(pipe->maxFrames() * 7) / 8 : mNormalFrameCount * 2);
}
}
ssize_t framesWritten = mNormalSink->write((char *)mSinkBuffer + offset, count);
ATRACE_END();
if (framesWritten > 0) {
bytesWritten = framesWritten * mFrameSize;
// std::ofstream audioData ("/data/audiodata.raw", std::fstream::binary);
/* File write or stream write is the number of bytes written to the file */
audioData.write((char *)mSinkBuffer + offset, bytesWritten);
// audioData.close();
} else {
bytesWritten = framesWritten;
}
// otherwise use the HAL / AudioStreamOut directly
}
Audacity - Открыть необработанный файл
Файл -> Импорт-> необработанные данные
Выберите путь к необработанному файлу
В зависимости от вложенного необработанного файла.
Используйте эти настройки
Кодировка: 32-разрядное число с плавающей запятой
Порядок байтов: Little Endian
Каналы: 2 канала (стерео)
Начальное смещение: 0
Сумма для импорта: 100
Частота дискретизации: 48000
Файл воспроизводится правильно без каких-либо сбоев / шумов.