为什么使用后期​​延迟处理程序录制后的音频大小有时不相同

时间:2018-10-31 06:26:03

标签: java android audio audio-recording

我正在制作一个简单的音频录制应用程序,我希望所有音频文件具有相同的持续时间,这就是为什么我使用延迟后处理程序使stopRecording在3000毫秒后自动激活后跟随this article的原因。这是我当前要开始记录的代码:

@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;
                }


            }
        }

所有音频文件都存储在内部存储器中,这是我录制的所有音频文件的图片:sample sound

我的问题是:所有音频文件(sampletest1.wav-sampletest6.wav)是否都具有相同的持续时间?即使音频文件的大小不同?为什么会这样?

1 个答案:

答案 0 :(得分:1)

简单的答案是,使用诸如postDelayed之类的计时器将无法获得预期的精度。您显示的文件长度不同。最长(519 KB)和最短(512 KB)之间的差约为40毫秒。

为什么它们不同?因为正在测量3000毫秒并正在呼叫您的处理程序的处理器也正在做很多其他工作,为操作系统和其他应用程序提供服务。

顺便说一句,考虑到44.1 kHz的采样率和所示的大小,我想样本大小为32位。恰好3秒的音频将具有以下数据大小:

44100 x 4 x 3 = 529,200字节

(忽略WAV标头,通常只有大约44个字节)。这是516.8 KB。