在 IOS 上使用 AudioKit 将声音文件作为 MIDI 音符发送

Posted

技术标签:

【中文标题】在 IOS 上使用 AudioKit 将声音文件作为 MIDI 音符发送【英文标题】:sending sound files as MIDI notes using AudioKit on IOS 【发布时间】:2018-10-28 16:08:43 【问题描述】:

我有一个 ios 应用程序,它使用 AudioKit 来播放与 Pad 相关的声音的 AudioFiles。所以,我希望应用程序支持 MIDI 文件。我想知道如何使用 MIDI 导出这些声音文件,以便在 Garage band 等应用程序上播放它们

【问题讨论】:

您需要明确自己想要做什么和/或确保您了解 MIDI 是什么。没有(实用的)方法可以将声音文件转换/导出为 MIDI。请给出一个明确的示例,说明您希望您的应用做什么。 我的应用程序中有一个 Pad 乐器,用户可以通过点击 pad 按钮来使用它,pad 播放的声音是已经添加到项目文件并由 audioKit 播放的声音文件,我想为我的应用程序添加 MIDI 支持,我应该怎么做 “MIDI 支持”是什么意思?您可以使用您的打击垫将 MIDI 消息发送到其他应用程序/设备 - 但它们不会播放您的声音文件。或者您可以从其他来源接收 MIDI 消息,这可能会触发您的声音文件。除非您的应用程序使用音序器,否则谈论读取和写入 MIDI 文件是没有意义的。请给出一个明确的示例,说明您希望您的应用做什么。 您的回答很明确,我只是想将 MIDI 消息发送到其他应用程序并让他们播放我的声音文件,谢谢.. 【参考方案1】:

发送 MIDI:

// to send between app, create a virtual port:
AudioKit.midi.createVirtualOutputPort()
// you can specify which outputs you want to open, or open all by default:
AudioKit.midi.openOutput()

// to send a noteOn message:
AudioKit.midi.sendNoteOnMessage(noteNumber: aNoteNumber, velocity: aVelocity)

// to send a noteOff message:
AudioKit.midi.sendNoteOffMessage(noteNumber: aNoteNumber, velocity: 0)

要接收 MIDI,您需要有一个实现AKMIDIListener 协议的类(它甚至可以是您的 ViewController,但可能不应该)。此类允许您实现诸如receivedMIDINoteOn 之类的方法来处理传入事件。

class ClassThatImplementsMIDIListener: AKMIDIListener 
    func receivedMIDINoteOn(noteNumber: MIDINoteNumber,
                            velocity: MIDIVelocity,
                            channel: MIDIChannel) 
        // handle the MIDI event in your app, e.g., trigger you sound file
    

设置很简单:

// if you want to receive midi from other apps, create a virtual in
AudioKit.midi.createVirtualInputPort()

// you can specify which inputs you want to open, or open them all by default
AudioKit.midi.openInput()

// add your listener
AudioKit.midi.addListener(classImplementingMIDIListener)

【讨论】:

以上是关于在 IOS 上使用 AudioKit 将声音文件作为 MIDI 音符发送的主要内容,如果未能解决你的问题,请参考以下文章

AudioKit - 使用音序器在特定位置播放声音文件

如何在 AudioKit 中渲染和导出音频?

AudioKit:根据陀螺数据/摆动手机改变声音?

AudioKit - 尝试在 Audio Kit 5 中生成声音

Audiokit 交叉淡入淡出声音循环

Swift:声音输出和麦克风输入 |使用 AudioKit |