Преобразование MP3 в PCM и воспроизведение в Android - PullRequest
0 голосов
/ 25 мая 2018

Я пытаюсь конвертировать mp3 файл в pcm файл и пытаюсь его воспроизвести.Я хочу значения как int16.Мне удалось успешно конвертировать его с помощью MediaCodec и MediaExtractor в Android.И я смог воспроизвести его в обычном режиме (мне пришлось изменить частоту дискретизации, чтобы воспроизвести 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.Заранее спасибо

...