iOS8 AVAudioEngine 如何将麦克风输入路由到(底部)扬声器输出?
Posted
技术标签:
【中文标题】iOS8 AVAudioEngine 如何将麦克风输入路由到(底部)扬声器输出?【英文标题】:iOS8 AVAudioEngine how do I route microphone input to the (bottom) speaker output? 【发布时间】:2014-10-11 08:45:15 【问题描述】:我已经能够连接 AVAudioInputNode(它接收麦克风输入数据)并将其连接到 AVAudioEngine。如果我将手机放在离耳朵足够近的地方,我可以听到(上部)扬声器的输出。如何将音频输出路由到(底部)扬声器? (把它想象成一个扬声器......)
【问题讨论】:
【参考方案1】:获取您的AVAudiosession
的sharedInstance
。然后调用setCategory:withOptions:error
,传入以下参数:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:Nil];
【讨论】:
嗨尼克,谢谢您的回复。我尝试设置 AudioSession,但我从(底部)扬声器中得到了乱七八糟的环境噪音,如果我说了什么,扬声器就没有声音...... 那么你的代码其他地方有问题。发布一个专门针对下扬声器发出的“胡言乱语”噪音的新问题,发布相关代码,我们可以从那里开始。 嗨,尼克,您似乎在音频相关方面有经验。你能看看我的其他相关问题吗?谢谢。 ***.com/questions/26270127/… 如何通过网络发送 PCMBuffer?我使用 MultiPeer 发送,但我不知道如何在 didReceiveData 中将其转换回 AVAudioPCMBuffer。这是我的发送代码:MCPeerID *remotePeerID = [self.sessionMC.connectedPeers objectAtIndex:0]; NSArray *peersArray = @[remotePeerID]; NSError *error = nil; NSData *data = [NSData dataWithBytes:buffer.floatChannelData length:buffer.frameLength]; [self.sessionMC sendData:data toPeers:peersArray withMode:MCSessionSendDataReliable error:&error]; if(error) NSLog(@"error: %@", [error localizedDescription]);
【参考方案2】:
这是我快速完成的方法
//In declarations
var audioSession:AVAudioSession = AVAudioSession.sharedInstance()
//In viewDidLoad
audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord, withOptions: AVAudioSessionCategoryOptions.DefaultToSpeaker, error: nil)
【讨论】:
谢谢! :) 但我得到了Ambiguous reference to member 'setCategory'
Error。对我来说,它通过删除错误部分起作用(Swift 2.2):try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord, withOptions: AVAudioSessionCategoryOptions.DefaultToSpeaker)
以上是关于iOS8 AVAudioEngine 如何将麦克风输入路由到(底部)扬声器输出?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 AVAudioEngine 连接到 Lightning Port 音频输入?
Swift AVAudioEngine - 如何使本地麦克风静音
在 WatchOS 上使用 AVAudioEngine 录制时阻止播放