减小 wav 格式的 Android 录音声音的大小



我正在使用此代码来记录wav文件。但是,10秒音频会创建500kb文件。如何减小尺寸。这对于 10 秒的声音来说太多了。

private static final int RECORDER_BPP = 16;
private static final String AUDIO_RECORDER_FILE_EXT_WAV = ".wav";
private static final String AUDIO_RECORDER_FOLDER = "AudioRecorder";
private static final String AUDIO_RECORDER_TEMP_FILE = "record_temp.raw";
private static final int RECORDER_SAMPLERATE = 11025;
private static final int RECORDER_CHANNELS = AudioFormat.CHANNEL_IN_STEREO;
private static final int RECORDER_AUDIO_ENCODING = AudioFormat.ENCODING_PCM_16BIT;
private AudioRecord recorder = null;
private int bufferSize = 0;
private Thread recordingThread = null;
private boolean isRecording = false;
private String mainFilename;
private String tempFilename;
private Context mContext;
/**
 * Creates a new audio recording at the given path (relative to root of SD card).
 */
public WavAudioRecorder(Activity mContext)
{
    this.mContext = mContext;
    bufferSize = AudioRecord.getMinBufferSize(4000,
            AudioFormat.CHANNEL_IN_MONO,
            AudioFormat.ENCODING_PCM_16BIT);
    tempFilename = getTempFilename();
    mainFilename = getFilename();
}
/**
 * Starts a new recording.
 */
public void start() throws IOException
{
    recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
            RECORDER_SAMPLERATE, RECORDER_CHANNELS,RECORDER_AUDIO_ENCODING, bufferSize);
    int i = recorder.getState();
    if(i==1)
        recorder.startRecording();
    isRecording = true;
    recordingThread = new Thread(new Runnable() {
        @Override
        public void run() {
            writeAudioDataToFile();
        }
    },"AudioRecorder Thread");
    recordingThread.start();
}

WAV 是一种原始格式,需要大量空间是正常的。 但是您可以更改采样率,从而生成较小的文件。

但这也会降低质量。所以我的建议是保持采样率并将其转换为压缩格式,如 MP3 以实现持久性。

另一件值得尝试的事情是用 ZIP 打包 WAV:http://docs.oracle.com/javase/7/docs/api/java/util/zip/ZipOutputStream.html

您基本上要求使用有损格式(如MP3)压缩文件; 这需要大量的工作,您应该评估是否真的有必要。

另一种选择是降低采样率,以便每个音频块的信息更少,并使用单声道而不是立体声,这会导致输出文件更小。

最新更新