Java 桌面上的libGDX Midi音量控制

Java 桌面上的libGDX Midi音量控制,java,libgdx,midi,Java,Libgdx,Midi,我很抱歉,如果这是一个重复,但我在这里发现似乎没有任何工作。我正在使用libGDX开发一款Java桌面和Android游戏。我通过在我的核心模块中使用一个接口添加了MIDI支持,该接口在平台特定模块中实现。以下是该界面: public interface Midi { void setLooping(boolean looping); void pause(); void stop(); void setPosition(int pos); void di

我很抱歉,如果这是一个重复,但我在这里发现似乎没有任何工作。我正在使用libGDX开发一款Java桌面和Android游戏。我通过在我的核心模块中使用一个接口添加了MIDI支持,该接口在平台特定模块中实现。以下是该界面:

public interface Midi {
    void setLooping(boolean looping);
    void pause();
    void stop();
    void setPosition(int pos);
    void dispose();
    long getPosition();
    boolean isLooping();
    void setVolume(float volume);
    void onPause();
    void onResume();
}
我在桌面和Android项目中的实现完美地加载和播放midi文件。在Android版本中,我甚至可以轻松设置音量。但是,我不知道如何在桌面上实现该卷。我希望能够将音轨的音量设置为介于0和1之间的浮点值,以便0完全安静,1是最大的音量。以下是我目前在桌面上实现的midi播放器:

public class MidiPlayer implements Midi {

    /**
     * The sequencer to play the midi track.
     */
    private Sequencer sequencer;
    /**
     * Whether or not the track is looping.
     */
    private boolean looping;

    public MidiPlayer(FileHandle fileHandle) {
        try {
            sequencer = MidiSystem.getSequencer();
            sequencer.open();
            sequencer.setSequence(fileHandle.read());
            sequencer.setMicrosecondPosition(0);
            sequencer.setLoopStartPoint(0);
            sequencer.setLoopEndPoint(-1);
            looping = false;
        } catch (MidiUnavailableException | InvalidMidiDataException | IOException e) {
            Gdx.app.error(getClass().getName(), e.getMessage(), e);
        }
    }

    @Override
    public void play() {
        sequencer.start();
    }

    @Override
    public void setLooping(boolean looping) {
        this.looping = looping;
        if(!looping) {
            sequencer.setLoopCount(0);
        } else {
            sequencer.setLoopCount(Sequencer.LOOP_CONTINUOUSLY);
        }

    }

    @Override
    public void pause() {
        sequencer.stop();
    }

    @Override
    public void stop() {
        sequencer.stop();
        sequencer.setMicrosecondPosition(0);
    }

    @Override
    public void setPosition(int pos) {
        sequencer.setMicrosecondPosition(pos);
    }

    @Override
    public void dispose() {
        sequencer.close();
    }

    @Override
    public long getPosition() {
        return sequencer.getMicrosecondPosition();
    }

    @Override
    public boolean isLooping() {
        return this.looping;
    }

    @Override
    public void setVolume(float volume) {
        //I have tried several things here and none have worked
    }

    @Override
    public void onPause() {
        //ANDROID ONLY
    }

    @Override
    public void onResume() {
        //ANDROID ONLY
    }
}
我尝试了许多不同的方法,我尝试了以下解决方案:


没有一个成功

如果MIDI文件中已经有您自己的频道音量消息,则发送它们不是很有用

如果合成器支持,你可以尝试发送


Java合成器没有与其MIDI输入分开的音量控制器。如果MIDI消息不起作用,您必须直接转到音频设备(并且没有很好的方法来确定合成器使用的是哪一个)。

如果MIDI文件中已经有您自己的频道音量消息,则发送它们不是很有用

如果合成器支持,你可以尝试发送


Java合成器没有与其MIDI输入分开的音量控制器。如果MIDI消息不起作用,您必须直接转到音频设备(并且没有很好的方法来确定合成器使用的是哪一个)。

在Android上如何处理音量?您在桌面上使用的合成器是什么?@CL.至于桌面,我假设我正在使用系统合成器,如
sequencer=MidiSystem.getSequencer()所述
在Android上,我使用内置的
MediaPlayer
类,它可以轻松地使用
MediaPlayer.setVolume(volume,volume)设置音量如何在Android上处理卷?您在桌面上使用的合成器是什么?@CL.至于桌面,我假设我正在使用系统合成器,如
sequencer=MidiSystem.getSequencer()所述
在Android上,我使用内置的
MediaPlayer
类,它可以轻松地使用
MediaPlayer.setVolume(volume,volume)设置音量