Tag: libsndfile

在移植使用libsndfile编写的C ++代码时,我应该在Android中使用什么?

我正在将一个小的(<10类)C ++项目移植到Java。 该项目操纵声音文件,在C ++中使用libsndfile执行此操作。 代码包括以下内容: const int channels = audioFileInfo.channels; … sf_readf_double( audioFile, inputBuffer, MAX_ECHO ); … sf_writef_double( outputAudioFile, &currentAudioBuffer[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对象而不会抛出任何exception。 我没有机会玩很多但我会告诉你更新。 编辑4好的,有些东西似乎适用于javax.sound.sampled,有些则不适用。 例如,调用如: AudioInputStream stream = AudioSystem.getAudioInputStream(waveFile)); 不行,但是我可以通过这样做来解决这个问题: WaveFileReader wfr = new WaveFileReader(); AudioInputStream stream = wfr.getAudioInputStream(waveFile); 通常,调用AudioSystem.getAudioFileTypes()类的东西会返回空列表。 我可以深入研究这些软件包,看看它与提供商有什么关系,但我不知道如何解决这个问题。 获得我的stream对象后,它会正确报告其编码等,这是令人鼓舞的。 […]