AudioKit麦克风输入+ MIDI输出

时间:2017-04-02 19:22:58

标签: ios objective-c audiokit mikmidi

是否可以使用AudioKit收集麦克风输入并同时使用MIKMIDI通过立体声扬声器播放MIDI文件中的音符?

我发现我可以自己成功地完成每项工作;我可以从AudioKit收集麦克风频率并使用MIKMIDI从MIDI文件中播放音符,但如果我一起使用它们,那么MIDI音符将在“内部硬件扬声器”上播放(不太确定实际名称?有点像DOS游戏),而不是立体声扬声器,音符的振幅非常低。

AudioKit用法

这实际上是我用来获取麦克风频率的唯一代码。 我使用频率数据的其他代码,但它是无关紧要的。点,如果我注释掉这段代码,MIKMIDI部分按预期工作并通过立体声扬声器播放。 / p>

- (void)setupAudio
{
    AKSettings.audioInputEnabled = true;

    self.microphone = [[AKMicrophone alloc] init];
    self.tracker = [[AKFrequencyTracker alloc] init:self.microphone hopSize:0 peakCount:0];
    self.silence = [[AKBooster alloc] init:self.tracker gain:0];

    [AudioKit setOutput:self.silence];
    [AudioKit start];
}

MIKMIDI用法

- (void)playMidi:(NSUInteger)note withDuration:(float)duration
{
    if ( [DEFAULTS boolForKey:kPreferenceMIDIPlaybackEnabled] )
    {
        NSDate * startDate = [NSDate date];
        NSDate * endDate = [startDate dateByAddingTimeInterval:duration];

        MIKMIDINoteOnCommand * noteOn = [MIKMIDINoteOnCommand noteOnCommandWithNote:note velocity:127 channel:0 timestamp:startDate];
        MIKMIDINoteOffCommand * noteOff = [MIKMIDINoteOffCommand noteOffCommandWithNote:note velocity:0 channel:0 timestamp:endDate];

        [self.synthesizer handleMIDIMessages:@[noteOn, noteOff]];
    }
}

0 个答案:

没有答案