Ver Mensaje Individual
  #1  
Antiguo 14-12-2007
gerardorom gerardorom is offline
Miembro
 
Registrado: dic 2007
Posts: 22
Reputación: 0
gerardorom Va por buen camino
¿Como puedo hacer saltos entre rutinas de botones??? (Que trabajo me esta costando...

Hola amigos, os expongo aqui mi duda con una breve explicación. Intento hacer una especie de reproductor de archivos .wav con la libreria API de windows. Uso 3 botones, 1º:PLAY: para reproducir (y grabar en un archivo de salida), 2º:PAUSA: para pausar y 3º:RESTART: para reaundar la marcha.
El caso es que cuando pulso play, no me permite pulsar los otros dos botones, hasta que no acaba la reproducción. ¿Como puedo hacer para saltar entre las rutinas asociadas a los botones, volviendo al punto donde se quedó en la reproducción? Os adjunto el codigo por si sirve de ayuda .

NOTA: Para la reproduccion se van almacenando en un bloque circular y se va reproduciendo atraves de dos buffer (1 y2) para evitar saltos en la reproducción.

BOTON PLAY (he intentado resumirlo al maximo):
Código Delphi [-]
  
 
 void __fastcall TForm1::Button1Click(TObject *Sender)
{       
         waveOutPrepareHeader(hwo,&bufferinf1,sizeof(bufferinf1));
         waveOutPrepareHeader(hwo,&bufferinf2,sizeof(bufferinf2));

         z=0;
         for(i=0;i < numiter;++i)
         {
              fread(datos,(cab.bpm/8),tamiter,fich);  
 
              if (buf1)
              {
               waveOutPrepareHeader(hwo,&bufferinf1,sizeof(bufferinf1));
                while (bufferinf1.dwFlags!=WHDR_PREPARED)
                {
                }
                  
               }
              else
              {
               waveOutPrepareHeader(hwo,&bufferinf2,sizeof(bufferinf2));
                while (bufferinf2.dwFlags!=WHDR_PREPARED)
                {
                }
              }
              
             for(j=0;j < tambuffer;++j)
             {
              cir[z]=datos[j];           
                   if(buf1)
                    {
                      buffer1[j]=datos[j];
                    }
                   else
                    {
                      buffer2[j]=datos[j];
                    }
              if (z{ z=z+1;}
              else { z=0; } ;
              };
 
             if(buf1)
               {
                 fwrite(buffer1,(cab.bpm/8),tambuffer,fich2);
                 waveOutWrite(hwo,&bufferinf1,sizeof(bufferinf1));
                  while(waveOutUnprepareHeader( hwo,&bufferinf2,sizeof(bufferinf2)) == WAVERR_STILLPLAYING)
                  {
                  }
               }
              else
               {
                   fwrite(buffer2,(cab.bpm/8),tambuffer,fich2);
                 waveOutWrite(hwo,&bufferinf2,sizeof(bufferinf2));
                  while(waveOutUnprepareHeader( hwo,&bufferinf1,sizeof(bufferinf1)) == WAVERR_STILLPLAYING)
                  {
                  }
               };

           buf1=!buf1;
         };

}

BOTON PAUSE:

Código Delphi [-]
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  waveOutPause(hwo);
}

BOTON RESTAR:
Código Delphi [-]
void __fastcall TForm1::Button3Click(TObject *Sender)
{
  waveOutRestart(hwo);
}


Muchas gracias por todo. Saludos!

Última edición por gerardorom fecha: 14-12-2007 a las 21:34:46.
Responder Con Cita