Обработка речи без остановки записи в MATLAB

Я сейчас обрабатываю речевые сигналы во время записи одновременно. Более конкретно:

  1. Запишите каждую речь 0.1 с повторно.

  2. Обрабатывать каждый речевой пакет в смысле FIFO (например, вызывать эту функцию process). Для обработки пакета речи длиной 0,1 с требуется около 1 с.

Ниже приводится выполненный код:

r = audiorecorder(fs, 16,1);
data{k} = getaudiodata(r);
process(data{k});

Проблема в том, что я пропускаю образец речи 1с во время process выполнение. Я хочу, чтобы запись выполнялась без остановки, и вызываю функцию process в каждой записи речи 0,1 с. Я пытаюсь использовать функцию обратного вызова, предусмотренную для audiorecorder. Проблема в том, что TimerFcn, которая является функцией, которая должна выполняться многократно во время записи, не может извлечь образец во время записи.

Любой совет?

1 ответ

Попробуйте найти что-то в матрице, которую вы используете getaudiodata()

Это должно иметь некоторую договоренность в зависимости от времени. (Это должно иметь некоторое распределение значений по времени, потому что plot() строит звуковой сигнал по оси времени)

Выполните итерацию по матрице в соответствии с этим расположением и вызовите функцию process().

Таким образом, вы можете записать звук сразу, а затем обрабатывать каждые 0,1 секунды одну за другой, повторяя итерацию.

Другие вопросы по тегам