0

我目前有一个String包含 1 和 0 的。我想用这个字符串制作一个音频文件,最好是使用 Java 的 .WAV 格式。我该怎么做?是否有任何 API 可以写入字节来制作 .WAV ?任何教程/博客?

提前致谢 !干杯!

4

2 回答 2

1

我认为您最好的选择是查看TargetDataLine接口。我假设您已经能够将字符串转换为 byte[] 数组。这个字节数组可以被视为原始音频数据的等价物,但我不知道它是否听起来像任何有趣的东西。使用 .wav 格式,您可以选择使用 16 位编码(每个样本两个字节)或 8 位,我想,这取决于您的字符大小。

但是考虑到每秒 44100 个样本是最常见的速率之一,我要指出,如果每个样本都是一个字母,这将需要大量的文本并在很短的时间内完成!

TargetDataLine 中的“关键”函数是该数组的索引,并且重复调用利用该索引作为 read() 方法的 read() 方法。read() 方法应该在每次调用时返回一个缓冲区的字节数。

您还需要实现的方法之一是 getFormat()。我在一个简单的“ Theremin ”合成器中使用以下代码,将字节从浮点数表(使用大约 1000 个浮点数的“波表”进行声波的单次迭代)输出到立体声、16 位、44100 fps,little-endian .wav 格式到 SourceDataLine 进行播放。

@Override
public AudioFormat getFormat() 
{
    AudioFormat af = new AudioFormat(
        AudioFormat.Encoding.PCM_SIGNED, 
        44100, 16, 2, 4, 44100, false);
    return af;
}

您可以从 Java 教程中了解更多信息。我会特别看一下捕获音频教程中的“设置 TargetDataLine”和“从 TargetDataLine 读取”部分。

而且,也许在讨论声音数据性质的声音教程的一开始就非常值得您花时间。

于 2011-08-20T04:11:10.730 回答
1

是 Java 第三方 Sound API,它有许多对您有用的示例。还有 Sun Java API,您可以在这里探索。

这是关于 java 声音 API的堆栈问题。

于 2011-08-09T10:46:38.850 回答