iOS 通过 iPhone 接收器(手机扬声器)播放音频

Posted

技术标签:

【中文标题】iOS 通过 iPhone 接收器(手机扬声器)播放音频【英文标题】:iOS play audio through iPhone receiver (phone speaker) 【发布时间】:2014-05-14 13:41:17 【问题描述】:

我目前正在开发一个应该通过 iPhone 接收器播放音频文件的应用程序。我知道在 ios 6/7 之前这很容易实现,但这些方法现在已被弃用。

那么有人知道它在 iOS 7 上是如何工作的吗?

这是我的代码,它不起作用:

    _audioSession = [AVAudioSession sharedInstance];
    [_audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
    [_audioSession overrideOutputAudioPort:AVAudioSessionPortBuiltInReceiver error:nil];

    NSString *ringtone =  [[NSUserDefaults standardUserDefaults] stringForKey:@"ringtone"];
    ringtone = [ringtone stringByReplacingOccurrencesOfString:@".m4r" withString:@""];
    NSString *path;
    path = [[NSBundle mainBundle] pathForResource:@"abto_ringbacktone" ofType:@"wav"];


    NSError *error;
    _player = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL URLWithString:path] error:&error];
    if (error) 
        NSLog(@"Error: %@",error.localizedDescription);
    



[_player setNumberOfLoops:10];
[_player prepareToPlay];
[_player play];
[_player setVolume:0.1];

【问题讨论】:

【参考方案1】:

您不能将AVAudioSessionPortBuiltInReceiver 传递给overrideOutputAudioPort:error:,因为它将枚举作为参数,而不是字符串。

正确的做法是为 Receiver 配置会话如下:

[_audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
[_audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:nil];

对于演讲者:

[_audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
[_audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];

【讨论】:

以上是关于iOS 通过 iPhone 接收器(手机扬声器)播放音频的主要内容,如果未能解决你的问题,请参考以下文章

如何入驻苹果播客

iPhone 7 顶部和底部扬声器之间的平移声音

iOS SDK 禁用内置麦克风

ios16音乐播放器变小了

SKAction playSoundFileNamed 没有声音通过 iphone 扬声器

在iOS设备上产生超声波声音[关闭]