如何取消 AVAudioSession

Posted

技术标签:

【中文标题】如何取消 AVAudioSession【英文标题】:How to unduck AVAudioSession 【发布时间】:2011-06-27 07:06:21 【问题描述】:

kAudiosessionProperty_OtherMixableAudioShouldDuck 用于允许将 iPod 音频与应用程序音频混合的音频会话类别,指定当应用程序产生声音时是否应降低 iPod 音频的电平。默认情况下,此属性的值为 FALSE (0)。将其设置为非零值以打开闪避。 我们怎样才能解开这个?有房产吗?

提前致谢, 钱德拉。

【问题讨论】:

【参考方案1】:

我也有同样的问题,但很难让它始终如一地工作。我花了很多时间研究和调试这个,最后打电话给苹果。他们告诉我查看面包屑示例代码。我遵循了那个例子,一切都很好。

这里的问题是会话属性和时间等有许多不同的选项。例如你是设置属性然后取消设置还是离开它然后开始和停止会话?

这是一个类似的问题:

Audio Session "Ducking" Broken in iOS 4...?

这是苹果的示例代码:

http://developer.apple.com/library/ios/#samplecode/Breadcrumb/Introduction/Intro.html

【讨论】:

【参考方案2】:

查看@zaphodtx 发布的示例代码,一种可能的解决方案是激活和停用当前音频会话。

示例中的具体文件为: https://developer.apple.com/library/ios/samplecode/Breadcrumb/Listings/Breadcrumb_BreadcrumbViewController_m.html#//apple_ref/doc/uid/DTS40010048-Breadcrumb_BreadcrumbViewController_m-DontLinkElementID_6

例如,在 Swift 中:

import UIKit
import AVFoundation


class MyController: UIViewController, AVAudioPlayerDelegate

    var audioPlayer: AVAudioPlayer?

    func viewDidLoad()
        super.viewDidLoad()
        configureAudioSession()
    

    func configureAudioSession()
        let session = AVAudioSession.sharedInstance()
        do
            try session.setCategory(AVAudioSessionCategoryPlayback, withOptions: [.DuckOthers])
         catch 
            print(
                "Unable to configure audio session, Attempting " +
                "to activate or deactivate the audio session will "
                "likely not meet your expectations."
            )
            return
        
        print("Audio Session Configured")
    

    func activateAudioSession(value: Bool)
        let session = AVAudioSession.sharedInstance()
        try? session.setActive(value)
    

    func playAudioAtPath(path:String)
        audioPlayer?.stop()
        let url = NSURL(fileURLWithPath: path)

        if let player = try? AVAudioPlayer(contentsOfURL: url)
            activateAudioSession(true)
            print("Playing AVAudioPlayer Sound from path: '\(path)'")
            player.volume = volume
            player.delegate = self
            player.play()
            audioPlayer = player
         else 
            print("Failed to play AVAudioPlayer Sound from path: '\(path)'")
            audioPlayer = nil
        
    

    func audioPlayerDidFinishPlaying(player: AVAudioPlayer, successfully flag: Bool) 
        activateAudioSession(false)
    

【讨论】:

以上是关于如何取消 AVAudioSession的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Angular 4+ 中取消/取消订阅所有挂起的 HTTP 请求

如何取消2003系统关机计划

如何取消mySql 5.0 密码

如何取消WORD中的自动更新时间

如何使用取消令牌Azure Service Bus(SubscriptionClient)

如何根据条件行值对 pandas 数据框进行取消堆叠或取消透视?