【问题标题】:Android AudioRecord - Record Audio with small file sizeAndroid AudioRecord - 以小文件大小录制音频
【发布时间】:2016-09-18 06:32:55
【问题描述】:

我正在使用 AudioRecord 而不是 MediaRecorder 开发录音机应用程序。 我正在写这段代码来记录:

private void startRecord(){

        File file = new File(Environment.getExternalStorageDirectory(), "test.pcm");

        try {
            file.createNewFile();

            OutputStream outputStream = new FileOutputStream(file);
            BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
            DataOutputStream dataOutputStream = new DataOutputStream(bufferedOutputStream);

            int minBufferSize = AudioRecord.getMinBufferSize(8000,
                    AudioFormat.CHANNEL_CONFIGURATION_MONO,
                    AudioFormat.ENCODING_PCM_16BIT);

            short[] audioData = new short[minBufferSize];

            AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
                    8000,
                    AudioFormat.CHANNEL_CONFIGURATION_MONO,
                    AudioFormat.ENCODING_PCM_16BIT,
                    minBufferSize);

            audioRecord.startRecording();

            while(recording){
                int numberOfShort = audioRecord.read(audioData, 0, minBufferSize);
                for(int i = 0; i < numberOfShort; i++){
                    dataOutputStream.writeShort(audioData[i]);
                }
            }

            audioRecord.stop();
            dataOutputStream.close();

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

一切正常。但是,我的文件很大。我录制了大约 1 分钟,我的文件大小约为 1.2M。

我尝试使用此代码使用MediaRecorder

mMediaRecorder = new MediaRecorder();

mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);

mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);

mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

mMediaRecorder.setOutputFile(fileName);

mMediaRecorder.prepare();

mMediaRecorder.start();

非常棒,录制了 5 分钟,文件大小约为 500K 或更少。但是,我必须使用 AudioRecord,因为我需要逐字节地对音频应用一些任务。

当我使用AudioRecord 时,我可以在MediaRecorder 中拥有相同的文件大小吗?

非常感谢。

【问题讨论】:

    标签: android audio mediarecorder audiorecord


    【解决方案1】:

    实际上,使用 AudioRecord 类,您可以从声音源获取原始数据,而无需对您使用的字节缓冲区进行任何压缩,而 MediaRecorder 类仅提供从任何可用源录制媒体的基本功能,而无需直接访问数据缓冲区。

    我假设您应该使用 AudioRecord 来捕获音频,将您的字节到字节任务应用于 AudioRecord 缓冲区中的数据,然后使用压缩将修改后的数据从缓冲区写入文件。我记得,android API 中还没有实现音频压缩的功能,所以你应该使用第三方库(例如lame)或自己编写压缩。您可以在 MP3 中查看以下来源以获取带有 lame 的音频录制:https://github.com/yhirano/Mp3VoiceRecorderSampleForAndroid

    【讨论】:

    • 完美,感谢您的回答,这对我确定真正的问题很有帮助。我会尝试蹩脚的图书馆。如果您有手动压缩的示例,我将不胜感激。再次感谢
    • 如果您只想在您的应用程序中处理录制的声音,您可以简单地使用已经在 J​​ava (zip) 或第三方库中实现的任何压缩算法。我真的不能为原始声音提供好的解决方案,请查看此页面:Fast compression in Java
    猜你喜欢
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    相关资源
    最近更新 更多