2010-12-04 206 views
7

我試圖設置一個程序來記錄一部分互聯網音頻流,並將其保存到一個文件(最好是mp3或wav)。我到處尋找,我找不到任何體面的方式來做到這一點。我發現了兩個不同的庫,它們看起來像是在工作(NativeBass和Xuggle),但都不支持我需要的64位窗口。在java中記錄流媒體音頻?

有誰知道任何簡單的方法來保存使用java的互聯網音頻流的一部分? (如果它很重要,它是一個「音頻/ mpeg」流)。

編輯: 好吧,我找到了一種似乎工作的方式。但我仍然有一個問題

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

我從一個更多的搜索後,在這裏從另一個答案大部分的這個。但是,我試圖做的一件事是隻記錄一段時間。正如你上面看到的,我試圖只記錄5秒的時間間隔。

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

但是,由於某種原因,錄製的音頻不是5秒長,它的16有誰知道如何在限制流的長度更精確?

回答

4

如果您確切需要5秒鐘,您可以根據您收到的字節數和音頻流的比特率自行計算。

+0

我已經試過了,但在得到這個評論之後,我重新閱讀了關於數據速率的維基百科文章。顯然,我讀過文章的錯誤部分(KBPS而不是kbps),這導致了我的困惑(因爲我得到了66000字節/秒而不是8250字節/秒)。 – 2010-12-04 19:08:05