草庐IT

ios - 如何在 iOS 上生成音符并播放它们?

我正在创建一个可以生成一些音乐的音乐应用程序。我已经在Mac上使用MIDI函数来创建带有MIDI事件的MIDI文件(不幸的是,我不记得那些函数的名称)。我正在寻找一种方法来以编程方式创建乐器音符(MIDI或其他任何东西)以便播放它们。我还希望有多个channel同时播放这些音符。我已经尝试过“SoundBankPlayer”,但显然,它不能同时演奏多种乐器。你有想法吗? 最佳答案 这个答案可能比您预期的要多一些,但您可以在iOS上使用PD来完成此操作。更准确地说,您可以使用libpdforiOS用于合成,然后使用任意数量的commu

ios - 将非常简单的 MusicSequence 保存到 MIDI 中不会重现声音

我正在尝试将一个非常基本的单音符MusicSequence(MusicSequenceReference)保存到MIDI文件中。现在正在写入文件,音符的持续时间也正在写入(如果我将持续时间设置为4,则MIDI文件持续2秒,如果我将其更改为2,则它应该持续1秒)但是没有声音被再现并且如果我在Logic中查看MIDI文件,也没有任何信息。似乎音符持续时间被写入,但音符的音符没有。会发生什么?+(MusicSequence)getSequence{MusicSequencemySequence;MusicTrackmyTrack;NewMusicSequence(&mySequence);M

ios - 播放多乐器 MIDI 文件 IOS

我正在尝试编写一个具有高质量音色库的简单midi播放器,但我遇到了播放midi文件的问题。问题是所有MIDI音轨(鼓、打击垫、贝斯、合成器等)都在播放,但它们只演奏一种乐器。我找到了适用于OSX的解决方案,但我需要适用于iOS的解决方案。我是否必须为每个乐器创建带有kAudioUnitSubType_Sampler的audioUnit?或者是否可以实时更改所选channel上的乐器?如何实现?这是我的代码,它不能正常工作://CreateaclientMIDIClientRefvirtualMidi;Check(MIDIClientCreate(CFSTR("VirtualClient

swift - 如何从 AudioKit 中的 AKMusicTrack 输出外部 MIDI

我想知道最好的方法是让AKSequencer(实际上是AKMusicTrack)将它的MIDI输出到外部设备。我已经让它工作了,但我觉得可能还有更有效的方法。我的做法:我创建了AKPolyphonicNode的子类(“MyPolyphonicNode”)我用它来初始化AKMIDINode(“MyMIDINode”)的子类,classMyMIDINode:AKMIDINODE{init(...){...letmyPolyphonicNode=MyPolyphonicNode()super.init(node:myPolyphonicNode,midiOutputName:"myMIDIO

ios - UIAnimations 响应 Swift 中的 MIDI 事件

我正在尝试使用Apple的AudioToolbox框架编写一个MIDI序列,该框架会在UI中触发动画。感谢GeneDeLisa的博客,我已经成功地创建了序列,由于代码的长度,我不会在这里完整地复制它。基本过程是设置一个AUGraph、一个采样器单元(AudioUnit())、一个musicPlayer和一个音乐序列:varprocessingGraph:AUGraphvarsamplerUnit:AudioUnitvarmusicPlayer:MusicPlayervarmusicSequence:MusicSequence然后我做了一个函数来填充音乐序列:funccreateMusi

swift - Swift 3 不允许 Core Midi Read 回调

我在Swift3项目中有一个midireadproc回调设置。我想将项目完全保留在Swift中,而不必为了完成这项工作而求助于ObjectiveC。有很多关于CoreMidi和Swift的文章,但由于框架经常变化,这些文章中的语法不再适用。//MidiMessageCallbackfuncMIDIReadCallback(pktList:UnsafePointer,refCon:UnsafeMutableRawPointer?,srcConRef:UnsafeMutableRawPointer?)->Void{letpacket=pktList.pointee.packetfor_in

ios - 与 wav AudioKit 一起播放 MIDI 文件

我正在尝试在播放wav音频时播放midi文件。我试过letakSequencer=AKSequencer(filename:"melody")akSequencer.enableLooping()akSequencer.play()但它只播放第一个音符,没有其他内容。此外,我无法使用混音器将其与正在加载的wav文件混合,例如:letakMidiSampler=AKMIDISampler()letakSampler=AKSampler()letwavFile=tryAKAudioFile(forReading:wavUrl!)tryakSampler.loadAudioFile(wavF

xcode - Swift 2 到 swift 3 转换 Midi 输入

我希望有人可以帮助我使用Xcode8和swift3我有一个Playground文件Xcode7swift2,它涉及Midi输入的Midi回调,在7中一切正常我尝试转换为8,它引发了关于内存的错误和一些我认为不严重的名称更改,我还使用PlaygroundSupport重新定义了无限循环但是我无法克服的错误涉及MyMIDIReadProcatMIDIInputPortCreate(midiClient,"MidiTest_InPort",MyMIDIReadProc,nil,&inPort);错误说无法将类型“(pktList:UnsafePointer,readProcRefCon:Un

ios - 用于 MIDI 播放和录音的 AVAudioEngine 同步

问题1我的第一个问题涉及使用AVAudioPlayerNode和AVAudioSequencer进行MIDI时的播放同步。基本上我正在尝试通过MIDI播放一些东西,但它们需要完美同步。我知道AVAudioPlayerNode有同步方法,但音序器似乎没有类似的方法。目前我已经尝试在单独的线程上使用CAMediaTime()+delay和usleep,但它们似乎工作得不是很好。问题2我正在使用engine.inputNode上的点击来获取录音,与音乐播放分开。不过,好像录音开始得更早了。当我将录制的数据与原始播放进行比较时,差异约为300毫秒。我可以在300毫秒后开始录制,但即便如此,这也

ios - AudioKit iOS - 接收 MIDINoteOn 函数

我正在尝试使用receivedMIDINoteOn函数在音序器播放音符时闪烁UILabel。我尝试使用AKMIDIListener协议(protocol)但没有成功。我还制作了AKMIDISampler的子类,并从音序器向它发送midi。它播放midi但未调用receivedMIDINoteOn。这是我在conductor的init()中的内容:init(){[ahSampler,beeSampler,gooSampler,flasher]>>>samplerMixerAudioKit.output=samplerMixerAudioKit.start()letmidi=AKMIDI(