大佬教程收集整理的这篇文章主要介绍了android – 解码音频文件并重新编码为所需的PCM格式:44,100 kHz,2个通道,16位,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
因为我似乎无法指定MediaCodec类的输出格式.所以我决定实例化另@L_753_5@mediaCodec对象,将原始数据重新编码为我想要的格式.根据supported media formats AndroiD列表支持自Android 4.1以来编码到PCM / Wave.但是我无法创建编码为PCM / Wave的MediaCodec对象.我尝试将各种MIME类型传递给MediaCodec.createEncoderByType(typE);但我总是以IOException失败:
java.io.IOException: Failed to allocate component instance at android.media.MediaCodec.native_setup(Native Method) at android.media.MediaCodec.<init>(MediaCodec.java:210) at android.media.MediaCodec.createEncoderByType(MediaCodec.java:194) [..]
首先,设置一个Android NDK项目(使用Eclipse:右键单击项目,Android工具 – >添加本机支持…).然后,在创建的Android.mk文件中,至少需要链接到OpenSL库:
LOCAL_LDLIBS += -lOpenSLES
如果您还不熟悉NDK项目,那么旧的互联网上会有很多教程,例如here和here.
一旦你有一个NDK项目工作,总的目标是设置一个音频播放器作为PCM的解码器.实际上有一个example in the NDK samples正是如此.它比你制作一个最小功能的工具要复杂一点,但它应该让你前进.有一个非常容易理解的描述正在发生的事情at this link(搜索“解码音频到PCM”).我在评论中为您提供了相关OpenSL spec的链接,但又有了.指定数据接收器时需要使用的SLDataFormat_PCM结构如下所示:
SLDataFormat_PCM pcm = { SL_DATAFORMAT_PCM,2,// numChAnnels SL_SAMPLINGRATE_44_1,// samplesPerSec SL_PCMSAMPLEFORMAT_FIXED_16,// bitsPerSample SL_PCMSAMPLEFORMAT_FIXED_16,// containerSize SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT,// chAnnelMask SL_BYTEORDER_LITTLEENDIAN // endianness };
按照示例和描述性指南,您将使用Android简单缓冲区队列数据定位器和上述数据格式定义SLDataSink.然后,播放器应为您提供一系列包含正确格式数据的缓冲区.然后,您可以将该数据传递回Java,或者(更好地)从本机代码传输数据.
以上是大佬教程为你收集整理的android – 解码音频文件并重新编码为所需的PCM格式:44,100 kHz,2个通道,16位全部内容,希望文章能够帮你解决android – 解码音频文件并重新编码为所需的PCM格式:44,100 kHz,2个通道,16位所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。