Java 为什么使用后期延迟处理程序录制后的音频大小有时不一样
我正在制作一个简单的音频录制应用程序,我希望所有音频文件都具有相同的持续时间,这就是为什么我使用post DELATED handler在3000毫秒后使Java 为什么使用后期延迟处理程序录制后的音频大小有时不一样,java,android,audio,audio-recording,Java,Android,Audio,Audio Recording,我正在制作一个简单的音频录制应用程序,我希望所有音频文件都具有相同的持续时间,这就是为什么我使用post DELATED handler在3000毫秒后使stopRecording自动激活。以下是开始录制的当前代码: @Override public void onClick(View v) { switch (v.getId()) { case R.id.btnStart: { Ap
stopRecording
自动激活。以下是开始录制的当前代码:
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnStart: {
AppLog.logString("Start Recording");
startRecording();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
stopRecording();
enableButtons(false);
AppLog.logString("Stop Recording");
Toast.makeText(MainActivity.this, "File name: " + getFilename(),
Toast.LENGTH_SHORT).show();
}
}, 3000);
break;
}
}
}
所有音频文件都存储在内存中,这是我录制的所有音频文件的图片:
我的问题是:所有音频文件(sampletest1.wav-sampletest6.wav)的持续时间是否相同?即使音频文件的大小不同?为什么会发生这种情况?简单的答案是,使用postDelayed等计时器无法获得预期的精度。您显示的文件长度不同;最长(519KB)和最短(512kB)之间的差异约为40毫秒 为什么它们不同?因为测量3000毫秒并调用处理程序的处理器也在做很多其他工作,为操作系统和其他应用程序提供服务 顺便说一句,考虑到44.1 kHz的采样率和显示的大小,我猜样本大小是32位。仅3秒的音频数据大小为: 44100 x 4 x 3=529200字节
(忽略WAV头,通常只有大约44字节)。这是516.8 KB。您将无法准确录制3000毫秒。代码执行需要一些时间,而且在同一系统中总是有其他进程运行,这可能会导致您的进程将代码执行延迟几毫秒。您使用的采样率和样本大小是多少?@Ian samplerate=44100