LINUX.ORG.RU

Помощь по работе с alsa

 ,


0

1

Пытался проверить пример, но не вышло:

#include <stdio.h>
#include <stdlib.h>
#include <alsa/asoundlib.h>
      
main (int argc, char *argv[])
{
  int i;
  int err;
  short buf[128];
  snd_pcm_t *playback_handle;
  snd_pcm_hw_params_t *hw_params;
  
  if ((err = snd_pcm_open (&playback_handle, argv[1], SND_PCM_STREAM_PLAYBACK, 0)) < 0) {
    fprintf (stderr, "cannot open audio device %s (%s)\n", 
             argv[1],
             snd_strerror (err));
    exit (1);
  }
     
  if ((err = snd_pcm_hw_params_malloc (&hw_params)) < 0) {
    fprintf (stderr, "cannot allocate hardware parameter structure (%s)\n",
             snd_strerror (err));
    exit (1);
  }
   
  if ((err = snd_pcm_hw_params_any (playback_handle, hw_params)) < 0) {
    fprintf (stderr, "cannot initialize hardware parameter structure (%s)\n",
             snd_strerror (err));
    exit (1);
  }
  
  if ((err = snd_pcm_hw_params_set_access (playback_handle, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED)) < 0) {
    fprintf (stderr, "cannot set access type (%s)\n",
             snd_strerror (err));
    exit (1);
  }
  
  if ((err = snd_pcm_hw_params_set_format (playback_handle, hw_params, SND_PCM_FORMAT_S16_LE)) < 0) {
    fprintf (stderr, "cannot set sample format (%s)\n",
             snd_strerror (err));
    exit (1);
  }
  
  if ((err = snd_pcm_hw_params_set_rate_resample (playback_handle, hw_params, 44100)) < 0) {
    fprintf (stderr, "cannot set sample rate (%s)\n",
             snd_strerror (err));
    exit (1);
  }
  
  if ((err = snd_pcm_hw_params_set_channels (playback_handle, hw_params, 2)) < 0) {
    fprintf (stderr, "cannot set channel count (%s)\n",
             snd_strerror (err));
    exit (1);
  }
  
  if ((err = snd_pcm_hw_params (playback_handle, hw_params)) < 0) {
    fprintf (stderr, "cannot set parameters (%s)\n",
             snd_strerror (err));
    exit (1);
  }
  
  snd_pcm_hw_params_free (hw_params);
  
  if ((err = snd_pcm_prepare (playback_handle)) < 0) {
    fprintf (stderr, "cannot prepare audio interface for use (%s)\n",
             snd_strerror (err));
    exit (1);
  }
  
  for (i = 0; i < 10; ++i) {
    if ((err = snd_pcm_writei (playback_handle, buf, 128)) != 128) {
      fprintf (stderr, "write to audio interface failed (%s)\n",
               snd_strerror (err));
      exit (1);
    }
  }
  
  snd_pcm_close (playback_handle);
  exit (0);
}

Собираю так: g++ -lasound /tmp/test.cpp

При запуске:

./a.out 
a.out: pcm.c:2243: snd_pcm_open: Assertion `pcmp && name' failed.
Аварийный останов (core dumped)

★★★★★

Последнее исправление: deterok (всего исправлений: 1)

Ну так вы примеры то правильно копируйте:

./a.out plughw:0,0

отлично работает.

В примере же что

static char *device = "plughw:0,0"; 
err = snd_pcm_open(&handle, device, SND_PCM_STREAM_PLAYBACK, 0)

device!

juk4windows
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.