我正在将一个小型(库文件。该代码包括以下内容:
const int channels = audioFileInfo.channels;
...
sf_readf_double( audioFile, inputBuffer, MAX_ECHO );
...
sf_writef_double( outputAudioFile, ¤tAudioBuffer[WINDOW_SIZE * channels], SEGMENTATION_LENGTH );
在 Java 中,在低级别上操作声音文件的最佳方法是什么?我说的是标准化、添加回声等。
进度报告
经过一番挖掘后我发现javax.sound.sampled http://download.oracle.com/javase/6/docs/api/javax/sound/sampled/package-summary.html,看起来它可以完成这项工作。
Edit 2仔细检查后,它不会工作(或者至少不会以任何可用的方式),因为它依赖于com.sun.sound
包裹。
Edit 3经过更多的检查和实验,com.sun.sound
and sun.misc
软件包是在 GNU GPLv2 下发布的,我已将它们下载到我的项目中。改名后javax.sound.sampled
to imp.javax.sound.sampled
,项目编译,我可以创建AudioFileFormat
对象还没有抛出任何异常。我还没有机会玩太多,但我会及时通知你。
Edit 4好吧,有些东西似乎适用于 javax.sound.sampled,而另一些则不然。例如,调用如下:
AudioInputStream stream = AudioSystem.getAudioInputStream(waveFile));
不起作用,但是我可以通过执行以下操作来解决此问题:
WaveFileReader wfr = new WaveFileReader();
AudioInputStream stream = wfr.getAudioInputStream(waveFile);
一般来说,调用诸如AudioSystem.getAudioFileTypes()
返回空列表。我可以深入研究这些软件包,发现这与提供商有关,但我不知道如何解决这个问题。得到我的stream
反对它确实正确地报告了其编码等,这是令人鼓舞的。
我目前的大问题是创建一个 Clip 对象。这需要使用 Line 对象创建,该对象通常来自 AudioSystem。有人能想办法解决这个问题吗?