在java中录制流式音频?

Posted

技术标签:

【中文标题】在java中录制流式音频?【英文标题】:Record streaming audio in java? 【发布时间】:2011-05-20 02:11:16 【问题描述】:

我正在尝试设置一个程序来录制互联网音频流的一部分,并将其保存到一个文件(最好是 mp3 或 wav)。我到处寻找,我找不到任何体面的方法来做到这一点。我发现了两个不同的库,它们似乎可以工作(NativeBass 和 Xuggle),但它们都不支持我需要的 64 位窗口。

有谁知道使用 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 秒。有谁知道如何更精确地限制流的长度?

【问题讨论】:

【参考方案1】:

如果您确实想要 5 秒,您可以根据收到的字节数和音频流的比特率自行计算。

【讨论】:

我已经尝试过了,但在收到此评论后,我重新阅读了有关数据速率的***文章。显然我读错了文章的部分(kBps 而不是 kbps),这导致了我的困惑(因为我得到的是 66000 字节/秒而不是 8250 字节/秒)。

以上是关于在java中录制流式音频?的主要内容,如果未能解决你的问题,请参考以下文章

如何修改 Speak Here 示例代码来录制流式音频?

将音频记录从浏览器流式传输到服务器?

Flutter Web 录制音频以流式传输

从 nodejs 录制音频和流式传输到客户端

流式音频中的降噪和压缩

流式传输实时音频