将MP3转换为PCM并在Android中播放

时间:2018-05-25 07:35:48

标签: android pcm mediaextractor format-conversion android-mediacodec

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

0 个答案:

没有答案