3

Java サウンド API の MIDI パッケージを使用してサウンドを合成する Java プログラムを作成しましたが、それを .jar ファイルにエクスポートすると、再生されるサウンドが Eclipse で実行したときとはかなり異なります。なぜこれを行っているのか、この問題を解決する方法を知っている人はいますか?

楽器のリストはここにあります: http://www.hittrax.com.au/images/artists/gmgs.pdf

以下は私のコードのセクションです

try {
        Synthesizer synth = MidiSystem.getSynthesizer();
        synth.open();
        MidiChannel[] channels = synth.getChannels();
        channels[0].programChange(123); // Set the instrument to be played (integer between 0 and 127)

        channels[0].noteOn(60, 80); // Play Middle C
        Thread.sleep(duration);
        channels[0].noteOff(60);
        Thread.sleep(500);

        synth.close();

    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (MidiUnavailableException e) {
        e.printStackTrace();
    }

下の画像は、私が録音したときの音声を示しています。最初の画像は、Eclipse でのサウンドの状態です。2 番目の画像は、.jar にエクスポートしたときのサウンドです。

音波

4

1 に答える 1

1

Eclipse の外部で jar ファイルを実行すると、Java が異なるデフォルトのシンセサイザーを返すことがわかりました。

これは、javax.sound.midi.Synthesizerプロパティまたはsound.propertiesクラスパス内のファイルが原因である可能性があります。

回避策として、Eclipse 内でアプリケーションを実行するときにプロパティ値を出力し、jar ファイルが同じシンセサイザーを使用するように手動で設定することができます。

編集:

デフォルトとして使用する場合com.sun.media.sound.MixerSynthは、プロパティを作成します

javax.sound.midi.Synthesizer=com.sun.media.sound.MixerSynth

例:

Properties props = System.getProperties();
props.setProperty("javax.sound.midi.Synthesizer", "com.sun.media.sound.MixerSynth");
Synthesizer synth = MidiSystem.getSynthesizer();
....

詳細: http://docs.oracle.com/javase/7/docs/api/javax/sound/midi/MidiSystem.html )

于 2015-07-01T05:41:10.693 に答える