Matlab - Cuenta regresiva captura de audio simultáneas

 
Vista:
sin imagen de perfil

Cuenta regresiva captura de audio simultáneas

Publicado por Jefferson (1 intervención) el 11/06/2014 01:27:09
Saludos.

Intento hacer un programa que funcione a especie de "grabadora" de audio.

El programa recibe primeramente el tiempo que debe grabar, graba la señal durante ese tiempo, y luego la muestra correctamente.

El problema que tengo, es que ahora necesito añadir a la interfaz la cuenta regresiva del tiempo para finalizar la grabación (en segundos, preferiblemente). Esto, con la intención de informar al usuario cuanto tiempo resta por esperar antes de que su tiempo de grabación termine y se muestre el audio grabado.

He intentado de varias maneras, pero cuando ejecuto el segmento de mi código encargado de mostrar en pantalla el tiempo restante, (o una función que realice lo mismo), éste efectivamente lo hace, pero la grabación de audio comienza luego de que el temporizador llegue a cero segundos.

¿Existe alguna manera de que se ejecuten 2 líneas de código simultáneamente?, ¿O hay alguna manera de lograr ese propósito? (de lo que se trata el tema, de saber como puedo llevar el registro de audio, y la cuenta regresiva simultáneamente, sin tener que esperar el uno por el otro).

Este es el código que tengo por ahora para el contador, y salvo al hecho planteado, funciona correctamente

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function cuenta_regresiva = cuenta_regresiva(time)
%ingresa un numero de segundos, y redibuja constantemente la cuenta
%regresiva en la pantalla correspondiente
 
   %ejecutar cuenta regresiva
  %time es el tiempo en segundos que se ingresa al programa
    tinicial=tic; % almecena el tiempo inicial
        while time >1
            if (abs(toc(tinicial)-1))<0.01 % si ha pasado un segundo
                tinicial=tic; % comienza a contar otra vez un segundo
                time=time-1; %reduce el valor del tiempo cada un segundo
                set(handles.contador_reg, 'String', time'); % muestra en el contador
            end
        end
   end

Igualmente les dejo el código que se debe ejecutar al mismo tiempo, el que capta las señales de audio.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
%Graba desde la tarjeta de sonido, para obtener las senales y los
%espectros, segundosMuestreo es el tiempo de grabación, y sampleRate la frecuencia de muestreo.
function [senales, espectros] = captar_senales(sampleRate, ...
    segundosMuestreo)
    ai = crear_objeto_adquisicion(sampleRate, segundosMuestreo);
    %Iniciamos adquisicion.
    start(ai);
    %crear data:
    wait(ai, segundosMuestreo+1);
    [senales, espectros] = crear_data(ai, correccion_desfase);
    %liberar recursos asociados al objeto de adquisicion:
    delete(ai);
 
%Crea el objeto de adquisicion y lo configura para ser usado en la
%adquisicion.
function [ai] = crear_objeto_adquisicion(sampleRate, segundosMuestreo)
    %Creamos el objeto para recibir data de la entrada.
    ai = analoginput('winsound');
    %Abrimos los 2 canales para recibir las 2 senales.
    addchannel(ai, 1:2);
    %Configuramos la frecuencia de muestreo y el num.
    %de muestras de la adquisicion de datos:
    set(ai,'SampleRate', sampleRate);%10000
    set(ai,'SamplesPerTrigger', sampleRate * segundosMuestreo);

Espero puedan ayudarme, y muchísimas gracias de antemano.

Posdata: he intentado eliminando la sentencia "wait" del código de captura, pero sigo teniendo el mismo problema.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder