Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 21

Thema: Audio Problem

  1. #1
    Registrierter Benutzer
    Registriert seit
    26.07.2002
    Ort
    Mittelfranken
    Beiträge
    150

    Audio Problem

    Hallo,

    ich möchte einen mp3 player proggen.
    Dazu möchte ich die madlib verwenden. Ich hab bereits ein gutes Beispielprogramm gefunden, allerdings ist die Ausgabe dessen irgendwie kein wav. Sondern:

    madlld.c -- A simple program decoding an mpeg audio stream to 16-bit PCM from stdin to stdout.

    Wenn ich nun das ganze nach /dev/dsp pipe kommt nur komisches rauschen.

    Was genau ist PCM und wie kann das ins Audiodevics umbiegen bzw. dass es wie ein normales wav abgespielt wird!


    Besten Dank!
    Grüße,
    mithras

  2. #2
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Ich hab auch mal was in Richtung Audio geproggt, ist allerdings schon 2 Jahre her.

    Also:
    /dev/dsp ist standardmässig auf Samples im Format 8 bit mono 1 kHz oder so eingestellt (recht schlechte Qualität)
    Was die Lib wohl liefert ist ein Bitstrom mit 16 bit stereo und 44 kHz.

    Nun musst du also /dev/dsp dazu bringen das zu akzeptieren. Bei mir ging das seinerzeit mit OSS. Heutzutage nimmst du wohl besser alsa.

    Mein Code ist etwa so:
    Code:
      //Seconds sekunden aufnehmen und im Format outputFormat in die Datei FileName ausgeben
      int audio_fd;  //Audio_Device - Handle
    
          //Initialisieren der AudioDevice (/dev/dsp)
    
          if ((audio_fd = open("/dev/dsp", O_RDONLY, 0)) == -1)
          {
            fl_alert("Error trying to open /dev/dsp");
            return;
          }
    
          int format;
          format = AFMT_S16_LE;
    
          if (ioctl(audio_fd, SNDCTL_DSP_SETFMT, &format)==-1)
          {
            fl_alert("Error - could not set audio format to AFMT_S16_LE");
            return;
          }
    
          if (format != AFMT_S16_LE)
          {
            fl_alert("Error - the requested Format (AFMT_S16_LE) is not supported by the audio device /dev/dsp");
            return;
          }
    
          int stereo = 1;           // 0=mono, 1=stereo
          if (ioctl(audio_fd, SNDCTL_DSP_STEREO, &stereo)==-1)
    
         }
    
          int stereo = 1;           // 0=mono, 1=stereo
          if (ioctl(audio_fd, SNDCTL_DSP_STEREO, &stereo)==-1)
          {
            fl_alert("Error - could not set mode to Stereo");
            return;
          }
    
          if (stereo != 1)
          {
            fl_alert("Error - device doesn't support Stereo");
            return;
          }
    
          int speed = 44100;
          if (ioctl(audio_fd, SNDCTL_DSP_SPEED, &speed)==-1)
          {
            fl_alert("Error - could not set sample rate to 44100");
            return;
          }
          if (speed != 44100)
          {
            fl_alert("Error - device doesn't support 44100 khz sample rate");
            return;
          }
    
          //Initialisierung der Audiodevice /dev/dsp fertig (16 Bit, 44100 khz, stereo)
    dann kannst du auf /dev/dsp schreiben.

    Hab ich aus irgend so ner schlauen Open Sound System Doku abgeschrieben. Afair muss man auch wegen little/big endian noch a bisserl aufpassen (steht aber dort auch drin)

    Den Link hab ich nicht mehr.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  3. #3
    Registrierter Benutzer
    Registriert seit
    25.12.1999
    Ort
    Stuttgart
    Beiträge
    259
    Hi,

    Original geschrieben von peschmae
    Den Link hab ich nicht mehr.
    Das Ding hat mich beim Ausdrucken echt Nerven gekostet

    http://www.opensound.com/pguide/index.html

    Gruß micha
    IRC: irc.euirc.net #tux

  4. #4
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Danke.

    Hast dus mal mit HTMLdoc versucht? Das geht noch recht oft recht gut zum Drucken von HTML-Seiten.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  5. #5
    Registrierter Benutzer Avatar von oracle2025
    Registriert seit
    18.03.2002
    Beiträge
    136
    Ich verwende für sowas portaudio:

    http://portaudio.com/

    Das ist recht bequem zu programmieren, finde ich.
    Niemand dringt hier durch und
    gar mit der Botschaft eines Toten.
    Du aber sitzt an Deinem Fenster und
    erträumst sie Dir, wenn der Abend kommt.

  6. #6
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Danke auch für den Link. Der kommt natürlich jetzt in mein Archiv

    Schade dass Alsa nur via das OSS-Interface funktioniert.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  7. #7
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    ALSA müsste doch auch eine API in Form einer Lib haben, oder?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  8. #8
    Registrierter Benutzer
    Registriert seit
    25.12.1999
    Ort
    Stuttgart
    Beiträge
    259
    Original geschrieben von peschmae
    Hast dus mal mit HTMLdoc versucht?
    Ich hab schon das PDF ausgedruckt - allerdings auf sehr dünnem Papier und beidseitig.
    Beim Drucken der geraden Seiten sind dann ab und zu 2 Seiten eingezogen worden, so dass sich beim Drucken der ungeraden Seiten die Seitenzahlen verschoben haben.
    Ging so weit, dass ich dann beim letzten Versuch den Drucker mit Einzelblättern gefüttert habe

    Gruß micha
    IRC: irc.euirc.net #tux

  9. #9
    Registrierter Benutzer Avatar von Trillian
    Registriert seit
    26.04.2001
    Beiträge
    180
    Original geschrieben von anda_skoa
    ALSA müsste doch auch eine API in Form einer Lib haben, oder?
    Klar.

    Beispiel:
    http://cvs.sourceforge.net/viewcvs.p...alsa.c?rev=1.7

  10. #10
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Original geschrieben von anda_skoa
    ALSA müsste doch auch eine API in Form einer Lib haben, oder?
    Natürlich. Das Beispiel ist ja schon da. Mittlerweile.

    Ich bezog mich aber auf PortAudio - das ist wohl für viele Sachen eine bessere Lösung, denn die Plattformunabhängigkeit möchte ich mir - wann immer möglich - nicht einfach so verspielen.

    Auf der ALSA-HP hats übrigens auch entsprechende Developer-Dokumentationen:
    http://www.alsa-project.org/documentation.php3#0.9doc

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  11. #11
    Registrierter Benutzer
    Registriert seit
    26.07.2002
    Ort
    Mittelfranken
    Beiträge
    150
    So hab mir das ganze jetzt nochmal angeschaut und etwas überarbeitet, immerhin kommt jetzt auch Musik aus den Lautsprechnern, aber diese wird defintiv viel zu langsam abgespielt, obwohl ich die Frequenz eingestellt habe.

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <stdio.h>
    #include <linux/soundcard.h>
    #include <errno.h>
    #include <stdlib.h>
    
    
    
    #include "hip.h"
    
    
    
    #ifdef _WIN32
    #include <io.h>
    #include <fcntl.h>
    #endif
    
    
    int main(int argc, char **argv){
      HIP_File hf;
      int eof=0;
      int current_section;
      char pcmout[8192];
    
      int speed = 44100;
      int stereo = 1;           // 0=mono, 1=stereo
      int format;
      int iFd_Audio;
      int fd;
    
      int bits = 16;
    
    
    #ifdef _WIN32
      _setmode( _fileno( stdin ), _O_BINARY );
      _setmode( _fileno( stdout ), _O_BINARY );
    #endif
    
    
      
      if ((iFd_Audio = open("/dev/dsp", O_WRONLY, 0)) == -1)
        {
            puts("Error trying to open /dev/dsp");
            return;
        }
      
      format = AFMT_S16_LE;
      if (ioctl(iFd_Audio, SNDCTL_DSP_SETFMT, &format)==-1)
        {
          puts("Error - could not set audio format to AFMT_S16_LE");
          return;
        } 
      if (format != AFMT_S16_LE)
        {
          puts("Error - the requested Format (AFMT_S16_LE) is not supported by the audio device /dev/dsp");
          return;
        }
      
      if (ioctl(iFd_Audio, SNDCTL_DSP_STEREO, &stereo)==-1)
        {
          puts("Konnte kein Stereo setzen!");
        }
      
      if (ioctl(iFd_Audio, SNDCTL_DSP_STEREO, &stereo)==-1)
        {
          puts("Error - could not set mode to Stereo");
          return;
        }
      if (stereo != 1)
        {
          puts("Error - device doesn't support Stereo");
          return;
        }
      
      if (ioctl(iFd_Audio, SNDCTL_DSP_SPEED, &speed)==-1)
        {
          puts("Error - could not set sample rate to 44100");
          return;
        }
      if (speed != 44100)
        {
          puts("Error - device doesn't support 44100 khz sample rate");
          return;
          }
      
      
    
      /*
        iFd_Audio=open("/dev/dsp",O_WRONLY); 
      if (iFd_Audio == -1)  { printf ("can not open /dev/dsp \n");  exit(0); }
      ioctl (iFd_Audio, SNDCTL_DSP_SYNC, NULL);
      ioctl (iFd_Audio, SNDCTL_DSP_SAMPLESIZE, &bits);
      ioctl (iFd_Audio, SNDCTL_DSP_STEREO, &stereo);  
      ioctl (iFd_Audio, SNDCTL_DSP_SPEED, &speed);    
    
    	
       
      */
    
    
      fd = open (argv[1],O_RDONLY);
    
    
    
    
    
    
    
    
      if(hip_open(stdin, &hf, NULL, 0) < 0) {
          fprintf(stderr,"Input does not appear to be an mpeg bitstream.\n");
          exit(1);
      }
    
      while(!eof){
        long ret=hip_read(&hf,pcmout,sizeof(pcmout),0,2,1,&current_section);
        if (ret == 0) { 
          /* EOF */
          eof=1;
        } else if (ret < 0) {
          /* error in the stream.  Not a problem, just reporting it in
             case we (the app) cares.  In this case, we don't. */
        } else {
          //fwrite(pcmout,1,ret,hp);
                printf("write: %d\n", write(iFd_Audio,pcmout,8192)); 
    
    	    
    
    	    perror("\n");
        }
      }
     
      hip_clear(&hf);
        
      fprintf(stderr,"Done.\n");
      return(0);
    }

    An was liegt das denn?
    Grüße,
    mithras

  12. #12
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Hmm,

    dazu mal zwei Fragen:

    1) Nur bei dir? (Ich kanns nicht testen, da mir "hip.h" und so fehlt)
    2) Wieviel zu langsam? Wenn die Frequenz die Ursache wäre, dann müsste das doch eigentlich ein 2^n-artiger Faktor sein (2, 4, 8 mal langsamer als "richtig")

    Hast du mal n Binary oder den Rest der Sourcen zum Rumspielen?

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  13. #13
    Registrierter Benutzer
    Registriert seit
    26.07.2002
    Ort
    Mittelfranken
    Beiträge
    150
    Grüße,
    mithras

  14. #14
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Gut. Ich dachte nur wegen der "" das sei eine von dir selber.

    [edit]
    Voilà. Er knistert und sagt bei mir andauernd
    Code:
    : Illegal seek
    write: 8192
    allerding seh ich den Fehler auch gerade nicht.
    [/edit]

    MfG Peschmä
    Geändert von peschmae (02-02-2004 um 08:28 Uhr)
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  15. #15
    Registrierter Benutzer
    Registriert seit
    26.07.2002
    Ort
    Mittelfranken
    Beiträge
    150
    jo also gleiches prob. wie bei mir und nun?
    Steh ich da!

    Ich suche nun schon seid langem eine anständige mp3 Bibliotek auf der ich meinen mp3 Player aufsetzen kann.
    Bei den bisherigen Libs (mpg123 und madlib) wurden einge Lieder nicht richtig abgespielt.

    Die Bibliotek sollte also einfach zu implementieren sein und alle mp3s abspielen (die auch Xmms abspielen kann).

    PS Was sind denn VBR (var bitrate) streams ?
    Geändert von mithras (02-02-2004 um 17:33 Uhr)
    Grüße,
    mithras

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •