每个用户可以播放的声音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)']
答案 0 :(得分:0)
错误在于记录格式。在AVAudioFile
设置中,我使用了[self.engine.outputNode inputFormatForBus:0].settings
,所以我从引擎的outputNode中获取了一种输入格式。但是在总线上安装水龙头时,我使用了[self.soundsMixerNode outputFormatForBus:0]
。这两种格式不相等。它们具有不同的采样率。因此,我在结果文件中提出了建议。
在记录文件设置和installTapOnBus:bufferSize:format:block:
中都需要使用一种格式。就我而言,我需要使用self.soundsMixerNode
的outputFormat。