使用midi乐器在midi录制时合成声音

时间:2012-06-12 01:53:59

标签: java audio record midi javasound

我正在制作一个Java应用程序来使用midi乐器录制midi。我一直在使用Java和ASIO驱动程序使用proyect JAsioHost来避免延迟。

目前我正在为每个音符制作纯正弦波。我想使用java提供的合成器产生声音,如下面的代码所示:

import javax.sound.midi.MidiChannel;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.MidiUnavailableException;
import javax.sound.midi.Synthesizer;


public class Main {
    public static void main(String[] args) {
        Synthesizer synthesizer = null ; 
        MidiChannel [] channels = null ; 
        try {
            synthesizer = MidiSystem.getSynthesizer() ;
            synthesizer.open();
            channels = synthesizer.getChannels();
            channels[0].programChange(1) ;
            channels[0].noteOn( 70, 40) ;
            Thread.sleep( 3000) ;
        } catch (MidiUnavailableException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } 
        channels[ 0 ].noteOff(70) ;
    }
}

要实现这一点,我必须得到一个带有采样音频的浮点数组,该音频对应于调用noteOn函数时合成器生成的音频(因此我可以使用数组生成带有驱动程序的音频)。有谁知道如何做到这一点?

我正在考虑尝试查看noteOn函数实现,以查看代码的某些位置是否有一个包含采样音频的数组,然后才将其发送到调音台,但我不知道在哪里可以找到它

ps:运行我的应用程序时,我无法调用synthesizer.open()方法,因为在驱动程序运行时无法打开混音器。

0 个答案:

没有答案