Soundinput unter Linux



  • Hallo Leute,

    ich will ein wenig mit Soundinput unter Linux experimentieren. Ich will mit c/c++ unter linux 2.6.15 arbeiten. Meine Fragen dazu: Wie kann ich das machen? Welche libs sind nötig/empfehlenswert? Kennt ihr Literatur Bücher/Tutorials/HowTo's/etc zum Thema? Was sollte man sonst noch wissen?

    Gruß Andreas





  • Am einfachsten geht es meines Erachtens noch immer über das Open-Sound-System OSS, wenn auch nicht mit allen Möglichkeiten wie beispielsweise bei ALSA.
    Hier ein kleiner Quelltext aus "C und Linux" für ein Programm, das eine Sequenz aufnimmt und wieder abspielt:

    /*
        rec_play.c - Audio-Signal aufnehmen u. wiedergeben
    */
    
    # include <stdio.h>
    # include <unistd.h>
    # include <fcntl.h>
    # include <sys/ioctl.h>
    # include <linux/soundcard.h>
    
    # define NUM_SAMPLES 100000
    
    unsigned char buffer[NUM_SAMPLES];
    
    int main()
     {
      int fd, i, format=AFMT_U8;
      long length;
      char input[16];
    
      if ((fd = open("/dev/dsp", O_RDWR)) == -1)
       {
        perror("rec_play: Can't open device");
        return(1);
       }
    
      if (ioctl(fd, SNDCTL_DSP_SETFMT, &format) == -1)
        perror("rec_play: Can't set format");
    
      i = 0;
      if (ioctl(fd, SNDCTL_DSP_STEREO, &i) == -1)
        perror("rec_play: Can't set to mono");
    
      i = 22050;
      if (ioctl(fd, SNDCTL_DSP_SPEED, &i) == -1)
        perror("rec_play: Can't set sampling rate");
    
      printf("Press <RETURN> to start recording. ");
      fgets(input, 16, stdin);
    
      if ((length = read(fd, buffer, NUM_SAMPLES)) == -1)
       {
        perror("rec_play: Can't record audio data");
        return(1);
       }
    
      printf("done (%ld bytes).\n"
             "Press <RETURN> to start playing. ", length);
      fgets(input, 16, stdin);
    
      if (write(fd, buffer, length) == -1)
        perror("rec_play: Can't play audio data");
    
      close(fd);
      return(0);
     }
    


  • Martin G schrieb:

    Am einfachsten geht es meines Erachtens noch immer über das Open-Sound-System OSS, wenn auch nicht mit allen Möglichkeiten wie beispielsweise bei ALSA.

    [...]

    Hi,
    oss hat nicht nur weniger Möglichkeiten sondern ist auch veraltet und wird meist nur noch über irgendwelche oss emulations. Wenns was richtiges werden soll, würd ich das nicht mehr verwenden.
    Als alternative zu ALSA würd ich noch den SDL (Simple DirectMedia Layer) empfehlen. Damit ist das auch alles relativ einfach möglich und dieser Layer unterstüzt gleich mehrere Soundtreiber.

    Den jack (jack audio connection kit), den rüdiger ansprach, würd ich entweder per alsa unterstützen (also durch beachten der .asoundrc) oder nur als zusätzliche Option unterstützen(außer man braucht ihn wirklich, wie Ardour), weil das halt wirklich nur geht wenn auch der jack läuft und den hat noch längst nicht jeder installiert. Zumindest ein Backfall auf alsa oder sdl sollte da zumindestens drine sein.

    MfG
    Alexander Sulfrian


Anmelden zum Antworten