Посмотрите на это apple developer page.
EDIT: на основе ваших комментариев, чтобы создать samplebuffer непосредственно из массива шорты, вы должны использовать ядро Media Framework компоненты, т.е. CMSampleBufferCreate
- Преобразование выборки данных в шортах массиве AudioBufferList
- Преобразование AudioBufferList в CMSampleBuffer.
Например:
OSStatus status = noErr;
CMItemCount framesToProcess = 8192;
unsigned long sizeInBytes = framesToProcess * sizeof(SInt16);
// Init ABL from sample array
AudioBufferList *myAudioBufferList; // contains converted
myAudioBufferList = static_cast<AudioBufferList *>(calloc(1, offsetof(AudioBufferList, mBuffers) + (sizeof(AudioBuffer))));
myAudioBufferList->mNumberBuffers = 1;
myAudioBufferList->mBuffers[0].mNumberChannels = 1;
myAudioBufferList->mBuffers[0].mData = JoãoSamplesArrayPointer;
myAudioBufferList->mBuffers[0].mDataByteSize = (UInt32)sizeInBytes;
// sampleBuffer in (from the assetreader) you already have this
CMSampleBufferRef sampleBufferIn = [self.assetReaderAudioOutput copyNextSampleBuffer];
CMAudioFormatDescriptionRef format = CMSampleBufferGetFormatDescription(sampleBufferIn);
const AudioStreamBasicDescription *assetReaderOutputASBD = CMAudioFormatDescriptionGetStreamBasicDescription(format);
// setup output samplebuffer
CMSampleBufferRef sampleBufferOut = NULL;
CMSampleTimingInfo timing = { CMTimeMake(1, sampleRate), kCMTimeZero, kCMTimeInvalid };
// create description
status = CMAudioFormatDescriptionCreate(kCFAllocatorDefault, assetReaderOutputASBD, 0, NULL, 0, NULL, NULL, &format);
// create buffer
CMSampleBufferCreate(kCFAllocatorDefault, NULL, false, NULL, NULL, format, framesToProcess, 1, &timing, 0, NULL, &sampleBufferOut);
// put data into buffer from ABL (audio buffer list)
status = CMSampleBufferSetDataBufferFromAudioBufferList(sampleBufferOut, kCFAllocatorDefault, kCFAllocatorDefault, 0, myAudioBufferList);
// write to assetwriter audioinput
BOOL success = [self.assetWriterAudioInput appendSampleBuffer:sampleBufferOut];
CFRelease(sampleBufferOut);
Я понимаю, этот код. Но это не то, что я прошу –
Что вы спрашиваете более конкретно? Я попытался решить проблему создания CMSampleBufferRef, как показано в коде. –
Мне нужно создать буфер образца из моего массива shorts, а не из считывателя свойств –