AudioRecord 文件有点大

Posted

技术标签:

【中文标题】AudioRecord 文件有点大【英文标题】:AudioRecord file size is a little large 【发布时间】:2017-03-05 01:20:38 【问题描述】:

我正在为此苦苦挣扎,我更改了比特率以减小录制文件大小,我的应用程序正确地将音频文件发布到服务器,但我想最小化文件大小,这是我的录制代码

 private void startRecording() throws IOException 

        String state = android.os.Environment.getExternalStorageState();
        if (!state.equals(android.os.Environment.MEDIA_MOUNTED)) 
            throw new IOException("No SD mounted.  It is" + state
                    + ".");

        

        mRecorder = new MediaRecorder();
        mRecorder.setAudiosource(MediaRecorder.AudioSource.MIC);
        mRecorder.setAudioSamplingRate(44100);
        mRecorder.setAudioEncodingBitRate(44100);
        mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);


        File path = new File(Environment.getExternalStorageDirectory()
                .getPath());

        if (!path.exists() && !path.mkdirs()) 
            throw new IOException("The file directory is invalid.");
        else

            try 
                archivo = File.createTempFile("audio", ".3gp", path);
             catch (IOException e) 
            

        

        mRecorder.setOutputFile(archivo.getAbsolutePath());
        mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);


        try 
            mRecorder.prepare();
         catch (IOException e) 
            Log.e(LOG_TAG, "prepare() failed");
        

        mRecorder.start();


    

我现在 1 分钟的录音大约是 336 kb,我想 将其降低到每分钟 100 - 200 kb 左右而不会丢失 质量很好

【问题讨论】:

我挑战您找到任何编解码器(aac、mp3、flac...)的音频文件,您可以从该文件中以您要求的比特率(100 - 200 kb 每分钟)...为了获得合理的音频质量,您需要每秒钟而不是每分钟...这与移动流媒体无关,其纯粹的信息理论...每秒更多比特意味着音频曲线的锯齿状和耳朵更容易...接受增加的比特率或降低质量...我建议您尝试每个样本的 8 位深度,而不是每个样本 16 位的典型默认值,单声道 嗨@ScottStensland,我更改了值和压缩器,我以 335 kbs / 分钟的速度运行,这是合理的,而且质量仍然很好 问题是,对于一个主要使用音频作为源的应用程序,我不想在音频上每月浪费 TB 或 GB,我认为还有另一种方式@ScottStensland 【参考方案1】:

您可以尝试几件事。

1) 使用 AMR(自适应多速率)进行更高的压缩:

recorder.setAudioEncoder(mRecorder.AudioEncoder.AMR_NB);

AMR Wideband 和 AMR Narrowband 是设备用于电话呼叫的编码方法。可能没有您需要的质量。

2) 使用单声道 1 声道:

mRecorder.setAudioChannels (1)

// Sets the number of audio channels for recording. Call this method before 
// prepare().
// Usually it is either 1 (mono) or 2 (stereo). 

【讨论】:

质量是损失,不是我想要的:( 你能否添加第 (3) 项,它显示了如何使用 8 位深度而不是典型的默认每个样本 16 位的默认值 AudioFormat 类允许您设置 ENCODING_PCM_8BIT 和 ENCODING_PCM_16BIT。这可以被 AudioTrack 和 AudioRecord 使用。这可能不适用于 MediaRecorder。此外,每个样本 8 位在某些设备上可能无法正常工作。

以上是关于AudioRecord 文件有点大的主要内容,如果未能解决你的问题,请参考以下文章

以最小文件大小连续录制。 AudioRecord 或 MediaRecorder?

Android:AudioRecord 一个波形,单声道文件

Android音频处理——通过AudioRecord去保存PCM文件进行录制,播放,停止,删除功能

无法在 Android 中播放使用 AudioRecord 录制的 pcm 文件

安卓Android开发:使用AudioRecord录音将录音保存为wav文件使用AudioTrack保存录音

安卓Android开发:使用AudioRecord录音将录音保存为wav文件使用AudioTrack保存录音