我正在尝试将mp3文件转换为pcm文件并尝试播放它.我希望值为int16.我能够使用android中的MediaCodec和MediaExtractor成功转换它.我能够正常播放它(我不得不改变采样率以播放PCM),而我直接将其写为字节数组,如下所示:
override fun onOutputBufferAvailable(codec: MediaCodec, index: Int, info: MediaCodec.BufferInfo) {
Log.d(TAG, "onOutputBufferAvailable")
val buffer = mediaCodec.getOutputBuffer(index)
val b = ByteArray(info.size - info.offset)
val a = buffer.position()
buffer.get(b)
buffer.position(a)
mediaCodec.releaseOutputBuffer(index, true)
Log.i(TAG,"byte data: "+b.contentToString())
fos.write(b,0,info.size-info.offset)
}
但正如我所说,我希望它作为Int16(我的印象是这可以转换为int并保存.如果我错了请纠正我)当我将它保存为int这样的
override fun onOutputBufferAvailable(codec: MediaCodec, index: Int, info: MediaCodec.BufferInfo) {
Log.d(TAG, "onOutputBufferAvailable")
val buffer = mediaCodec.getOutputBuffer(index)
val byteArray = ByteArray(info.size - info.offset)
val bufferPosition = buffer.position()
buffer.get(byteArray)
buffer.position(bufferPosition)
mediaCodec.releaseOutputBuffer(index, true)
for (i in byteArray){
Log.i(TAG,"byte data: "+i.toInt())
fileWriter.write(i.toString()+" ")
}
}
它充满了噪音.我需要它作为int,以便我可以对音频文件进行一些操作.如果你想查看整个项目,它是在github
我想知道如何正确地将pcm文件写为int值并在android中播放.提前致谢