AVAudioEngine录音改变音调

问题描述 投票:0回答:1

我的每个声音用户都可以玩很少的AVAudioPlayerNodes。每个玩家节点都连接到自己的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];
                                    }];
}
ios avaudioplayer avaudioengine avaudioplayernode
1个回答
0
投票

错误是记录格式。在AVAudioFile设置中我使用了[self.engine.outputNode inputFormatForBus:0].settings,所以我从我的引擎outputNode中获取了一个输入格式。但是当我在公共汽车上安装水龙头时,我使用了[self.soundsMixerNode outputFormatForBus:0]。这两种格式不相等。他们有不同的采样率。所以我在结果文件中得到了一个音调。我需要在记录文件设置和installTapOnBus:bufferSize:format:block:中使用一种格式。在我的情况下,我需要使用我的self.soundsMixerNode的outputFormat。

© www.soinside.com 2019 - 2024. All rights reserved.