如果这是重复的,我深表歉意,但我在这里发现的任何东西似乎都不起作用。我正在使用 libGDX 用 Java 开发一款桌面和 Android 游戏。我通过使用核心模块中的接口(interface)添加了 MIDI 支持,该接口(interface)在特定于平台的模块中实现。这是该界面:
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 之间的 float ,这样 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
}
}
我尝试了很多不同的方法,我尝试了以下解决方案: http://www.java2s.com/Code/Java/Development-Class/SettingtheVolumeofPlayingMidiAudio.htm
What's the method to control volume in an MIDI sequencer?
How to control the MIDI channel's volume
但都没有奏效。
最佳答案
如果 MIDI 文件已包含您自己的 channel 音量消息,则发送这些消息并不是很有用。
您可以尝试发送Master Volume messages ,如果该合成器支持它们。
Java 合成器没有与其 MIDI 输入分开的音量 Controller 。如果 MIDI 消息不起作用,您必须直接转到音频设备(并且没有好方法来找出合成器使用哪一个)。
关于java - 桌面上的 libGDX Midi 音量控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46508689/