2010-12-04 33 views
7

Estoy tratando de configurar un programa para grabar una parte de una transmisión de audio de Internet y guardarlo en un archivo (preferiblemente mp3 o wav). He buscado en todas partes y no puedo encontrar ninguna forma decente para hacer esto. Encontré dos bibliotecas diferentes que parecían funcionar (NativeBass y Xuggle), pero ninguna de las compatibles con Windows de 64 bits es lo que necesito.¿Grabar audio en tiempo real en java?

¿Alguien sabe de alguna manera simple de guardar una porción de una secuencia de audio de Internet usando Java? (Si es importante, es un flujo "audio/mpeg").

EDITAR: De acuerdo, encontré una manera que parece funcionar. Pero todavía tengo una pregunta

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); 
     } 
    } 
} 

Obtuve la mayor parte de esto de otra respuesta aquí después de buscar un poco más. Sin embargo, una cosa que estoy tratando de hacer es registrar solo por una cierta cantidad de tiempo. Como puede ver arriba, intenté grabar solo un intervalo de 5 segundos.

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

Sin embargo, por una razón u otra, el audio grabado no es de 5 segundos de duración, se 16. ¿Alguien sabe cómo ser más preciso en la limitación de la duración de la corriente?

Respuesta

4

Si desea exactamente 5 segundos, puede calcularlo usted mismo en función de la cantidad de bytes que ha recibido y la velocidad de bits de la transmisión de audio.

+0

Ya lo había intentado, pero después de recibir este comentario, volví a leer el artículo de wikipedia sobre las velocidades de datos. Aparentemente había leído la parte incorrecta del artículo (kBps en lugar de kbps), lo que resultó en mi confusión (ya que estaba obteniendo 66000 bytes/segundo en vez de 8250 bytes/segundo). –

Cuestiones relacionadas