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