嗨,我正在为我的大学建立一个实验室,我正在尝试使用Alsa软件为1循环中的中断数量发出声音。存储在Alsa缓冲区上的值大多类似于0,1,2偶尔为4或5(我计算循环之间中断的差异)。我找到了一个产生正弦波的程序,并发出连续的蜂鸣声,我想把那波变成一波中断,有人可以帮忙吗?
在第一段代码中,我试图让alsa在中断为!= 0时发出声音,或者如果中断为== 0则不发出任何声音。
int playback_callback (snd_pcm_sframes_t nframes)
{
static float t = 0;
int err;
unsigned long long ti = 0, ti1 = 0, diff = 0,secs = 0;
ti = ti1 = num_interrupts();
printf ("playback callback called with %lu frames\n", nframes);
for(int i = 0; i < BUFSIZE; ++i) {
/*num_interrupts: function to calculate interrupts on /proc/interrupts*/
ti = num_interrupts();
diff = ti-ti1;
ti1 = ti;
/*printf("diff%llu\n",diff);*/
if(diff != 0) {
buf[i] = 65535;
} else {
buf[i] = 0;
}
}
if ((err = snd_pcm_writei (playback_handle, buf, nframes)) < 0) {
fprintf (stderr, "write failed (%s)\n", snd_strerror (err));
}
return err;
}
答案 0 :(得分:0)
人耳听不到个别样本;它听到频率。
您应该生成一个正弦波(或多个),并根据中断率调整其音量和/或频率。
请注意,不能听到非常快速的变化;你应该检查每3000个样本中的中断号码。