【问题标题】:Can't load AKAudioFile into AKSampler无法将 AKAudioFile 加载到 AKSampler
【发布时间】:2017-12-15 23:16:12
【问题描述】:

我正在尝试在一个简单的 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文件,没有变化。

【问题讨论】:

    标签: ios swift audio audiokit


    【解决方案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 上运行良好。

    【讨论】:

    • 感谢您的回答,@c_booth。您确实帮助我理解了 play() 方法。但我仍然无法让它在我的 iPhone 和模拟器上运行。正如我所说,相同的代码与 AKSamplePlayer 完美配合,所以我认为问题不在于音频文件。你有什么想法吗?
    • 我让 Xcode 对拖入导航器的文件的响应不一致,因此您可能想尝试通过文件菜单中的添加文件添加文件。也许还可以尝试在新项目中重新启动,以防某些内容被意外更改。但我刚刚再次检查,您的代码在 iPhone 8 模拟器中对我来说运行良好。
    • 您能告诉我您将音频文件添加到项目中的具体步骤吗?
    • 文件 > 将文件添加到“projectName”或 alt-cmd-A。拖放也有效,但我过去曾遇到过这个问题。除了文件名之外,我只是将您的代码粘贴到我的 ViewController 文件中。
    • 知道了!我从头开始做了所有事情,但你说“除了文件名”,所以我使用了不同的文件,你猜怎么着?有效。原来我使用的文件是单声道文件,我猜AKSampler 不支持,而AKSamplePlayer 支持。非常感谢@c_booth。
    【解决方案2】:

    我尝试了不同的音频文件,效果很好。 第一个文件是单声道文件,所以我的结论是AKSampler 不支持单声道文件。很想听听更多。

    【讨论】:

    • 嗯,这不是单声道/立体声问题。我做了更多的实验,唯一可以肯定的是,pro-tools 生成的 wav 文件存在问题。当我切换到收割者时,一切都很顺利。
    猜你喜欢
    • 2018-08-23
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多