是否可以使用AudioKit收集麦克风输入并同时使用MIKMIDI通过立体声扬声器播放 MIDI 文件中的音符?
我发现自己可以成功地完成每一项工作;我可以从 AudioKit 收集麦克风频率并使用 MIKMIDI 从 MIDI 文件中播放音符,但如果我将它们一起使用,那么 MIDI 音符将在“内部硬件扬声器”上播放(不太确定实际名称?有点像DOS游戏),而不是立体声扬声器,并且音符的幅度极低。
音频套件使用
这实际上是我用来获取麦克风频率的唯一一段代码。我使用该频率数据还有其他代码,但这无关紧要。重点是,如果我注释掉这段代码,MIKMIDI 部分将按预期工作并通过立体声扬声器播放。
- (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]];
}
}