LINUX.ORG.RU

Сообщения GhostII

 

Воспроизвести звук заданной частоты

Форум — Development

Возникла необходимость из программы воспроизводить звуки заданной частоты. Использую примерно такой код:

 
int fd = open("/dev/dsp",O_WRONLY,0);
ioctl(fd, SNDCTL_DSP_RESET, NULL);
ioctl(fd, SNDCTL_DSP_NONBLOCK, NULL);
int stereo = 0;
ioctl(fd, SNDCTL_DSP_STEREO, &stereo);
int rate = 22050;
ioctl(fd, SNDCTL_DSP_SPEED, &rate);
int nchans = 1;
ioctl(fd, SNDCTL_DSP_CHANNELS, &nchans);
int format = AFMT_U8;
ioctl(fd, SNDCTL_DSP_SETFMT, &format);

DWORD numSamples = rate;
unsigned char *samples = new unsigned char[numSamples];
for(DWORD i=0; i<numSamples; i++)
  samples[i] = BYTE(128+127*sin(2*M_PI*i*1000/double(rate)));

int res;
res = write(fd, samples, numSamples);
//Воспроизведение второй раз - если без паузы, то щелчков не будет
res = write(fd, samples, numSamples);
Так вот, в результате в начале и конце воспроизведения слышны сильные щелчки. Если выполнить процедуру записи 2 раза подряд, то шелчков между ними не будет. Но если сделать хотя бы небольшую паузу, будут щелчки.

Как можно исправить? Чего не хватает?

GhostII
()

RSS подписка на новые темы