2010-06-28 4 views
0

moi et un ami programment un lecteur MP3 en tant que projet scolaire. Nous sommes presque finis et maintenant bloqués au point où nous essayons de programmer une fonction pour changer le volume du joueur. Nous utilisons:Ajustement du volume à l'aide de JLayer

  • AudioDevice
  • AdvancedPlayer

Je sais que quelqu'un a demandé d'autre allready la même question, mais je ne comprends pas bien la solution et je ne voulais pas répondre à une telle vieille question donc je pensais que je vais juste demander à nouveau.

Vive Timothy

Répondre

2

La meilleure façon de le faire est d'utiliser JLayer via mp3spi ce qui signifie essentiellement que vous utilisez JLayer via JavaSound. Vous pouvez ensuite définir le gain sur la ligne comme vous le feriez dans JavaSound.

Tout d'abord, vous devrez ajouter ce qui suit à votre classpath:

  • jl1.0.1.jar
  • mp3spi1.9.5.jar
  • tritonus_share.jar

.. .all dont sont dans la distribution pour mp3spi (lié ci-dessus).

Deuxièmement, vous devrez décoder l'AudioInputStream avant la lecture.

AudioInputStream audioStream = AudioSystem.getAudioInputStream(file); 
AudioFormat baseFormat = audioStream.getFormat(); 
AudioFormat decodedFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, baseFormat.getSampleRate(), 16, baseFormat.getChannels(), 
     baseFormat.getChannels() * 2, baseFormat.getSampleRate(), false); 
AudioInputStream audioStream2 = AudioSystem.getAudioInputStream(decodedFormat, audioStream); 

Ensuite, vous jouez le flux décodé:

Clip clip = AudioSystem.getClip(); 
clip.open(audioStream2); 

et les contrôles de l'API JavaSound sont disponibles:

FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN); 
gainControl.setValue(-30.0f); 

REMARQUE: Ne pas oublier de fermer vos ressources, je viens montré les points clés pour ce problème - la familiarité avec JavaSound est attendue, read here.

0

jlGui est un bon exemple d'une application de base JLayer UI-réglage du volume. Vous pouvez obtenir le code source dans le fichier tar.gz. http://www.javazoom.net/jlgui/sources.html

if (src == ui.getAcVolume()) 
    { 
     Object[] args = { String.valueOf(ui.getAcVolume().getValue()) }; 
     String volumeText = MessageFormat.format(ui.getResource("slider.volume.text"), args); 
     ui.getAcTitleLabel().setAcText(volumeText); 
     try 
     { 
      int gainValue = ui.getAcVolume().getValue(); 
      int maxGain = ui.getAcVolume().getMaximum(); 
      if (gainValue == 0) theSoundPlayer.setGain(0); 
      else theSoundPlayer.setGain(((double) gainValue/(double) maxGain)); 
      config.setVolume(gainValue); 
     } 
     catch (BasicPlayerException ex) 
     { 
      log.debug("Cannot set gain", ex); 
     } 
    } 
+1

cette mise en forme si/sinon me fait mal à la tête. – akf

+0

Hey merci pour la réponse rapide! Je vais vérifier et demander à nouveau si je ne comprends pas :-) – Timothy

+0

Ohh emm pourriez-vous me dire rapidement dans quel fichier le code que vous avez posté est trouvé? Salutations – Timothy