如何取消 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 请求