我正在为iOS开发一个应用程序,并且我需要一些音频处理方法,因此我使用了很棒的AudioKit。但是,当尝试将效果记录到音频文件中时,我无法使用AKNodeRecorder。
我曾尝试使用AudioKitPlayground(4.5.3)测试AKNodeRecorder,但在录制“键盘”产生的声音后得到了一个空音频文件。
因此,我通过Xcode(10.1)为iOS创建了一个项目,并添加了一些像这样的Objective-C代码:
........
NSError *error = nil;
AudioFormatID formatId = kAudioFormatLinearPCM;
NSDictionary *dict = @{
@"AVFormatIDKey" : @(formatId),
@"AVSampleRateKey" : @(44100),
@"AVNumberOfChannelsKey" : @(2),
};
AKAudioFile *audioFile = [[AKAudioFile alloc] initForWriting:soundFileURL settings:dict error:&error];
if (error) {
NSLog(@"AKAudioFile init error: %@", error);
}
AKNodeRecorder *akNodeRecorder = [[AKNodeRecorder alloc] initWithNode:self.akMixer file:audioFile error:&error];
if (error) {
NSLog(@"AKNodeRecorder init error: %@", error);
}
[akNodeRecorder recordAndReturnError:&error];
if (error) {
NSLog(@"recording error: %@", error);
}
[self.akAudioPlayer playFrom:0.0];
if (self.isChooseBackgroundMusic) {
[self.musicPlayer playFrom:0.0];
}
[akNodeRecorder stop];
........
这里的self.akMixer就像这样:
self.akMixer = [[AKMixer alloc] init:@[self.akAudioPlayer, self.musicPlayer]];
但是,我也有一个空文件。
我的代码中是否存在错误或我对AKNodeRecorder的理解有误?有什么帮助吗?非常感谢!
答案 0 :(得分:0)
我在 swift 中遇到了同样的问题,我能够通过将所有与音频相关的变量(如混音器和播放器)声明为全局变量来解决这个问题。您可以在下面的代码中看到。希望这个东西也能在 Objective C 中工作。
class SongRecordingVC: UIViewController {
var micMixer : AKMixer!
var micBooster: AKBooster!
var karaokePlayer : AKPlayer!
var karaokeMixer: AKMixer!
var recordingMixer: AKMixer!
var recordingDummyMixer: AKMixer!
var outputMixer: AKMixer!
var songPlayer: AVAudioPlayer?