将 .wav 文件转换为二进制文件,然后再转换回 .wav?

Posted

技术标签:

【中文标题】将 .wav 文件转换为二进制文件,然后再转换回 .wav?【英文标题】:Convert .wav file to binary and then back to .wav? 【发布时间】:2011-06-15 13:26:21 【问题描述】:

我正在用 java 做一个项目,需要我加密一个波形文件。那么,是否有一个直接的过程将波形文件转换为二进制文件并返回?我将对二进制数据应用加密算法。

【问题讨论】:

我的意思是位.... 1 和 0 的系列 @Uday:是的,我意识到了!我的意思是,您希望该二进制文件代表什么?文件已经是一系列 1 和 0。为什么不能直接将文件读入byte[]?为什么它特别是 .wav 文件很重要? 将二进制文件读入 char 数组可能是一件非常愚蠢的事情。 @jarnbjo:是的,我的错。我的意思是byte数组... 您会发现计算机中的大多数东西已经是二进制的。 :) 【参考方案1】:

是的。

File file = new File("music.wav");
byte[] data = new byte[file.length()];
FileInputStream in = new FileInputStream(file);
in.read(data);
in.close();

//encrypt data

FileOutputStream out = new FileOutputStream(file);
out.write(data);
out.close();

当然假设在您使用数据后它仍然是一个有效的 wav 文件。

【讨论】:

无法保证 in.read(data) 会读取所有文件。 download.oracle.com/javase/6/docs/api/java/io/… 声明它将读取 最多 b.length 个字节。 是的,但这假设数组不够大,事实就是如此。 File.length() 是文件的长度。但是,如果您要小心,可以将 read 返回的值与文件的大小进行比较以确定。 @Trey - 不,它与数组的大小无关。它与流实现有关。你应该永远假设read()会填满你的数组。 谢谢!!这有效! :) 到目前为止,我一直在不必要地干预 AudioInputStream! @Uday Kanth - 是的,您应该担心 read() 没有读取完整的文件。它可能适用于小文件,可能适用于较大的文件,但不能保证。您可以循环阅读或使用commons.apache.org/io/api-1.3.2/index.html IOUtils 之类的内容。【参考方案2】:

大多数语言都有以二进制模式读写文件的实用程序。如果你碰巧在 Linux 系统上,它和字符模式是一样的。无论如何,这不是“转换”为二进制的问题,只是一种不同的读取方法。

【讨论】:

【参考方案3】:

试试Java Wav IO 库。

【讨论】:

【参考方案4】:

你可以试试这个插件:JLayer

【讨论】:

以上是关于将 .wav 文件转换为二进制文件,然后再转换回 .wav?的主要内容,如果未能解决你的问题,请参考以下文章

将 wav 文件转换为没有标头的原始二进制文件

JavaScript:需要函数将包含二进制的字符串转换为十六进制,然后再转换回二进制

PHP - 将 .wav 文件转换为 .mp3?

将字节数组转换为 Wav 文件 [重复]

怎么将8位的WAV声音文件转换为16位?

将字节数组转换为 wav 文件