【问题标题】:How to play two audio files at once with Swift using AudioKit如何使用 Swift 使用 AudioKit 一次播放两个音频文件
【发布时间】:2022-10-07 00:00:57
【问题描述】:

我有两个要同时播放的短 wav 音频文件。使用 AudioKit,我有一个 AudioEngine(),我假设我应该使用 MultiSegmentAudioPlayer() 作为输出以及 scheduleSegments()。 这是我所拥有的:

class AudioPlayClass : ObservableObject {

var player = MultiSegmentAudioPlayer()
let engine = AudioEngine()

init(){}

    func playFiles(){
    
        self.engine.output = player
        do {
            try AVAudioSession.sharedInstance().setCategory(.playAndRecord, mode: .default, options: .defaultToSpeaker)
            try AVAudioSession.sharedInstance().setActive(true)
            try engine.start()
           guard let url = Bundle.main.url(forResource: note1, withExtension: \"wav\", subdirectory: instrumentDirectory) else {return}
            guard let url2 = Bundle.main.url(forResource: note2, withExtension: \"wav\", subdirectory: instrumentDirectory) else {return}
            let audioFile = try AVAudioFile(forReading: url)
            let audioFile2 = try AVAudioFile(forReading: url2)
            let fileSampleRate = audioFile.processingFormat.sampleRate
            let file2SampleRate = audioFile2.processingFormat.sampleRate
            let fileNumberOfSamples = audioFile.length
            let file2NumberOfSamples = audioFile2.length
            let audioFileEndTime = Double(fileNumberOfSamples)/fileSampleRate
            let audioFile2EndTime = Double(file2NumberOfSamples)/file2SampleRate

            let segment1 = segment(audioFile: audioFile,
                                   playbackStartTime: 0.0, fileStartTime: 0, fileEndTime: audioFileEndTime)
            let segment2 = segment(audioFile: audioFile2,
                                       playbackStartTime: 0.0, fileStartTime: 0, fileEndTime: audioFile2EndTime)

            player2.scheduleSegments(audioSegments: [segment1, segment2])
            player2.play()
        } catch {
            print(error.localizedDescription.debugDescription)
        }
    }
}

public struct segment : StreamableAudioSegment {
public var audioFile: AVAudioFile

public var playbackStartTime: TimeInterval

public var fileStartTime: TimeInterval

public var fileEndTime: TimeInterval

public var completionHandler: AVAudioNodeCompletionHandler?

}

我只是对在 Swift 中播放音频和使用 AudioKit 有一个基本的了解,所以任何反馈都将不胜感激。谢谢!

    标签: swift audio avplayer avaudioplayer audiokit


    【解决方案1】:

    我认为 MultiSegmentAudioPlayer 主要用于顺序播放声音。您可能只需要 2 AudioPlayer() 并同时播放它们。

    【讨论】:

    • 不要以为你可以将两个 AudioPlayer() 连接到同一个引擎,但你是对的。
    【解决方案2】:

    通过创建两个单独的 AudioEngine() 实例解决了这个问题,每个实例都有自己的 AudioPlayer(),并一个接一个地立即加载和播放它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多