Programación General > C/C++

 Problema con sonido

(1/1)

Alfonsos1:
Miren el siguiente codigo, lo que tiene que hacer es dejar sonando un tono,

La frecuencia del tono esta determinada por la variable samples_por_ciclo, cuanto mas baja sea esta variable es mas agudo el sonido

Anda bien con valores 8, 16, 32, 64, 128 (los valores tienen q ser potencia de 2 para que suene agradable), pero si pongo un numero mas grande (como 256) no suena nada.

¿saben porque?



miren la linea 33, prueben el programa con samples_por_ciclo=128, y luego con samples_por_ciclo=256


--- Código: C++ ---#include <windows.h>#include <stdio.h>#include <mmsystem.h>#include <math.h>#define BUFFER 2048#define FREC 44100 WAVEFORMATEX WaveFormat;HWAVEOUT    HWaveOut;DWORD       WaveBufSize;WAVEHDR     WaveHeader[2]; void CALLBACK WaveOutProc(HWAVEOUT waveOut, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2){    if(uMsg==MM_WOM_DONE) waveOutWrite(HWaveOut, (WAVEHDR *)dwParam1, sizeof(WAVEHDR));} int main(int argc, char **argv){    WaveFormat.nSamplesPerSec = FREC;    WaveFormat.wBitsPerSample = 8;    WaveFormat.nChannels = 1;    WaveFormat.cbSize = 0;    WaveFormat.wFormatTag = WAVE_FORMAT_PCM;    WaveFormat.nBlockAlign = (WaveFormat.wBitsPerSample /8) * WaveFormat.nChannels;    WaveFormat.nAvgBytesPerSec = WaveFormat.nBlockAlign * WaveFormat.nSamplesPerSec;    WaveBufSize=BUFFER;        float PI=3.14159265358979323846;    unsigned char onda[BUFFER];    for(int i=0;i<BUFFER;i++)    {        int samples_por_ciclo=128;//ACA        onda[i]=int(sin( i*2*PI/(samples_por_ciclo) )*127)+127;    }    waveOutOpen(&HWaveOut, WAVE_MAPPER, &WaveFormat, (DWORD)WaveOutProc, 0, CALLBACK_FUNCTION);    WaveHeader[0].dwBufferLength=WaveBufSize;    WaveHeader[1].dwBufferLength=WaveBufSize;    WaveHeader[0].lpData=(char *)onda;    WaveHeader[1].lpData=(char *)onda;    waveOutSetVolume(HWaveOut,0x1101);    waveOutPrepareHeader(HWaveOut, &WaveHeader[0], sizeof(WAVEHDR));    waveOutPrepareHeader(HWaveOut, &WaveHeader[1], sizeof(WAVEHDR));    waveOutWrite(HWaveOut, &WaveHeader[0], sizeof(WAVEHDR));    waveOutWrite(HWaveOut, &WaveHeader[1], sizeof(WAVEHDR));    while(GetKeyState(0x31)>=0) printf("");//Esta linea detiene el hasta que se aprete la tecla "1"    waveOutUnprepareHeader(HWaveOut, &WaveHeader[1], sizeof(WAVEHDR));    waveOutUnprepareHeader(HWaveOut, &WaveHeader[0], sizeof(WAVEHDR));    waveOutReset(HWaveOut);    waveOutClose(HWaveOut);}  

Navegación

[0] Índice de Mensajes

Ir a la versión completa