2010-12-04 8 views
7

J'essaye de mettre en place un programme pour enregistrer une partie d'un flux audio Internet, et l'enregistrer dans un fichier (de préférence mp3 ou wav). J'ai regardé partout et je ne trouve pas de façons décentes de le faire. J'ai trouvé deux bibliothèques différentes qui semblaient fonctionner (NativeBass et Xuggle), mais aucune ne supportait les fenêtres 64 bits, ce dont j'ai besoin.Enregistrer du contenu audio en continu dans Java?

Est-ce que quelqu'un connaît des moyens simples pour enregistrer une partie d'un flux audio Internet en utilisant Java? (Si c'est important, c'est un flux "audio/mpeg").

EDIT: D'accord, j'ai trouvé un moyen qui semble fonctionner. Mais j'ai encore une question

import java.net.URLConnection; 
import java.net.URL; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.io.FileOutputStream; 
import java.io.File; 
public class Test{ 

    public static void main (String[] args){ 
     try{ 
      URLConnection conn = new URL("http://streamurl.com/example").openConnection(); 
      InputStream is = conn.getInputStream(); 

      OutputStream outstream = new FileOutputStream(new File("C:/Users/Me/Desktop/output.mp3")); 
      byte[] buffer = new byte[4096]; 
      int len; 
      long t = System.currentTimeMillis(); 
      while ((len = is.read(buffer)) > 0 && System.currentTimeMillis() - t <= 5000) { 
       outstream.write(buffer, 0, len); 
      } 
      outstream.close(); 
     } 
     catch(Exception e){ 
      System.out.print(e); 
     } 
    } 
} 

J'ai obtenu la plupart de ceci d'une autre réponse ici après un peu plus de recherche. Cependant, une chose que j'essaie de faire est d'enregistrer seulement pendant un certain temps. Comme vous pouvez le voir ci-dessus, j'ai essayé d'enregistrer seulement un intervalle de 5 secondes.

long t = System.currentTimeMillis(); 
while ((len = is.read(buffer)) > 0 && System.currentTimeMillis() - t <= 5000) { 

Cependant, pour une raison ou une autre, l'enregistrement audio n'est pas 5 secondes, il est 16. Est-ce que quelqu'un sait comment être plus précis pour limiter la longueur du cours d'eau?

Répondre

4

Si vous voulez exactement 5 secondes, vous pouvez le calculer vous-même en fonction du nombre d'octets que vous avez reçus et du débit binaire du flux audio.

+0

Je l'avais déjà essayé, mais après avoir reçu ce commentaire, j'ai relu l'article de wikipedia sur les débits de données. Apparemment, j'avais lu la mauvaise partie de l'article (kBps au lieu de kbps) qui a abouti à ma confusion (puisque j'obtenais 66000 octets/seconde au lieu de 8250 octets/seconde). –

Questions connexes