Все, что я хотел - это прочитать файл caf и записать его в другой файл, в надежде, что, возможно, я смогу манипулировать им, например, объединить несколько файлов в один или обрезать.Так что я нашел собственный iPhoneExtAudioFileConvertTest от Apple, который выглядит очень сложным, но я подумал, как только я возьму кусочки в свой собственный проект, тогда я смогу поиграть с ним, это оказалось довольно громоздким.* Теперь, после нескольких бессонных ночей копания информации и множества проб и ошибок запускается;Я полагал, что мне удалось использовать iPhoneExtAudioFileConvertTest Образец в моем собственном проекте.Я думал, что выложу это, чтобы спасти своего коллегу-кодера.
Шаги:
- Добавлена папка iPublicUtility и ExtAudioFileConvert.cpp *Файл 1015 * из образца iPhoneExtAudioFileConvertTest для моего проекта.
- Переименовано расширение 3 новых файлов .cpp в .mm (файлы .h остаются прежними).Это позволяет xcode просматривать файлы cpp как объективные файлы c ++.
- ExtAudioFileConvert.mm
- iPublicUtility / CAStreamBasicDescription.mm
- iPublicUtility / CAXException.mm
- В моем myViewController.m (UIViewController) класс, который планирует вызывать метод
DoConvertFile(sourceURL, destinationURL, outputFormat, sampleRate);
, я добавил одну строку, чтобы сделать метод DoConvertFile видимым
extern OSStatus DoConvertFile(CFURLRef sourceURL, CFURLRef destinationURL, OSType outputFormat, Float64 outputSampleRate);
- Также переименовал myViewController.m в myViewController.mm , поскольку он использует файл .cpp для вызова метода convertFile
- В настройках моего проекта в разделе «Задачи / Настройки сборки» я искал ключ «Пути поиска по заголовкам» и добавилследуя его значению / Developer / Extras / CoreAudio / PublicUtility / $ (унаследовано) без этой строки, компилятор выдаст мне более 30 ошибок, например, 'DebugPrintfFile ' не был объявлен вэта область *
- Я заметил, что в образце также есть код в делегате приложения
- , поэтому я скопировал код 2 методов непосредственно из приложения appDelegate в мой пример.собственное appDelegate, namly
static void interruptionListener(void *inClientData, UInt32 inInterruption)
static void propertyListener(void *inClientData, AudioSessionPropertyID inID, UInt32 inDataSize, const void *inData)
- и добавлены следующие 4 строки сразу после исходного оператора
#import
- # import "CAXException.h"
extern void ThreadStateInitalize();
extern void ThreadStateBeginInterruption();
extern void ThreadStateEndInterruption();
- конечно же добавил код из примеров
applicationDidFinishLaunching
в мой didFinishLaunchingWithOptions
- и еще раз переименовал мой appDelegate.m в appDelegate.mm
Теперь, когда я компилирую, я не получаю ошибок, и время выполнения работает, только если я закомментирую assert в ExtAudioFileConvert.mm
// in this sample we should never be on the main thread here
assert(![NSThread isMainThread]);
Также при запуске я получаю ошибку, которая не вызывает никаких проблем, ноЯ предпочел бы удалить это.Кто-нибудь?
Error: couldn't set audio category (-50)
, который, кажется, приходит от этого звонка в моем appDelegate
// our default category -- we change this for conversion and playback appropriately
UInt32 audioCategory = kAudioSessionCategory_SoloAmbientSound;
XThrowIfError(AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(audioCategory), &audioCategory), "couldn't set audio category");
Кроме этих предупреждений / ошибок, я могу написать / преобразовать файл caf:).Буду признателен за любые отзывы.