4

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

4

0 回答 0