Почему размер звука после записи с использованием обработчика после задержки иногда не совпадает - PullRequest
0 голосов
/ 31 октября 2018

Я делаю простое приложение для записи звука, я хочу, чтобы все аудиофайлы имели одинаковую длительность, поэтому я следовал этой статье , используя обработчик с пост-задержкой, чтобы stopRecording автоматически активировался через 3000 мс. Вот мой текущий код для начала записи:

@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 голосов
/ 03 ноября 2018

Простой ответ: вы не получите ожидаемой точности при использовании таймеров, таких как postDelayed. Файлы, которые вы показали, отличаются по длине; разница между самым длинным (519 КБ) и самым коротким (512 КБ) составляет около 40 миллисекунд.

Почему они разные? Потому что процессор, который измеряет 3000 мс и вызывает ваш обработчик, также выполняет много другой работы, обслуживая операционную систему и другие приложения.

Кстати, учитывая частоту дискретизации 44,1 кГц и указанные размеры, я думаю, что размер выборки составляет 32 бита. Ровно 3 секунды звука будут иметь размер данных:

44100 x 4 x 3 = 529 200 байт

(игнорируя заголовок WAV, который обычно составляет всего около 44 байтов). Это 516,8 КБ.

...