当前位置: 首页 > 面试题库 >

用Java录制流音频?

淳于泓
2023-03-14
问题内容

我正在尝试建立一个程序来录制一部分互联网音频流,并将其保存到文件(最好是mp3或wav)。我到处都看过,找不到任何合适的方法来做到这一点。我找到了两个似乎可以工作的不同库(NativeBass和Xuggle),但我都不支持64位Windows。

有谁知道使用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秒。有人知道如何在限制流长度方面更加精确吗?


问题答案:

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



 类似资料:
  • 我正在尝试用HLS格式录制rtsp流。我需要同时录制音频和视频。使用下面的命令,可以录制一些流的视频和音频,比如来自Internet rtsp://wowzaec2demo.streamlock.net/vod/mp4:bigbuckbunny_115k.mov的测试rtsp流。至于我的IP相机,它不工作,意味着视频被录制,但没有音频输出文件。 这是我的IP相机的命令行输出,同时开始录制上面的命令

  • 我需要录制音频(我相信使用函数)并将其从nodejs服务器传输到连接的客户端浏览器。我环顾了一些例子,没有什么太明确的内容,并且采用了不同的方法。 我不能使用webrtc。它必须使用服务器向客户端发送流。但是,我可以使用(我相信这是webrtc的一部分)来录制音频并将其发送到nodejs服务器)。 是否有任何资源或示例显示这样的工作方式?

  • 问题内容: 在Java中开始录制操作时,如何检测静音?什么是PCM数据?如何在Java中计算PCM数据? 我找到了解决方案: 问题答案: 在Java中开始录制操作时,如何检测静音? 计算一组声音帧的dB或RMS值,并确定将其视为“静音”的级别。 什么是PCM数据? 数据是在脉冲编码调制格式。 如何在Java中计算PCM数据? 我不明白这个问题。但是,猜测它与标记有关,我有一些坏消息。从理论上讲,这

  • 我在这个网站上看到过类似的问题,但我的问题有点不同。我用来捕获音频的代码是这样的。我想简单地获取捕获的音频,并对其应用256点的FFT。 我意识到这个 将音频分解为“块”。 我使用的FFT也可以在这里找到。 我的问题是: 我想知道是否有一种方法可以将FFT应用于整个音频记录,而不仅仅是缓冲量。 我看到FFT的代码需要实部和虚部,如何从带有音频文件的代码中获取实部和虚部。

  • 为了方便的确认麦克风和ref的问题,或者配合算法来调试,需要抓取声音 8008 可以配置为标准的 usb 声卡,在 linux 上识别为一个 uac 设备, linux 可以通过 usb 声卡进行声音的采集和声音的播放,录制的格式是单声道, 16K , 16bit 8008 编译的固件需要支持 usb 声卡模式

  • 我正在尝试制作一个应用程序,它应该首先记录用户的声音,然后从记录的文件中计算不同的东西(例如频谱)。我无法播放录制的文件(我找不到该文件-它甚至可以录制吗?)。这是我的代码: 我知道缩进不正确,因为我把代码粘贴得很糟糕……你知道为什么这段代码不能工作吗?它给出了两个错误:“应该已经设置了字幕控制器”,但我读到我不需要介意,“QCMediaPlayer媒体播放器不存在”,我读到这意味着我的平台不支持