AVAudioEngine录音改变音调

时间:2018-08-29 07:00:08

标签: ios avaudioplayer avaudioengine avaudioplayernode

每个用户可以播放的声音AVAudioPlayerNode很少。每个播放器节点都连接到其自己的AVAudioMixerNode以更改音量。所有这些混音器都连接到一个AVAudioMixerNode(我将其命名为soundsMixerNode)上,该mainMixerNode连接到引擎的AVAudioPlayer。用户可以录制这些声音,然后通过AVAudioSession播放结果记录。问题在于此唱片的音调发生了变化。就像我使用音高效果一样。而且我只能在设备上获得此结果,模拟器效果很好。也许问题出在AVAudioFormat类别或模式中?还是我在PlayerNode1 – MixerNode1 \ ... soundsMixerNode – self.engine.mainMixerNode / PlayerNodeN – MixerNodeN 或设置方面遇到问题?我不明白 这是我的音频图:

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setPreferredIOBufferDuration:128.0/audioSession.sampleRate error:NULL];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord
              withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker
                    error:&error];
[audioSession setActive:YES error:&error];

这是我的会话设置:

AVAudioFile

这是我的录音NSDictionary* recordSettings = [self.engine.outputNode inputFormatForBus:0].settings; NSError* error = nil; self.fileForRecording = [[AVAudioFile alloc] initForWriting:url settings:recordSettings error:&error]; 设置:

AVAudioFormat* recordingFormat = [self.soundsMixerNode outputFormatForBus:0];
if (recordingFormat.sampleRate > 0) {
    typeof(self) weakSelf = self;
    [self.soundsMixerNode installTapOnBus:0
                               bufferSize:1024
                                   format:recordingFormat
                                    block:^(AVAudioPCMBuffer * _Nonnull buffer, AVAudioTime * _Nonnull when) {
                                        NSError* error;
                                       [weakSelf.fileForRecording writeFromBuffer:buffer error:&error];
                                    }];
}

并记录代码:

//span[contains(@class,'count') and text() = '(2)']

1 个答案:

答案 0 :(得分:0)

错误在于记录格式。在AVAudioFile设置中,我使用了[self.engine.outputNode inputFormatForBus:0].settings,所以我从引擎的outputNode中获取了一种输入格式。但是在总线上安装水龙头时,我使用了[self.soundsMixerNode outputFormatForBus:0]。这两种格式不相等。它们具有不同的采样率。因此,我在结果文件中提出了建议。 在记录文件设置和installTapOnBus:bufferSize:format:block:中都需要使用一种格式。就我而言,我需要使用self.soundsMixerNode的outputFormat。