如何在 SwiftUI 中一键连续播放两种声音

Posted

技术标签:

【中文标题】如何在 SwiftUI 中一键连续播放两种声音【英文标题】:How to play two sounds continuously in one button in SwiftUI 【发布时间】:2020-06-22 16:17:28 【问题描述】:

screenshot

我需要创建一个可以连续运行两种声音的按钮。 我现在的代码,按钮可以同时运行 SoundA 和 SoundB。 但我希望用户单击一个可以播放 SoundA 的按钮。 然后 SoundA 结束,然后自动播放 SoundB(在 SoundA 结束之后)。 感谢您的帮助。

import SwiftUI
import AVKit

struct ContentView: View 
    @State var audioPlayer1: AVAudioPlayer!
    @State var audioPlayer2: AVAudioPlayer!
    var body: some View 
     
          
            Button(action: 
                
                let sound1 = Bundle.main.path(forResource: "soundA", ofType: "mp3")
                let sound2 = Bundle.main.path(forResource: "soundB", ofType: "mp3")
                
                self.audioPlayer1 = try! AVAudioPlayer(contentsOf: URL(fileURLWithPath: sound1!))
                self.audioPlayer2 = try! AVAudioPlayer(contentsOf: URL(fileURLWithPath: sound2!))
                
                self.audioPlayer1.play()
                self.audioPlayer2.play()
            ) Text("Play sound")
                .frame(width:300, height: 100)
                .background(Color.yellow)
        
    
    

        

我也试过了,还是不行。

self.audioPlayer1.play()
self.audioPlayer1.stop()
self.audioPlayer2.play()

【问题讨论】:

【参考方案1】:

获取第一个声音的长度。

let duration = self.audioPlayer1.duration

播放你的第一个声音..

self.audioPlayer1.play()

插入你进入 asyncAfter DispatchQueue 并播放第二个声音的长度。

DispatchQueue.main.asyncAfter(deadline: .now() + duration) 
self.audioPlayer2.play()
            

您还可以对第一个声音的秒数进行硬编码,或者通过增加更多秒数来增加暂停。希望有帮助..

【讨论】:

它非常适合我。非常感谢您的解决方案!

以上是关于如何在 SwiftUI 中一键连续播放两种声音的主要内容,如果未能解决你的问题,请参考以下文章

如何一键暂停/播放多个 MediaPlayer 对象?

如何在 iOS 应用程序中连续循环播放声音文件?

如何在 SwiftUI 中等待音频完成?

EasyPlayer声音自动停止恢复,一键静音等功能

如何同时播放两种声音?

如何在python中动态显示文本时在后台播放声音?