Запишите все звуки, сгенерированные моим приложением, в аудиофайл (не из микрофона)

У меня есть экран, похожий на инструмент. Есть кнопки, которые воспроизводят звуковые файлы.

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

Не могли бы вы подсказать мне, как этого добиться простым способом?

Я могу записывать, используя микрофон с AVAudioRecorder

Как я думаю, метод записи использует микрофон в качестве источника, но я бы хотел, чтобы в качестве источника использовался эквивалент "аудио выхода" моего приложения.

2 ответа

Решение

Вы можете попробовать использовать http://theamazingaudioengine.com/. Вы можете установить его через Cocoapods

pod 'TheAmazingAudioEngine'

или клонировать через git

git clone --depth=1 https://github.com/TheAmazingAudioEngine/TheAmazingAudioEngine.git

Звук может быть записан в файл с помощью этого.

Поэтому, если вы хотите записать вывод приложений, просто используйте Outputreceiver:

@property (nonatomic, strong) AEAudioController *audioController;
@property (nonatomic, strong) AERecorder *recorder;

...

self.audioController = [[AEAudioController alloc] initWithAudioDescription:[AEAudioController nonInterleaved16BitStereoAudioDescription] inputEnabled:YES];

...

//start the recording
- (void) beginRecording{
   self.recorder = [[AERecorder alloc] initWithAudioController:self.audioController];
   NSString *documentsFolder = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];

   //the path to record to
   NSString *filePath = [documentsFolder stringByAppendingPathComponent:@"AppOutput.aiff"];

  //start recording
  NSError *error = NULL;
  if ( ![_recorder beginRecordingToFileAtPath:filePath fileType:kAudioFileAIFFType error:&error] ) {
         //an error occured
         return;
  }

   [self.audioController addOutputReceiver:self.recorder];
}

...

//end the recording
- (void)endRecording {
     [self.audioController removeOutputReceiver:self.recorder];
     [self.recorder finishRecording];
}

Используйте Screen Recorder, например Camtasia или же Fraps, Когда вы хотите, вы можете остановить запись и извлечь звук в нескольких форматах, и вам не нужно использовать микрофон... Есть также несколько открытых источников...

Другие вопросы по тегам