gpt4 book ai didi

java - 使用Java中的声音计将麦克风中的声音录制到文件

转载 作者:行者123 更新时间:2023-12-02 04:14:05 26 4
gpt4 key购买 nike

我正在尝试从麦克风录制到文件,同时对声级计的音频输入流进行采样。我无法弄清楚如何在缓冲样本进行计量时将流/样本保存到文件中。以下是一些代码片段:

    format = new AudioFormat(11025, 16, 1, true, true);
DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
TargetDataLine line = (TargetDataLine) AudioSystem.getLine(info);
line.open(format);
line.start(); // start capturing
in = new AudioInputStream(line);

然后我启动一个线程来捕获样本:

                int bytesRead = in.read(buffer, readPoint, buffer.length - readPoint);
if (bytesRead == -1) {
notYetEOF = false;
break;
}

int leftover = bytesRead % frameSize;
calculateRMSLevel(buffer, readPoint, leftover);
...

这就是我被困住的地方。我知道我不能只使用:

                AudioSystem.write(in, fileType, file);

因为它当然会捕获到文件,但这永远不会回来,因为麦克风流没有关闭。我尝试了各种方法尝试将 byte[] 数据更改为 AudioInputStream 但没有成功。

那么,如何捕获采样数据,同时同步(或更好地异步)保存到从麦克风输入的 wav 文件?

最佳答案

您最好的选择可能是简单地将原始音频数据转储到 tempFile 中,完成录音后,将其转换为波形,如下所示:

final AudioInputStream in = new AudioInputStream(
new FileInputStream(tempFile),
format,
tempFile.length()/format.getFrameSize()
);
AudioSystem.write(in, AudioFileFormat.Type.WAVE, file);
in.close();

wave format规定了其 block 中的某些大小信息,这些信息实际上只能在所有数据到达之后写入。这使得从流中连续写入有点困难。它根本不是为了这样做的。

关于java - 使用Java中的声音计将麦克风中的声音录制到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33506570/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com