Я пытаюсь получить необработанные аудиоданные из файла (я привык видеть значения с плавающей запятой между -1 и 1).Core Audio AudioFIleReadPackets ... поиск необработанного звука
Я пытаюсь вытащить эти данные из буферов в реальном времени, чтобы я мог обеспечить некоторый тип измерения для приложения.
Я в основном читаю весь файл в памяти с помощью AudioFileReadPackets. Я создаю аудиоустройство RemoteIO для воспроизведения и внутри проигрывателя playbackCallback, я поставляю mData в AudioBuffer, чтобы его можно было отправить на оборудование.
Большая проблема, с которой я сталкиваюсь, заключается в том, что данные, отправляемые буферам из моего массива данных (из AudioFileReadPackets), являются UInt32 ... Я действительно смущен. Похоже, что это 32-битные, и я установил пакеты/фреймы на 4 байта каждый. Как черт возьми, я получаю свои исходные звуковые данные (от -1 до 1) из этого?
Это мое описание Формат
// Describe format
audioFormat.mSampleRate = 44100.00;
audioFormat.mFormatID = kAudioFormatLinearPCM;
audioFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
audioFormat.mFramesPerPacket = 1;
audioFormat.mChannelsPerFrame = 2;
audioFormat.mBitsPerChannel = 16;
audioFormat.mBytesPerPacket = 4;
audioFormat.mBytesPerFrame = 4;
Я чтение файла волны в данный момент.
Спасибо!
Итак, я взял UInt32 и потянул бит младшего порядка в 1 SInt16, а другой в другой SInt16, и кажется, что каждый из них довольно хорошо представлен двумя отдельными каналами. Я использовал образец кода Арана, который был отредактирован из примерного кода Майкла Болтона о том, как использовать аудиоустройства RemoteIO на iphone, и похоже, что Аран просто передавал оба перемеженных канала в модуль remoteIO как UInt32, потому что он не делал никаких измерений/рисунок волны. После взлома UInt32 в два SInt16, похоже, что все так, как должно быть. – Corey
Кроме того, не обязательно, чтобы данные находились в плавающей запятой. Я создал класс рисования осциллограмм, который ожидает, что данные будут в плавании, и фактически разблокирует аудиофайл и использует функцию AudioFileRead(), чтобы вытащить данные (которые находятся в плавающей точке). Итак, мое приложение делает следующее: По завершении записи вычертите форму волны, открыв записанный файл, прочитав каждый x-образный образец и добавив его в массив, перейдя через результирующий массив и используя графику ядра, чтобы нарисовать Форма волны. Затем, когда пользователь нажимает кнопку воспроизведения, он инициализирует AU. – Corey
А, ок. Так вам удалось решить проблему? –