AKAudioPlayer:扬声器没有声音,只有耳机

Posted

技术标签:

【中文标题】AKAudioPlayer:扬声器没有声音,只有耳机【英文标题】:AKAudioPlayer: No sound in speakers, only with headphones 【发布时间】:2017-12-06 22:45:09 【问题描述】:

使用 AudioKit 进行声音管理,我注意到这段非常简单的代码存在问题(错误?)。

import AudioKit

class MainViewController: UIViewController 

var audioFile: AKAudioFile?
var audioPlayer: AKAudioPlayer?

override func viewDidLoad() 
    super.viewDidLoad()


@IBAction func onPlayButtonClick(_ sender: Any) 

    do 
        audioFile = try AKAudioFile(forReading: Bundle.main.url(forResource: "3e", withExtension: "mp3")!)

        audioPlayer = try AKAudioPlayer(file: audioFile!)

        AudioKit.output = audioPlayer
        AudioKit.start()

        audioPlayer!.play()


     catch 
        print(error)
    


当使用 play() 方法启动播放时,日志和过程中一切正常(播放器持续时间,currentTime)。但我没有听到扬声器中的音频(只是一种风噪声)。一旦我插入耳机并再次点击按钮,我通常会听到音频。然后,我拔掉耳机并点击按钮,我听不到声音(只有风声)。

我在 iPhone 5S 上遇到这个问题

我确实在 iPad5 上面对这个,我确实在模拟器上面对这个。我没有其他设备可以尝试复制。

两种设备:ios 11.1.2 和 AudioKit:v4.0.4

注意:我的扬声器可以与任何其他应用程序正常工作,并且我已经检查了音量。未插入耳机时,默认 outputDevice 设置为 Speakers。

【问题讨论】:

你试过在 iPhone 5s 上切换静音开关吗?模拟器和 iPad 总是通过扬声器播放,但静音的 iPhone 通常只能通过耳机播放。 哇,我从来没有使用过这个静音按钮...是的,就是这样。是否可以忽略 Audiokit 中的静音按钮? (注意:您可以将此作为答案) 【参考方案1】:

根据Configuring an Audio Session 指南,默认情况下,AVAudioSessionCategory 是这样设置的

在 iOS 中,将响铃/静音开关设置为静音模式会使应用正在播放的所有音频静音。

由于 iPad 和模拟器没有此开关,它们将始终播放到扬声器,但对于硬件 iPhone,它们只会在静音模式下播放到耳机而不是扬声器,除非会话类别变了。

您可以直接使用 AVAudioSession 更改会话类别:

do 
    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
catch 
    print("failed to set category")

或者你可以使用 AudioKit 的 AKSettings 包装器:

AudioKit.start()
do 
    try AKSettings.setSession(category: AKSettings.SessionCategory.playback)
 catch 
    print("failed to set category")

根据AVSessionCategory docs,播放类别为

播放录制的音乐或其他声音的类别 成功使用您的应用的关键。

因此它将假定用户希望在使用应用程序时覆盖静音模式。

【讨论】:

以上是关于AKAudioPlayer:扬声器没有声音,只有耳机的主要内容,如果未能解决你的问题,请参考以下文章

电脑没有声音,没有扬声器怎么办

电脑显示无声音播放设备怎么办

电脑音频驱动正常,有扬声器,为什么没有声音?

windows电脑配置耳机只有一个耳朵响

win10蓝牙耳机没有声音 显示已配对

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