Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Sonido molesto, doble buffer

Estas en el tema de Sonido molesto, doble buffer en el foro de C/C++ en Foros del Web. Lo que debe hacer el siguiente codigo es reproducir un sonido constante, pero cada un segundo aprox, hay un molesto ruido que no se a ...
  #1 (permalink)  
Antiguo 14/05/2011, 10:35
 
Fecha de Ingreso: septiembre-2010
Mensajes: 137
Antigüedad: 14 años, 3 meses
Puntos: 0
Sonido molesto, doble buffer

Lo que debe hacer el siguiente codigo es reproducir un sonido constante, pero cada un segundo aprox, hay un molesto ruido que no se a que se debe.

Como quito ese ruido?

como verán quiero hacer esto con doble buffer

Código C++:
Ver original
  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <mmsystem.h>
  4. #include <math.h>
  5.  
  6. WAVEFORMATEX WaveFormat;
  7. HWAVEOUT    HWaveOut;
  8. DWORD       WaveBufSize;
  9. WAVEHDR     WaveHeader[2];
  10. unsigned char onda[1024];
  11.  
  12. void CALLBACK WaveOutProc(HWAVEOUT waveOut, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2)
  13. {
  14.     if(uMsg==MM_WOM_DONE) waveOutWrite(HWaveOut, (WAVEHDR *)dwParam1, sizeof(WAVEHDR));
  15. }
  16.  
  17. int main(int argc, char **argv)
  18. {
  19.     //Creo la onda
  20.     float PI=3.14159265358979323846;
  21.     for(int i=0;i<1024;i++) onda[i]=int(sin(i*2*PI/16.0)*128)+127;
  22.    
  23.     //Establesco los parametros de sonido
  24.     WaveFormat.nSamplesPerSec = 26000;
  25.     WaveFormat.wBitsPerSample = 8;
  26.     WaveFormat.nChannels = 1;
  27.     WaveFormat.cbSize = 0;
  28.     WaveFormat.wFormatTag = WAVE_FORMAT_PCM;
  29.     WaveFormat.nBlockAlign = (WaveFormat.wBitsPerSample /8) * WaveFormat.nChannels;
  30.     WaveFormat.nAvgBytesPerSec = WaveFormat.nBlockAlign * WaveFormat.nSamplesPerSec;
  31.     //Pongo el driver a sonar
  32.     waveOutOpen(&HWaveOut, WAVE_MAPPER, &WaveFormat, (DWORD)WaveOutProc, 0, CALLBACK_FUNCTION);
  33.     WaveBufSize=1024;
  34.     WaveHeader[0].lpData=(char *)onda;
  35.     WaveHeader[1].lpData=(char *)onda;
  36.     WaveHeader[0].dwBufferLength=WaveBufSize;
  37.     WaveHeader[1].dwBufferLength=WaveBufSize;
  38.     waveOutPrepareHeader(HWaveOut, &WaveHeader[0], sizeof(WAVEHDR));
  39.     waveOutPrepareHeader(HWaveOut, &WaveHeader[1], sizeof(WAVEHDR));
  40.     waveOutWrite(HWaveOut, &WaveHeader[0], sizeof(WAVEHDR));
  41.     waveOutWrite(HWaveOut, &WaveHeader[1], sizeof(WAVEHDR));
  42.     while(GetKeyState(0x31)>=0) printf("");//Esta linea solo detiene el programa para que no se cierre
  43.     //Finalizo
  44.     waveOutReset(HWaveOut);
  45.     waveOutUnprepareHeader(HWaveOut, &WaveHeader[1], sizeof(WAVEHDR));
  46.     waveOutUnprepareHeader(HWaveOut, &WaveHeader[0], sizeof(WAVEHDR));
  47.     waveOutClose(HWaveOut);
  48. }

Etiquetas: buffer, doble, molesto, sonido
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:48.