所以我正在尋找一種方法來改變當前的系統音量(從 YouTube Music 或 Spotify 等其他應用程式播放的音量),但要逐漸改變,這樣用戶就不會對突然的音量變化感到驚訝。
我試過這個:
import MediaPlayer
func changeVolume(volume: Float) async{
do{
try! AVAudioSession.sharedInstance().setActive(true)
}
var currentvol = AVAudioSession.sharedInstance().outputVolume
let delta = volume - currentvol
var incrementer = currentvol/10*delta
print("--------------")
print("Volume : \(volume)")
print("currentvol : \(currentvol)")
print("incrementer : \(incrementer)")
print("delta : \(delta)")
while(currentvol < volume){
if(incrementer <= 0){
incrementer = 0.01
}
currentvol = incrementer
print("updated : \(currentvol)")
await MPVolumeView.setVolume(currentvol)
try! await Task.sleep(nanoseconds: UInt64(0.05 * Double(NSEC_PER_SEC)))
}
await MPVolumeView.setVolume(volume)
}
但問題是它暫停了當前的音樂,而不是僅僅改變音量(可能是因為我的應用程式正在接管我認為的媒體播放器)
我的應用程式不播放音樂,所以我只是在尋找一種在用戶使用我的應用程式時改變其他應用程式音量的方法
知道我該怎么做嗎?
謝謝
uj5u.com熱心網友回復:
請注意,雖然您所描述的可能是可能的(我已經發布了一個這樣做的產品以便與自定義硬體互操作),但它完全不受支持,將來可能會中斷(對我來說它中斷了幾次當作業系統升級時),并且可能會從 AppStore 中洗掉您的應用程式。鑒于我們在最近的版本中看到的變化,我預計用于實作這一目標的技巧在未來的作業系統版本中根本不起作用。Apple 不允許您描述的功能。作為AVAudioSession.outputVolume注釋的檔案:“只有用戶可以直接設定系統音量。在您的應用程式中提供音量控制,使用 MPVolumeView,提供調整系統音量的界面。”
公共 API中沒有MPVolumeView.setVolume方法,因此不清楚您在這里實際在做什么。您可能應該包含我假設您撰寫的擴展的代碼。
也就是說,它暫停的原因是因為你告訴它在這里暫停:
try! AVAudioSession.sharedInstance().setActive(true)
此行的默認行為是在.playback模式下控制音頻會話,這將中斷所有后臺會話。理想情況下,如果您不打算播放音頻,則根本不應該激活音頻會話。如果你這樣做了,那么你應該將類別設定為.ambient(表明音頻對你的應用程式不重要)或者你應該傳遞選項.mixWithOthers(表明它很重要,但你仍然希望其他會話繼續播放)。
根據您的實際目標,一個更好的解決方案可能是通過 option .duckOthers,這將以受支持的方式減少其他應用程式的數量。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/486948.html
