6

我需要将代表系列笔记的文本字符串转换为 wav 文件,并且想知道执行此操作的过程是什么?我不需要确切的代码,只需要我需要采取的步骤。我的文本文件看起来像这样:

c 1
d 2
e 1

因此,该文件将成为一个 wav 文件,播放音符“c”(频率 16.35Hz)一秒钟,然后播放“b”(18.35Hz)2 秒钟,依此类推。此文本只是一个示例 - 实际文本将包含更多信息,但我只想从简单的开始,一旦我完成了这个,我将实施更多信息以提高质量。

我不反对使用已经创建的库 - 但找不到免费或开源的库。

我能找到的最接近的已经回答的问题是Create an mp3 file from scratch C#。我为 java 找到的所有内容都在谈论播放 wav 或其他音频文件,而不是像我需要的那样从头开始创建它们。

任何帮助或方向都会很棒。提前致谢!

4

3 回答 3

3

使用Java SE MIDI 包。播放你的歌曲是为了什么,你真的不想重新发明那个功能。

这并不简单,但它很有效,并且可以将您与硬件差异隔离开来。Synthesizer 接口对这项任务特别重要。

于 2015-07-04T05:17:28.823 回答
1

WAV 文件实际上很容易生成,并且有一些库可以做到这一点

从那里,您只需将文件读入音符-持续时间对列表,将音符转换为频率,然后为每个条目写入波形。您可以获得带有循环的波形并调用Math.sin().

也就是说,你真的想要 WAV 而不是 MIDI。

于 2015-07-04T05:41:03.303 回答
1

查看 Java 教程音频跟踪。你需要的大部分东西都在那里。

可以使用正弦函数生成音调音频值。您将以非常小的增量迭代函数(例如,每秒 44100 帧)。每个值都必须转换成一对字节来完成 16 位编码,然后存储在一个字节数组中。(有处理转换的stackoverflow线程。)

Java 具有您需要的流和格式,允许您通过 wav 格式播放 PCM 字节数据,本教程有一个页面/段落介绍如何保存 wav 文件。好处是您不必担心 wav 标头或任何其他细节。您只需在格式对象中指定所需的参数并提供原始 PCM 字节。

但是,该教程并不容易阅读,尤其是如果您不熟悉此教程。

于 2015-07-04T07:11:23.510 回答