ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-06-26 23:12:30  阅读:330  来源: 互联网

标签:java c-2 android porting libsndfile


我正在将一个小型(< 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对象而不会抛出任何异常.我没有机会玩很多但我会告诉你更新.

编辑4好的,有些东西似乎适用于javax.sound.sampled,有些则不适用.例如,调用如:

AudioInputStream stream = AudioSystem.getAudioInputStream(waveFile));

不行,但我可以做到:

WaveFileReader wfr = new WaveFileReader();
AudioInputStream stream = wfr.getAudioInputStream(waveFile);

通常,调用AudioSystem.getAudioFileTypes()之类的东西会返回空列表.我可以深入研究包,看看它与提供商有关,但我不知道如何解决这个问题.获得我的流对象后,它会正确报告其编码等,这是令人鼓舞的.

我目前最大的问题是创建一个Clip对象.这需要使用Line对象创建,该对象通常来自AudioSystem.谁能想到解决这个问题的方法呢?

解决方法:

可以使用Native Development Kit为Android编译libsndfile.在为Android编译库之后,您应该能够使用JNI从Java访问它.

标签:java,c-2,android,porting,libsndfile
来源: https://codeday.me/bug/20190626/1298388.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有