fre*_*ley 5 c++ java android porting libsndfile
我正在将一个小型(<10 个类)C++ 项目移植到 Java。该项目操作声音文件,在 C++ 中使用libsndfile 来完成此操作。该代码包括以下内容:
const int channels = audioFileInfo.channels;
...
sf_readf_double( audioFile, inputBuffer, MAX_ECHO );
...
sf_writef_double( outputAudioFile, ¤tAudioBuffer[WINDOW_SIZE * channels], SEGMENTATION_LENGTH );
Run Code Online (Sandbox Code Playgroud)
在 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));
Run Code Online (Sandbox Code Playgroud)
不起作用,但是我可以通过执行以下操作来解决此问题:
WaveFileReader wfr = new WaveFileReader();
AudioInputStream stream = wfr.getAudioInputStream(waveFile);
Run Code Online (Sandbox Code Playgroud)
通常,调用诸如AudioSystem.getAudioFileTypes()
返回空列表之类的东西。我可以深入研究软件包,发现它与提供商有关,但我不知道如何解决这个问题。得到我的stream
对象后,它确实正确报告了它的编码等,这令人鼓舞。
我目前的大问题是创建一个 Clip 对象。这需要使用 Line 对象创建,该对象通常来自 AudioSystem。任何人都可以想出办法解决这个问题吗?
归档时间: |
|
查看次数: |
915 次 |
最近记录: |