core audio: как один пакет = один байт, когда явно один пакет = 4 байта

Я перешел на основные услуги преобразования звука в Learning Core Audio, и я был поражен этим примером в своем примере кода :

while(1) { // wrap the destination buffer in an AudioBufferList AudioBufferList convertedData; convertedData.mNumberBuffers = 1; convertedData.mBuffers[0].mNumberChannels = mySettings->outputFormat.mChannelsPerFrame; convertedData.mBuffers[0].mDataByteSize = outputBufferSize; convertedData.mBuffers[0].mData = outputBuffer; UInt32 frameCount = packetsPerBuffer; // read from the extaudiofile CheckResult(ExtAudioFileRead(mySettings->inputFile, &frameCount, &convertedData), "Couldn't read from input file"); if (frameCount == 0) { printf ("done reading from file"); return; } // write the converted data to the output file CheckResult (AudioFileWritePackets(mySettings->outputFile, FALSE, frameCount, NULL, outputFilePacketPosition / mySettings->outputFormat.mBytesPerPacket, &frameCount, convertedData.mBuffers[0].mData), "Couldn't write packets to file"); // advance the output file write location outputFilePacketPosition += (frameCount * mySettings->outputFormat.mBytesPerPacket); } 

обратите внимание, как frameCount определяется как packetsPerBuffer .. packetsPerBuffer определяется здесь:

 UInt32 outputBufferSize = 32 * 1024; // 32 KB is a good starting point UInt32 sizePerPacket = mySettings->outputFormat.mBytesPerPacket; UInt32 packetsPerBuffer = outputBufferSize / sizePerPacket; 

часть, которая меня AudioFileWritePackets это AudioFileWritePackets вызывается .. в документации AudioFileWritePackets третий и пятый параметры определяются как:

inNumBytes Число байтов записываемых аудиоданных.

ioNumPackets На входе указатель на количество записываемых пакетов. На выходе указатель на количество фактически написанных пакетов.

еще в коде оба параметра даны frameCount .. как это возможно ??? Я знаю с данными PCM 1 кадр = 1 пакет:

 // define the ouput format. AudioConverter requires that one of the data formats be LPCM audioConverterSettings.outputFormat.mSampleRate = 44100.0; audioConverterSettings.outputFormat.mFormatID = kAudioFormatLinearPCM; audioConverterSettings.outputFormat.mFormatFlags = kAudioFormatFlagIsBigEndian | kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked; audioConverterSettings.outputFormat.mBytesPerPacket = 4; audioConverterSettings.outputFormat.mFramesPerPacket = 1; audioConverterSettings.outputFormat.mBytesPerFrame = 4; audioConverterSettings.outputFormat.mChannelsPerFrame = 2; audioConverterSettings.outputFormat.mBitsPerChannel = 16; 

но одно и то же форматирование lPCM также четко указывает, что на каждый пакет приходится 4 байта (= 4 байта на кадр).

Так, как это работает? (то же самое относится к другому примеру в той же главе, где используется AudioConverterFillComplexBuffer вместо ExtAudioFileRead , и использует пакеты вместо фреймов .. но это то же самое)

    One Solution collect form web for “core audio: как один пакет = один байт, когда явно один пакет = 4 байта”

    Я думаю, что вы правы, согласно определению в заголовочном файле AudioFileWritePackets , AudioFileWritePackets должен принимать количество байтов аудиоданных, которые записываются в качестве третьего параметра, и в этом примере обучения Core Audio переменная framecount определяется как количество пакетов, а не количество байтов.

    Я попробовал примеры и получил тот же результат с (framecount * 4) , 0 и даже -1 в качестве третьего параметра вызова функции AudioFileWritePackets . Поэтому для меня казалось бы, что функция не работает точно так, как она определена в файле .h (не требует третьего параметра), и что в этом примере авторы книги также не заметили эту ошибку – я мог бы быть неправильно.

    Interesting Posts

    Пользовательский шрифт для iPad – iOS 3.2 не работает

    Установка клавиатуры в текстовое поле только на английский язык

    LocationServicesEnabled: устаревшие API

    Значок для push-уведомления?

    iTunes Connect – не может приглашать «внутренние тестеры» для предварительного приложения

    Как я могу получить количество объектов в разделе, NSFetchedResultsController Swift

    Как я могу разместить IPA на iOS на сайте SharePoint 2013?

    Swift – Сравнить цвета в CGPoint

    ios 8 как отлаживать пользовательскую клавиатуру?

    Почему UIWebView не обновляет текст после того, как ширина столбца и пробел заданы с помощью javascript?

    Использование Canvas для изменения размера изображений Iphone перед загрузкой на сервер

    создание приложения babycall, как я могу связать / проехать iphone с Bluetooth устройства?

    Почему соединение Multipeer настолько медленное?

    iOS 7 – нет доступных устройств ios

    Parse Cloud – LiveQueries – клиент iOS не работает

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.