移植使用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.soundsun.misc软件包已在GNU GPLv2下发布,我已将它们下载到我的项目中。将其重命名javax.sound.sampledimp.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。谁能想到解决这个问题的方法?

Erik de Castro Lopo:

可以使用本机开发套件为Android编译libsndfile。一旦为Android编译了库,就应该能够使用JNI从Java访问它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我何时应该在代码中使用pandas apply()?

为什么我应该在Flutter中使用Cards?

我应该在 Flutter 中使用什么项目结构?

当我应该在Prolog中使用<-时

我应该在Android的Date中使用哪个类?

为什么我应该在获取时使用HttpClient?

什么时候应该在 Android 中使用 KeyChain?

为什么我不应该在Android中使用System.out.println()

为什么我们应该在下面的代码中使用模板包装器?

当响应数据是错误消息时,我们应该在REST回复上使用什么响应代码

我应该在我的药剂代码中使用Mix.Utils吗?

Android - 为什么我们应该在片段中使用 saveInstanceState 包而不是片段参数?

我什么时候应该在 selenium C# 中使用 DriverOptions

我应该在Meteor发布代码中使用全局“ currentUserId”变量吗?

我应该在这段代码中使用“use”关键字吗

我应该在像stl这样的代码中使用const T&而不是T &&吗

我应该在restful api中使用不同的状态代码,而不是200吗?

我应该在以下代码中使用承诺还是回调?

什么时候应该在C ++中使用“朋友”?

为什么我应该在Fortran中使用“仅使用”

我应该在熊猫中使用什么扩展名来检测 .Rout 文件?

我应该在这个查询中使用什么来替换 GROUP BY?

为什么我们不应该在Java中使用受保护的静态

我什么时候应该在TypeScript中使用“ var”,“ let”和“ const”

我们什么时候应该在 CodeIgniter 中使用核心?

我应该在Spring MVC中使用什么样的模板引擎?

我什么时候应该在N1ql中使用UNNEST与ANY ... SATISFIES?

我什么时候应该在球拍中使用“保护”功能?

为什么我不应该在PHP中使用mysql_ *函数?