【发布时间】: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/… 压缩数据?