estoy tratando de hacer un espectrograma en matlab,
aquí está mi código:
% Record your voice for 100 seconds.
recObj = audiorecorder;
disp('Start speaking.')
recordblocking(recObj, 100);
% Store data in double-precision array.
my= getaudiodata(recObj);
figure;
specgram(my,512);
problema es que mientras estoy hablando yo quiero el espectrograma para ser mostrado, por lo que debería estar actualizando a medida que yo hablo. ¿Cómo puedo trazar el espectrograma, mientras que el audio desde el micrófono? así que debería ser capaz de ver espectrograma en tiempo real
También probé este
% Record your voice for 100 seconds.
recObj = audiorecorder;
disp('Start speaking.')
a=0;
figure;
while a<60
recordblocking(recObj, 100);
% Store data in double-precision array.
my= getaudiodata(recObj);
specgram(my,512);
a=a+1;
end
pero sólo de mostrar el espectrograma cuando el bucle while peces (así que después de la ejecución de 60 veces)
- No soy experto en matlab, pero no sólo se necesita de un bucle alrededor de las líneas 4 a 9? Por cierto, este es etiquetado como C, pero no veo la relación.
He aquí una posible implementación. El principal problema fue que usted se olvide de llamar DRAWNOW al final de cada bucle:
Yo simplemente mostrar los componentes de frecuencia en cada iteración. Usted debe ser capaz de modificar para mostrar el espectrograma si quieres…
MATLAB es intrínsecamente un único subproceso. Sólo una cosa puede suceder en un momento. Esto hace que en tiempo real las tareas de cierta dificultad. Como usted señaló,
recordblocking
no devuelve el control a la secuencia de comandos hasta los 100 segundos. La clave está en la palabra el bloqueo de.La forma de evitar esto es con las devoluciones de llamada y sin bloqueo de funciones. El audiorecorder objeto tiene un par de métodos y propiedades que permiten este tipo de comportamiento.
La
audiorecorder
propiedades:–
StartFcn
: Establecer una función que se ejecutará al iniciar una asincronía en la grabación–
StopFcn
: La función a ser ejecutada al detener una grabación–
TimerFcn
: La función que se ejecuta cadaTimerPeriod
segundos durante una grabación.A continuación, el
registro
método comenzará la grabación y el proceso en el fondo, llamando a las funciones anteriores como se indica.Mediante la actualización periódica de sus datos en la función de devolución de llamada, usted puede actualizar su parcela. Por desgracia, esto es, del mismo modo no trivial para hacer de una manera eficiente que permite actualizaciones en vivo. Pero esto debe empezar.
La cosa más obvia que hacer es colocar el código en un bucle para mantener la actualización de la figura. Pero tenga en cuenta que Matlab no está realmente diseñado para este tipo de tarea, así que no sé cuánto éxito tendrá. Has probado a buscar en Google para el software libre que hace esto para usted? Me sorprendería si no había nada allí que no lo hizo ya.