хочу данные с микрофона направить в динамик использовал пример отсюда http://equalarea.com/paul/alsa-audio.html
в консоль пишет «Неизвестная ошибка 1024» «Обрыв канала» «Неизвестная ошибка 1024»
int err;
short buf[1024];
snd_pcm_t *playback_handle;
snd_pcm_hw_params_t *hw_params;
unsigned int freq = 8000;
if ((err = snd_pcm_open (&playback_handle, "default", SND_PCM_STREAM_PLAYBACK, 0)) < 0) {
qDebug() << "cannot open audio device " << QString::fromUtf8(snd_strerror (err));
exit (1);
}
if ((err = snd_pcm_hw_params_malloc (&hw_params)) < 0) {
qDebug() << "cannot allocate hardware parameter structure " << QString::fromUtf8(snd_strerror (err));
exit (1);
}
if ((err = snd_pcm_hw_params_any (playback_handle, hw_params)) < 0) {
qDebug() << "cannot initialize hardware parameter structure " << QString::fromUtf8(snd_strerror (err));
exit (1);
}
if ((err = snd_pcm_hw_params_set_access (playback_handle, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED)) < 0) {
qDebug() << "cannot set access type " << QString::fromUtf8(snd_strerror (err));
exit (1);
}
if ((err = snd_pcm_hw_params_set_format (playback_handle, hw_params, SND_PCM_FORMAT_S8)) < 0) {
qDebug() << "cannot set sample format " << QString::fromUtf8(snd_strerror (err));
exit (1);
}
if ((err = snd_pcm_hw_params_set_rate_near (playback_handle, hw_params, &freq, 0)) < 0) {
qDebug() << "cannot set sample rate " << QString::fromUtf8(snd_strerror (err));
exit (1);
}
if ((err = snd_pcm_hw_params_set_channels (playback_handle, hw_params, 1)) < 0) {
qDebug() << "cannot set channel count " << QString::fromUtf8(snd_strerror (err));
exit (1);
}
if ((err = snd_pcm_hw_params (playback_handle, hw_params)) < 0) {
qDebug() << "cannot set parameters " << QString::fromUtf8(snd_strerror (err));
exit (1);
}
snd_pcm_hw_params_free (hw_params);
if ((err = snd_pcm_prepare (playback_handle)) < 0) {
qDebug() << "cannot prepare audio interface for use " << QString::fromUtf8(snd_strerror (err));
exit (1);
}
snd_pcm_t *capture_handle;
snd_pcm_hw_params_t *hw_params_c;
if ((err = snd_pcm_open (&capture_handle, "default", SND_PCM_STREAM_CAPTURE, 0)) < 0) {
qDebug() << "cannot open audio device " << QString::fromUtf8(snd_strerror (err));
exit (1);
}
if ((err = snd_pcm_hw_params_malloc (&hw_params_c)) < 0) {
qDebug() << "cannot allocate hardware parameter structure " << QString::fromUtf8(snd_strerror (err));
exit (1);
}
if ((err = snd_pcm_hw_params_any (capture_handle, hw_params_c)) < 0) {
qDebug() << "cannot initialize hardware parameter structure " << QString::fromUtf8(snd_strerror (err));
exit (1);
}
if ((err = snd_pcm_hw_params_set_access (capture_handle, hw_params_c, SND_PCM_ACCESS_RW_INTERLEAVED)) < 0) {
qDebug() << "cannot set access type " << QString::fromUtf8(snd_strerror (err));
exit (1);
}
if ((err = snd_pcm_hw_params_set_format (capture_handle, hw_params_c, SND_PCM_FORMAT_S8)) < 0) {
qDebug() << "cannot set sample format " << QString::fromUtf8(snd_strerror (err));
exit (1);
}
if ((err = snd_pcm_hw_params_set_rate_near (capture_handle, hw_params_c, &freq, 0)) < 0) {
qDebug() << "cannot set sample rate " << QString::fromUtf8(snd_strerror (err));
exit (1);
}
if ((err = snd_pcm_hw_params_set_channels (capture_handle, hw_params_c, 1)) < 0) {
qDebug() << "cannot set channel count " << QString::fromUtf8(snd_strerror (err));
exit (1);
}
if ((err = snd_pcm_hw_params (capture_handle, hw_params_c)) < 0) {
qDebug() << "cannot set parameters " << QString::fromUtf8(snd_strerror (err));
exit (1);
}
snd_pcm_hw_params_free (hw_params_c);
if ((err = snd_pcm_prepare (capture_handle)) < 0) {
qDebug() << "cannot prepare audio interface for use " << QString::fromUtf8(snd_strerror (err));
exit (1);
}
//===============================================================
while(1) {
snd_pcm_readi(capture_handle, buf, 1024);
err = snd_pcm_writei(playback_handle, buf, 1024);
if (err == -EPIPE) {
err = snd_pcm_prepare(playback_handle);
if (err < 0) {
qDebug() << "1 " << QString::fromUtf8(snd_strerror(err));
}
} else if (err == -ESTRPIPE) {
while ((err = snd_pcm_resume(playback_handle)) == -EAGAIN){
usleep(50);
}
if (err < 0) {
err = snd_pcm_prepare(playback_handle);
if (err < 0) {
qDebug() << "2 " << QString::fromUtf8(snd_strerror(err));
}
}
} else {
qDebug() << "3 " << QString::fromUtf8(snd_strerror(err));
}
}
snd_pcm_close (capture_handle);
snd_pcm_close (playback_handle);
exit (0);