【发布时间】:2011-05-02 03:03:08
【问题描述】:
我正在将一个小型(libsndfile 进行此操作。该代码包括以下内容:
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,看起来它可能会完成这项工作。
编辑 2 仔细观察,它不起作用(或至少不能以任何可用的方式),因为它依赖于 com.sun.sound 包。
编辑 3 经过进一步检查和实验,com.sun.sound 和 sun.misc 软件包是在 GNU GPLv2 下发布的,我已将它们下载到我的项目中。将javax.sound.sampled 重命名为imp.javax.sound.sampled,项目编译,我可以创建AudioFileFormat 对象而不会引发任何异常。我还没有机会玩太多,但我会及时通知你。
编辑 4 好的,有些东西似乎适用于 javax.sound.sampled,有些则不能。例如,调用如:
AudioInputStream stream = AudioSystem.getAudioInputStream(waveFile));
不工作,但是我可以通过这样做来解决这个问题:
WaveFileReader wfr = new WaveFileReader();
AudioInputStream stream = wfr.getAudioInputStream(waveFile);
通常,对 AudioSystem.getAudioFileTypes() 之类的调用会返回空列表。我可以深入研究这些软件包,看看它与提供商有关,但我不知道如何解决这个问题。得到我的stream 对象后,它确实正确地报告了它的编码等,这令人鼓舞。
目前我最大的问题是创建一个 Clip 对象。这需要使用 Line 对象创建,该对象通常来自 AudioSystem。谁能想到解决办法?
【问题讨论】:
-
我找到了the micdroid code on github,它看起来大约是我需要的一半,将做更多的搜索以寻找类似的开源应用程序......
标签: java c++ android porting libsndfile