无法将AKAudioFile加载到AKSampler中

时间:2017-12-15 23:16:13

标签: ios swift audio audiokit

我试图在一个简单的iOS项目上使用AKSampler来加载文件并在点击设备屏幕时播放它。
我使用AKSamplePlayer执行了相同的步骤,但它运行正常,但我更倾向于使用AKSampler,而且我也有一种强烈的遗憾。 我已经尝试了play()方法,也尝试了带midi音符的方法。
哪一个是对的?他们都工作吗?此外,AudioKit看起来很有前途。

这是我的代码:

import UIKit
import AudioKit

class ViewController: UIViewController
{
    var sampler = AKSampler()
    var tapRecognizer = UITapGestureRecognizer()

    override func viewDidLoad()
    {


    super.viewDidLoad()
        do
        {
            let file = try AKAudioFile(readFileName: "AH_G2.wav")
            try sampler.loadAudioFile(file)
        }
        catch
        {
            print("No Such File...")
        }

        view.addGestureRecognizer(tapRecognizer)
        view.isUserInteractionEnabled = true
        tapRecognizer.addTarget(self, action: #selector(viewTapped))


        AudioKit.output = sampler
        AudioKit.start()
    }

    @objc private func viewTapped()
    {
        sampler.play(noteNumber: 60, velocity: 80, channel: 0)

        print("tapped...")
    }
}

编辑: 我的问题实际上是使用loadAudioFile方法,AKAudioFile本身就是好的,而AKSampler会播放默认的正弦声音。
我还尝试了AKAudioFile创建播放器和采样器的方法。

let file = try AKAudioFile (readFileName: "AH_G2.wav")
player = file.player
sampler = file.sampler

我还尝试使用菜单添加wav文件,无需更改。

2 个答案:

答案 0 :(得分:1)

如果查看实现,只有一个play()方法,但它有noteNumber,velocity和channel的默认值:

@objc open func play(noteNumber: MIDINoteNumber = 60,
                         velocity: MIDIVelocity = 127,
                         channel: MIDIChannel = 0) {
        samplerUnit.startNote(noteNumber, withVelocity: velocity, onChannel: channel)
    }

更改MIDI音符将改变样本播放的音高/速度(60为标准,72为双倍速度,48为半速等),更改速度将改变音量。

注意:你的帖子的标题是“AKSampler不播放”,但我运行了你的代码(当然更改了样本),它在我的iPad上播放得很好。

答案 1 :(得分:1)

我尝试过不同的音频文件,但效果很好。 第一个文件是单声道文件,所以我的结论是xinput --disable [...]不支持单声道文件。很想听到更多关于此事的消息。