我正在尝试将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中播放。提前致谢