Как экспортировать аудиофайл с эффектом в iOS
Я использовал AVAudioEngine для воспроизведения нескольких аудио файлов с эффектом. И я хочу экспортировать этот звук (включая эффекты и воспроизводить несколько файлов) без записи.
Как я могу это сделать?
Это мой код для использования AVAudioEngine
//1. Create engine
_audioEngine = [[AVAudioEngine alloc] init];
//2. Create player nodes , unit
_mainPlayer = [[AVAudioPlayerNode alloc] init];
_aPlayer = [[AVAudioPlayerNode alloc] init];
_bPlayer = [[AVAudioPlayerNode alloc] init];
_effectTimePitch = [[AVAudioUnitTimePitch alloc] init];
AVAudioMixerNode *mixerNode = [[AVAudioMixerNode alloc] init];
//3. Attach node to engine
[_audioEngine attachNode:_mainPlayer];
[_audioEngine attachNode:_aPlayer];
[_audioEngine attachNode:_bPlayer];
[_audioEngine attachNode:mixerNode];
[_audioEngine attachNode:_effectTimePitch];
//4. Connect player node to engine's main mixer
NSDictionary *setting = @{
AVFormatIDKey: @(AVAudioPCMFormatFloat32),
AVSampleRateKey: @(1),
AVNumberOfChannelsKey: @(1)
};
_audioFormat = [[AVAudioFormat alloc] initWithSettings:setting];
[_audioEngine connect:_mainPlayer to:mixerNode format:_audioFormat];
[_audioEngine connect:_aPlayer to:mixerNode format:_audioFormat];
[_audioEngine connect:_bPlayer to:mixerNode format:_audioFormat];
[_audioEngine connect:mixerNode to:_effectTimePitch format:_audioFormat];
[_audioEngine connect:_effectTimePitch to:_audioEngine.mainMixerNode format:_audioFormat];
//5. Start engine
NSError *error;
NSAssert([_audioEngine startAndReturnError:&error], @"couldn't start engine, %@", [error localizedDescription]);
//6 Play Audio
AVAudioFile *audioFile = [[AVAudioFile alloc] initForReading: _mainURL error: nil];
[_mainPlayer scheduleFile:audioFile atTime:nil completionHandler:nil];
AVAudioFile *aFile = [[AVAudioFile alloc] initForReading: _mainURL error: nil];
[_aPlayer scheduleFile:aFile atTime:nil completionHandler:nil];
AVAudioFile *bFile = [[AVAudioFile alloc] initForReading: _mainURL error: nil];
[_bPlayer scheduleFile:bFile atTime:nil completionHandler:nil];
[_mainPlayer play];
[_aPlayer play];
[_bPlayer play];
1 ответ
Вы должны настроить AVAudioFile для записи. Затем вы устанавливаете сигнал в какой-то поздней точке в цепочке (например, в вашем последнем узле эффекта) и записываете из этого буфера в выходной файл.