Je m'excuse si c'est un doublon, mais rien que j'ai trouvé ici semble fonctionner. Je travaille sur un jeu pour Desktop et Android en Java en utilisant libGDX. J'ai ajouté le support MIDI en utilisant une interface dans mon module de base qui est implémentée dans les modules spécifiques à la plate-forme. Voici cette interface:libGDX Contrôle du volume MIDI sur le bureau
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();
}
Et mes implémentations dans mes projets Desktop et Android chargent et lisent les fichiers midi parfaitement. Dans la version Android, je peux même régler le volume facilement. Cependant, je ne peux pas comprendre comment implémenter le volume sur le bureau. Je veux être en mesure de régler le volume de la piste à un flottant entre 0 et 1 de telle sorte que 0 est complètement silencieux, et 1 est le plus fort. Voici mon implémentation actuelle du joueur midi sur le bureau:
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
}
}
J'ai essayé beaucoup de choses différentes, je l'ai essayé les solutions suivantes: 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
Et aucun n'a travaillé.
Comment gérez-vous le volume sur Android? Quel synthétiseur utilisez-vous sur le bureau? –
@ CL.Comme pour le bureau, je suppose que je suis en train d'utiliser le synthétiseur du système comme décrit dans 'sequencer = MidiSystem.getSequencer();' sous Android, j'utilise la classe intégrée 'MediaPlayer' qui peut facilement régler le volume avec 'mediaPlayer.setVolume (volume, volume);' – JoseRivas1998