Я хочу, чтобы звуковая колонка на компьютере тишина в течение 2 секунд, записывая данные 0 на устройство "по умолчанию", используя ALSA (Advanced Linux Sound Architecture). Ниже приведен фрагмент кода.

int val
int size = 24000;
u_char *tmp_buffer = (u_char *)malloc(size);
memset(tmp_buffer,0,size);

if ((val = snd_pcm_writei(pcm_handle, tmp_buffer, size)) == -EPIPE)
{

    snd_pcm_prepare(pcm_handle);
}
else if (val < 0)
{
    qDebug()<<"ERROR. Can't write to PCM device " << snd_strerror(val);

}
free(tmp_buffer);

С приведенным выше кодом, он отображается как «Чак Чак ..» шум, а не тишина.

Как сделать вывод молчания на динамик за 2 секунды?

1 ответ1

1

При частоте дискретизации 48000 Гц две секунды требуют 96000 кадров, поэтому это число, которое нужно дать snd_pcm_writei() .

С четырьмя байтами на кадр размер временного буфера должен быть 384000.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .