2016-12-04 1 views
-1

zu spielen, ich bin mit AVAudioUnitSampler:Wie ein Theaterstück eine MIDI-Note mit einer bestimmten Dauer tut

  sampler.stopNote(note, onChannel: channel) 

Aber ich will nicht zu verwenden stoppen:

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

Was für eine besser Lösung? Dank

+0

Verwenden Sie AVMIDIPlayer? Wenn ja, sollten Sie das sagen, vielleicht im Titel Ihrer Frage –

+0

Ich benutze AVAudioUnitSampler, aber ich bin offen für alternative Möglichkeiten – Lucas

Antwort

1

Sie können eine MusicSequence erstellen und jedes Ereignis wird von einem MusicPlayer geplant.

Sie können AVMIDIPlayer verwenden, aber Sie müssen die MusicSequence in Data konvertieren, da MusicSequence nicht direkt gerupft wird.

Wenn Sie eine Note über eine Schaltfläche emulieren möchten, drücken Sie die Taste und geben Sie die Note über die Schaltfläche los, und verwenden Sie MusicDeviceMIDIEvent.

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

Sie könnten this für weitere Informationen über die Verwendung AVAudioUnitSampler lesen möchten.

+0

Das Beispiel ist nicht das, was ich suche, weil ich eine vorbestimmte Dauer festlegen möchte die Notiz. Ich habe versucht, eine MusicSequence und einen MusicPlayer zu verwenden, aber ich bekomme eine wichtige Latenz. Irgendwelche Tipps dazu? – Lucas

Verwandte Themen