gpt4 book ai didi

Java声音API : Recording and monitoring same input source

转载 作者:行者123 更新时间:2023-12-02 11:44:17 25 4
gpt4 key购买 nike

我正在尝试按照 this 从麦克风录制到 wav 文件例子。同时,我需要能够测试输入级别/音量,并在太低时发送警报。我已经尝试过此link中描述的内容似乎工作正常。

当尝试使用一个 TargetDataLine 同时记录和读取字节时,就会出现问题(为监视而读取的字节将被跳过以进行记录,反之亦然。

另一件事是这些过程很长(可能需要几个小时),因此应该考虑内存使用情况。

我应该如何进行这里?有什么方法可以克隆 TargetDataLine 吗?我可以在使用 AudioSystem.write() 写入时缓冲多个字节吗?有没有其他方法可以在不填充系统内存的情况下写入 .wav 文件?

谢谢!

最佳答案

如果您使用 TargetDataLine 来捕获类似于 the example given in the Java Tutorials 的音频,那么您就可以访问名为“data”的字节数组。您可以循环遍历此数组以在输出之前测试音量级别。

要进行音量测试,您必须将字节转换为某种合理的 PCM 数据。例如,如果格式是 16 位立体声小尾数,您可能需要两个字节并组装为有符号短整型或有符号规范化浮点型,然后进行测试。

<小时/>

很抱歉在发布我的“解决方案”之前没有更仔细地查看您的示例。

我建议您扩展InputStream,制作一个也执行音量测​​试的自定义版本。重写“read”方法,以便它获取从测试音量的代码返回的字节。您必须修改容量测试代码才能在每个字节的基础上工作并传递所需的字节。

当您为输出到 wav 阶段创建 AudioInputStream 时,您应该能够使用此扩展的 InputStream 作为参数。

我已经使用这种方法通过两个数据源成功保存音频:一次来自预先填充的数组,一次来自通过我编写的用于组合音频数据源的“混合器”的流音频混合。后者更像是您需要做的。不过,我还没有从麦克风源做到这一点。但据我所知,同样的方法应该有效。

关于Java声音API : Recording and monitoring same input source,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48311502/

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