使用 iPhone SDK 同时播放和录制声音?

Posted

技术标签:

【中文标题】使用 iPhone SDK 同时播放和录制声音?【英文标题】:Play and record sound simultaneously with iPhone SDK? 【发布时间】:2010-07-06 16:46:02 【问题描述】:

我正在尝试检测来自麦克风的输入并播放声音,这些声音可以打开或关闭,但始终在麦克风监听器处于活动状态时播放。

我已经在 viewDidLoad 方法中初始化了我的 AVAudiosession,如下所示:

AVAudioSession *session = [AVAudioSession sharedInstance];
NSError *err = nil;
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:&err];
[session setActive:YES error:&err];

然后设置应该播放的声音:

NSURL *activeUrl = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/audio_file.caf", [[NSBundle mainBundle] resourcePath]]];
activePlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:activeUrl error:nil];
activePlayer.numberOfLoops = -1;
activePlayer.currentTime = 0;
activePlayer.volume = -1.5;

我正在使用SCListener 类进行录制。当我在手机上运行它时,录音机工作得很好,但是即使我在 viewDidLoad 方法中调用它,声音也不会循环播放。

有什么想法吗?

【问题讨论】:

【参考方案1】:

非常感谢您的回复。我确实在一段时间前确实想到了这一点,但从未有时间更新它。结果很简单。您必须将 AVAudioSession 的类别设置为 AVAudioSessionCategoryPlayAndRecord。

您需要的几乎所有文档都在类参考中:

http://developer.apple.com/library/ios/#documentation/AVFoundation/Reference/AVAudioSession_ClassReference/Reference/Reference.html

【讨论】:

【参考方案2】:

我遇到了类似的问题 - 代码在模拟器上运行,但在设备上运行不正常。我在使用 Cocos2D (Denshion) 以及 AVAudioRecorder 和 AVAudioPlayer 时遇到了这个问题。

主要问题似乎是 AVAudioRecorder 和 AVAudioPlayer 代表您设置了AVAudioSessionCategory,但如果您自己操作它,它们似乎会记住您是“自我管理”它并停止为您管理它。

请参阅对我有帮助的 this blog post(尽管我自己还没有解决这个问题;当我解决这个问题时,我会更新这篇文章)。

【讨论】:

以上是关于使用 iPhone SDK 同时播放和录制声音?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止iphone麦克风录制播放的声音?

iPhone SDK:记录 iPhone 发出的声音

如何在 iphone sdk 中同时进行输出音频电平测量和音高变化

如何在 iPhone 应用程序中录制和播放声音?

录制/播放声音时音质不佳 - Android SDK

在模拟器中录制和播放声音效果很好,但在我的 iPhone 中却不行