2015-01-28 2 views
0

Я пытался создать звуковой сигнал с использованием ALSA. 2 звуковых сигнала должны быть сгенерированы, второй - после задержки 1 секунды. Мой код выглядит следующим образом.snd_pcm_writei не работает после задержки

if ((err = snd_pcm_prepare (playback_handle)) < 0) { 
    printf("cannot prepare audio interface for use \n"); 
    return -1; 
} 


for (i = 0; i < TABLE_SIZE; i ++){ 
    samples[i] = 100*sin(2.0*pi*f*(i/44100.0)); 
    if ((err = snd_pcm_writei (playback_handle, &samples[i], 4)) != 4) { 
     printf("write to audio interface failed \n"); 
     return -1; 
    } 
} 

//snd_pcm_drain(playback_handle); 

printf("ending beep !!! \n"); 
sleep(1); 

if ((err = snd_pcm_prepare (playback_handle)) < 0) { 
    printf("cannot prepare audio interface for use \n"); 
    return -1; 
} 
for (i = 0; i < TABLE_SIZE; i ++){ 
    samples[i] = 100*sin(2.0*pi*f*(i/44100.0)); 
    if ((err = snd_pcm_writei (playback_handle, &samples[i], 4)) != 4) { 
     printf("write to audio interface failed \n"); 
     return -1; 
    } 
} 

Здесь звучит первый звуковой сигнал, но второй звуковой сигнал не в порядке. Может ли кто-нибудь помочь мне с этой проблемой.

+0

Что происходит после кода, который вы указали? –

+0

После показанного фрагмента кода я закрываю play_handle. –

ответ

0

snd_pcm_write*() просто записывает образцы в буфер, но возвращает сразу, когда все образцы находятся в буфере.

Чтобы дождаться воспроизведения всех отсчетов в буфере, вызовите snd_pcm_drain().

+0

Спасибо. Вопрос был решен. Проблема заключалась в установке параметров hw. –

Смежные вопросы