복붙노트

[SWIFT] AudioKyt IOS AKSamplerMetronome

SWIFT

AudioKyt IOS AKSamplerMetronome

해결법


  1. 1.당신은 AKSequencer 쉽게 충분이 작업을 수행 할 수있다 (I 비슷한 일을했다). I 메트로놈 사운드 및 AKCallbackInstrument 갔다 번째 트랙을 생성 AKMIDISampler 상기 시퀀서 중의 하나의 트랙을 할당. AKCallbackInstrument로 전송되는 트랙에서, 그래서 예를 들어, 첫 번째 비트의 MIDI 데이터를 하나의 MIDINote, 두 번째는, MIDINote 2가 (당신이 속도로이 작업을 수행 할 수 있으며, 임의로 MIDI 데이터의 비트 정보를 인코딩 ). 그런 다음 콜백 함수는 단지 noteOn의 메시지를 모두 볼 것입니다 수 있으며, 그에 따라 전류 MIDI 노트 번호와 비트, 그리고 응답을 얻을. 그것은 약간의 간접하지만 그것을 작동합니다.

    당신은 AKSequencer 쉽게 충분이 작업을 수행 할 수있다 (I 비슷한 일을했다). I 메트로놈 사운드 및 AKCallbackInstrument 갔다 번째 트랙을 생성 AKMIDISampler 상기 시퀀서 중의 하나의 트랙을 할당. AKCallbackInstrument로 전송되는 트랙에서, 그래서 예를 들어, 첫 번째 비트의 MIDI 데이터를 하나의 MIDINote, 두 번째는, MIDINote 2가 (당신이 속도로이 작업을 수행 할 수 있으며, 임의로 MIDI 데이터의 비트 정보를 인코딩 ). 그런 다음 콜백 함수는 단지 noteOn의 메시지를 모두 볼 것입니다 수 있으며, 그에 따라 전류 MIDI 노트 번호와 비트, 그리고 응답을 얻을. 그것은 약간의 간접하지만 그것을 작동합니다.

    // create the sequencer before hand (e.g., at init); calling play() immediately after creating it causes some odd behaviour
        let sequencer = AKSequencer()
    
        // set up the sampler and callbackInst
        let sampler = AKSynthSnare()
        // or for your own sample:
        // let sampler = AKMIDISampler()
        // sampler.loadWav("myMetronomeSound)
        let callbackInst = AKCallbackInstrument()
        AudioKit.output = sampler
        AudioKit.start()
    
        // create two tracks for the sequencer
        let metronomeTrack = sequencer.newTrack()
        metronomeTrack?.setMIDIOutput(sampler.midiIn)
        let callbackTrack = sequencer.newTrack()
        callbackTrack?.setMIDIOutput(callbackInst.midiIn)
    
        // create the MIDI data
        for i in 0 ..< 4 {
            // this will trigger the sampler on the four down beats
            metronomeTrack?.add(noteNumber: 60, velocity: 100, position: AKDuration(beats: Double(i)), duration: AKDuration(beats: 0.5))
    
            // set the midiNote number to the current beat number
            callbackTrack?.add(noteNumber: MIDINoteNumber(i), velocity: 100, position: AKDuration(beats: Double(i)), duration: AKDuration(beats: 0.5))
        }
    
        // set the callback
        callbackInst.callback = {status, noteNumber, velocity in
            guard status == .noteOn else { return }
            print("beat number: \(noteNumber + 1)")
            // e.g., resondToBeat(beatNum: noteNumber)
        }
    
        // get the sequencer ready
        sequencer.enableLooping(AKDuration(beats: 4))
        sequencer.setTempo(60)
        sequencer.play()
    
  2. from https://stackoverflow.com/questions/47629637/audiokit-ios-aksamplermetronome by cc-by-sa and MIT license