如何将AVAudioPlayer输出到扬声器

diz*_*izy 27 iphone audio objective-c avaudioplayer avaudiorecorder

我正在使用AVAudioRecorder录制音频,如我如何使用AVAudioRecorder在iPhone上录制音频?

然后我使用AVAudioPlayer播放录音.然而,声音是从耳机发出的,而不是扬声器.我如何将声音重定向到扬声器?

TIA!

小智 27

我意识到这个问题相当陈旧,但当我遇到同样的问题时,我发现了一个简单的解决方案,希望能帮助其他人寻求使用更响亮的媒体扬声器而不是接收器扬声器.我使用的方法是使用AVAudioSessionCategoryOptions中的DefaultToSpeaker选项设置音频会话:

在Swift中(假设你的音频会话被命名session) -

session.setCategory(AVAudioSessionCategoryPlayAndRecord, withOptions:AVAudioSessionCategoryOptions.DefaultToSpeaker, error: nil)
Run Code Online (Sandbox Code Playgroud)

在Obj-C中 -

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error: nil];
Run Code Online (Sandbox Code Playgroud)


小智 18

来自http://www.iphonedevsdk.com/forum/iphone-sdk-development-advanced-discussion/12890-audiosessionsetproperty-problem-playing-sound-listening-mic.html -

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);    
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);
Run Code Online (Sandbox Code Playgroud)

  • 对于遇到这个答案的其他人的说明:示例代码中的前两行是无关紧要的 - 如果您喜欢OP(也是录制音频),这些行将阻止录制正常运行. (7认同)
  • 在iOS7中你可以做[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil]; (5认同)

bud*_*ino 14

斯威夫特3

在录制我设定的声音之前:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord)
Run Code Online (Sandbox Code Playgroud)

在播放之前我设置:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)
Run Code Online (Sandbox Code Playgroud)

目标C.

录制前:

[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryRecord error:nil];
Run Code Online (Sandbox Code Playgroud)

播放前:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];
Run Code Online (Sandbox Code Playgroud)


小智 11

这在Swift2中对我很有用

let session = AVAudioSession.sharedInstance()
try! session.setCategory(AVAudioSessionCategoryPlayAndRecord, withOptions: AVAudioSessionCategoryOptions.DefaultToSpeaker)
Run Code Online (Sandbox Code Playgroud)


Sim*_* A. 6

这是一个老问题,但另一个答案对我没有帮助......但是,我发现了一个解决方案,我将其发布以供将来参考,以防有人(或我未来!)需要它.

该解决方案在以下博客文章中有所描述:iOS:在插入耳机时强制音频输出到扬声器.

您需要在项目中创建新的Objective-C类AudioRouter.然后导入AudioRouter.h到您要启动音频功能的类的头文件中.接下来,在相应的.m文件中,在viewDidLoad方法中添加以下行:

AudioRouter *foobar = [[AudioRouter alloc] init];
[foobar initAudioSessionRouting];
[foobar forceOutputToBuiltInSpeakers];
Run Code Online (Sandbox Code Playgroud)

现在你有音频(例如AVAudioPlayer)输出强制扬声器!请注意,如果您在应用程序运行插入耳机,则所有音频输出都会定向到耳机.


Kri*_*ian 6

Swift2:

try session.setCategory(AVAudioSessionCategoryPlayAndRecord,
    withOptions:AVAudioSessionCategoryOptions.DefaultToSpeaker)
Run Code Online (Sandbox Code Playgroud)