gpt4 book ai didi

ios - AVAudioEngine 播放多声道音频

转载 作者:行者123 更新时间:2023-12-01 16:03:46 27 4
gpt4 key购买 nike

简单的问题。如何使用 AVAudioEngine 播放多声道音频文件(> 2 声道),以便我可以听到默认 2 声道输出(耳机/扬声器)上的所有声道。以下代码(去除了用于呈现的错误检查)播放文件的前两个 channel ,但我只能在插入耳机时听到它。

AVAudioFile *file = [[AVAudioFile alloc] initForReading:[[NSBundle mainBundle] URLForResource:@"nums6ch" withExtension:@"wav"] error:nil];
AVAudioEngine *engine = [[AVAudioEngine alloc] init];
AVAudioPlayerNode *player = [[AVAudioPlayerNode alloc] init];
AVAudioMixerNode *mixer = [[AVAudioMixerNode alloc] init];
[engine attachNode:player];
[engine attachNode:mixer];
AVAudioFormat *processingFormat = [[AVAudioFormat alloc] initWithCommonFormat:AVAudioPCMFormatFloat32 sampleRate:file.processingFormat.streamDescription->mSampleRate channels:2 interleaved:false];
[engine connect:player to:mixer format:processingFormat];
[engine connect:mixer to:engine.outputNode format:processingFormat];
[engine startAndReturnError:nil];
[player scheduleFile:file atTime:nil completionHandler:nil];
[player play];

我尝试了很多播放器->混音器和混音器->输出连接格式的组合,但它们的结果要么与上面的代码相同,要么更有可能导致崩溃:

ERROR:     [0x19c392310] AVAudioNode.mm:495: AUGetFormat: required condition is false: nil != channelLayout && channelLayout.channelCount == asbd.mChannelsPerFrame
*** Terminating app due to uncaught exception 'com.apple.coreaudio.avfaudio', reason: 'required condition is false: nil != channelLayout && channelLayout.channelCount == asbd.mChannelsPerFrame'

或 AUSetFormat OSStatus 代码 -10868(如果我没记错的话,这是不支持的格式)。对任何连接使用 file.processingFormat 会使应用程序崩溃并出现上述第一个错误。此外,崩溃发生在 [player play];

必须有某种方式来播放它,因为我可以使用 AUGraph 毫无问题地播放它,但是,由于 AVAudioEngine 提供了一个我必须包含的功能,我坚持使用它。

可以找到我用来检查代码的多声道音频文件here

更新好的,所以只能在耳机中听到音频可能是因为我忘记在我的测试应用程序中将 Audio Session 设置为事件状态。但我仍然只听到前两个 channel ...

最佳答案

我在 Swift 中遇到了类似的问题。错误是“com.apple.coreaudio.avfaudio”,原因:“所需条件为 false:!nodeimpl->SslEngineImpl()”。

任务是一个接一个地播放两个音频文件。如果我在播放第一个音频文件后点击停止,然后播放第二个音频文件,系统就会崩溃。

我发现在我创建的函数中我有 audioEngine.attachNode(audioPlayerNode) 这意味着 audioPlayerNode 被附加到 audioEngine 一次然后退出。因此,我将此附件移至 viewDidLoad() 函数,以便它每次都能通过。

关于ios - AVAudioEngine 播放多声道音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27250317/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com