无法将.wav文件加载到新的AKSampler

时间:2019-08-01 13:48:02

标签: ios swift audiokit

我正尝试用新的 AKSampler 替换 AKMidiSampler AKPlayer ,但是由于某些原因,新的采样器无法播放以前的 AKAudioFiles

这是一个使用所有三个采样器的小代码示例: AKMidiSampler AKPlayer 和新的 AKSampler 。 所有文件都加载了相同的 AKAudioFile 。 如果按原样运行,则不会播放声音。

取消注释时

player.play()

try auSampler.play(noteNumber: 60, velocity: 127, channel: 0)

会有声音。

我的猜测是我没有正确使用 AKSampleDescriptor , 我以它为例here

import Foundation
import AudioKit

class Conductor {
    var sampler   = AKSampler()
    var auSampler = AKMIDISampler()
    var player    = AKPlayer()
    var mixer     = AKMixer()

    init() {
        do {
            let akfile = try AKAudioFile(readFileName: "Drums.wav")



            let descriptor = AKSampleDescriptor(noteNumber: 60,
                                                noteFrequency: Float(AKPolyphonicNode.tuningTable.frequency(forNoteNumber: 60)),
                                                minimumNoteNumber: 0,
                                                maximumNoteNumber: 127,
                                                minimumVelocity: 0,
                                                maximumVelocity: 127,
                                                isLooping: true,
                                                loopStartPoint: 0.0,
                                                loopEndPoint: 1.0,
                                                startPoint: 0.0,
                                                endPoint: 0.0)

            sampler.loadAKAudioFile(from: descriptor, file: akfile)
            try auSampler.loadAudioFile(akfile)
            player = akfile.player

            [player, sampler, auSampler] >>> mixer
            AudioKit.output = mixer
            try AudioKit.start()


//            player.play()
//            try auSampler.play(noteNumber: 60, velocity: 127, channel: 0)
            sampler.play(noteNumber: 60, velocity: 127)



        }
        catch {
            print("ehhhh...")
        }

    }


}

1 个答案:

答案 0 :(得分:1)

解决方案很简单,我只需要添加以下行:

sampler.buildKeyMap()

加载样品后。 现在一切正常。