Обработка речи без остановки записи в MATLAB
Я сейчас обрабатываю речевые сигналы во время записи одновременно. Более конкретно:
Запишите каждую речь 0.1 с повторно.
Обрабатывать каждый речевой пакет в смысле 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 секунды одну за другой, повторяя итерацию.