2016-12-04 81 views
-1

播放我使用的是AVAudioUnitSampler:如何做一個播放MIDI音符具有確定的持續時間

  sampler.stopNote(note, onChannel: channel) 

但要停止我不想使用:

  DispatchQueue.main.asyncAfter(
       deadline: DispatchTime.now() + Double(Int64(0.7 * Double(NSEC_PER_SEC)))/Double(NSEC_PER_SEC)) 
      { 
       sampler.stopNote(note, onChannel: channel) 
      } 

什麼是更好的解? 謝謝

+0

你在使用AVMIDIPlayer嗎?如果是這樣,你應該說,也許在你的問題的標題 –

+0

我使用AVAudioUnitSampler,但我打開替代方法 – Lucas

回答

1

您可以創建一個MusicSequence,並且其中的每個事件都將由MusicPlayer調度。

您可以使用AVMIDIPlayer,但是您需要將MusicSequence轉換爲Data,因爲它不直接使用MusicSequence。

如果您想通過按鈕模擬註釋並按下釋放按鈕,請使用MusicDeviceMIDIEvent。

let status = MusicDeviceMIDIEvent(midisynthUnit, noteCommand, noteNum, velocity, 0) 

您可能需要閱讀this有關使用AVAudioUnitSampler更多信息。

+0

這個例子不是我正在尋找,因爲我想設置一個預定的持續時間筆記。我嘗試使用MusicSequence和MusicPlayer,但我得到了一個重要的延遲。任何提示呢? – Lucas

相關問題