【问题标题】:Reduce size of Recording Sound in Android in wav format以 wav 格式减小 Android 中录制声音的大小
【发布时间】:2015-03-12 02:48:02
【问题描述】:

我正在使用此代码录制 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();

}

【问题讨论】:

  • ENCODING_PCM_8BIT 不会将大小从 16 位减小到 8 位吗?如果名称是任何赠品,那应该将文件大小减半,但以质量为代价,您将不得不问自己这是否是最好的举措。
  • 我试过了,它给出了缓冲区错误
  • 在写入文件之前,您是否尝试过通过docs.oracle.com/javase/7/docs/api/java/util/zip/… 压缩数据?

标签: java android audio


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    你基本上是在问compress the file using a LOSSY format(比如MP3);这需要大量工作,您应该评估是否真的有必要。

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

    【讨论】:

    • 通道是单声道,采样率为 11khz 我还能做什么!
    • @MuhammadUmar 尝试使用较低(但仍受支持)的 sampleRate
    • @MuhammadUmar 你最后做了什么来压缩音频?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多