首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用流将JavaSound写入音频文件

使用流将JavaSound写入音频文件
EN

Stack Overflow用户
提问于 2008-11-08 13:29:39
回答 3查看 7.4K关注 0票数 2

我正在尝试使用JavaSound接口创建一个音频过滤器来读写音频文件。目前我的代码结构如下:

代码语言:javascript
代码运行次数:0
运行
复制
        ByteArrayOutputStream b_out = new ByteArrayOutputStream();

        // Read a frame from the file.
        while (audioInputStream.read(audioBytes) != -1) {   
            //Do stuff here....
            b_out.write(outputvalue);
        }   

        // Hook output stream to output file
        ByteArrayInputStream b_in   = new ByteArrayInputStream(b_out.toByteArray());
        AudioInputStream     ais    = new AudioInputStream(b_in, format, length);
        AudioSystem.write(ais, inFileFormat.getType(), outputFile);

这将以流的形式读取输入文件,对其进行处理并将其写入bytearrayoutputstream,但它会等待整个文件处理完毕后再写入磁盘。理想情况下,我希望它在处理每个样本时将其写入磁盘。我尝试了几种流构造的组合,但由于AudioSystem.write()接受输入流,因此找不到这样做的方法。有什么想法吗?

EN

回答 3

Stack Overflow用户

发布于 2008-12-26 21:01:25

kasperjj的答案是正确的。您可能正在处理WAV文件。查看this以了解wave文件的布局。请注意,整个WAV文件的大小都编码在其标头中。

我不知道这是否适用于您的情况,但是要像您所描述的那样处理WAV样本,您可以使用“常规的”非音频Java输出流。例如,您可以使用FileOutputStream将它们写入临时文件,在处理之后,您可以将该临时文件转换为有效的WAV文件。

票数 2
EN

Stack Overflow用户

发布于 2008-11-08 15:07:41

一些音频格式需要在其报头中描述流的长度(或块的数量)的元数据,因此在整个数据集出现之前不可能开始写入数据。为了让Java声音API使用相同的API处理所有格式,我怀疑他们必须故意施加这种限制。

然而,有许多音频格式可以很容易地流传输。它们中的许多都有针对java的开放的库实现,所以如果你愿意添加一个外部库,这应该不是很难做到的。

票数 1
EN

Stack Overflow用户

发布于 2016-08-28 18:04:25

如果重新实现AudioSystem.write方法,就有可能解决这个问题。它不能与流和WAVE格式一起工作。你应该从AudioInputStream读取数据,将其缓存到字节数组中,处理该数组并记录到wave文件中。我建议您检查示例中的类:How to record audio to byte array

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/274718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档