Sound in C Programm



  • Bis jetzt nutzen wir noch kein SDL.
    Werden heut und morgen mal damit rumprobieren.
    Aber schonmal vielen Dank für die schnelle Hilfe! 👍



  • Sound in "C" unter Linux ist auch hier beschrieben. 😉

    Martin



  • Yo dieses Thema würd mich auch mal interessieren.
    Doch den sound, denn brauch ich eher für kleine tools und nicht für spiele.
    Gibts da keine .lib .h die bestandteil der "Linux API" sind?.



  • Nein gibt es nicht. Mann kann es entweder so machen, dass man ALSA/OSS direkt ansteuert, was ich aber nicht empfehle. Ich hasse Programme (Beispiel: Enemy-Territory) welche die Soundkarte direkt angrabschen (ueber ALSA/OSS versteht sich) und so allen anderen Anwendungen den Zugriff erlauben. Dadurch bekommt man dann nur den Sound des jeweiligen Programms zu hoeren, aber nicht den von anderen. Eine bessere Methode waere, etwas wie ESD zu nutzen. Nur muesste man sich dann entscheiden, was man nimmt. Arts oder ESD. ESD wird vorwiegend von Enlightenment und Gnome genutzt, Arts von KDE. ESD ermoeglicht es, zwei sounds gleichzeitig laufen zu lassen - es mixt on-the-fly. Ansonsten gaebe es noch eine hoehere Schicht: GStreamer. Dies ist ein Gnome Framework welches imho ziemlich gut aufgebaut ist und einen guten Gedanken verfolgt. Schaut euch die Sachen einfach mal an.



  • SDL kann doch ohnehin mit verschiedenen Output-Plugins umgehen, oder?
    Außerdem mixt ALSA dank dmix auch schon nativ; wenn ich erst den gstreamer installieren und konfigurieren muss, um Soundausgabe zu haben, ist das für mich ein echtes Ausschlusskriterium. 👎



  • Hat mit SDL-Mixer super geklappt!
    Nochmals vielen vielen Dank für die Hilfe an alle!



  • Hallo, hier bin ich nochmal.
    Hat sich doch ein Problem eingestellt.
    Und zwar hab ich nur um die SDL mal zu testen ein kleines bisschen gecodet und praktisch einen sehr sehr sehr einfachen Media Player gemacht.
    Wie gesagt, nachdem ich die SDL und die SDL_Mixer fachgerecht installiert usw. habe, hab ich das Prog mal compiliert. Siehe da es läuft wunderbar. ABER nur bis ich den Rechner einmal herunterfahre, weil dann läuft exakt das selbe Programm nicht mehr so wie es sollte. D.h. es geht noch schön ins Menu rein, lässt mich auch ein Lied auswählen und tut so als würde es, es öffnen. Nur fehlt leider vom Sound jede Spur.
    Was könnte da schief gegangen sein? Warum funzt das nicht mehr sobald ich den Rechner einmal neustarte. Die Files lassen sich jedoch zu jeder Zeit über Amorok (oder wie das Dingens heißt) abspielen und geben ihren Klang zum besten. Also auch dann noch wenn das Prog nichts mehr von sich gibt.
    Ich stell mal den Code hier rein, vielleicht kann mir ja einer sagen wo es hakt:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <SDL_mixer.h>
    #include <SDL.h>
    
    int main()
    {
      int iauswahl=0;
      printf ("\n");
      printf ("   *********************\n");
      printf ("   *                   *\n");
      printf ("   *    Die Jukebox    *\n");
      printf ("   *                   *\n");
      printf ("   *********************\n\n");
      printf (" Welches Musikstück möchten sie hören?\n\n\n");
      printf (" (1) Sample1\n");
      printf (" (2) Sample2\n");
      printf (" (3) Sample3\n");
      printf (" (4) Sample4\n\n");
      printf (" (5) Musik anhalten\n");
      printf (" (6) Musik wiederaufnehmen\n");
      printf (" (7) Musik leise beenden\n\n");
      printf (" (0) ENDE\n\n\n");
    
    do
    {
      printf ("Auswahl: ");
      scanf ("%d", &iauswahl);
    
      SDL_Init(SDL_INIT_AUDIO);
    
      Mix_Music *mm;
    
      switch (iauswahl) 
      {
    
         case 0:
    		iauswahl=0;
                printf ("!!!ENDE!!!\n\n");
    	      getchar();
    	      break;	
    
         case 1:
    	      Mix_OpenAudio(22050,MIX_DEFAULT_FORMAT,2,1024);
    	      mm = Mix_LoadMUS("Sample1.mp3");
    	      Mix_PlayMusic(mm,-1);
    	      break;
    
         case 2:
               Mix_OpenAudio(22050,MIX_DEFAULT_FORMAT,2,1024);
    	      mm = Mix_LoadMUS("Sample2.mp3");
    	      Mix_PlayMusic(mm,-1);
               break;
    
         case 3:
               Mix_OpenAudio(22050,MIX_DEFAULT_FORMAT,2,1024);
    	      mm = Mix_LoadMUS("Sample3.MP3");
               Mix_FadeInMusic(mm, -1, 300);
    	      break;
    
         case 4:
                Mix_OpenAudio(22050,MIX_DEFAULT_FORMAT,2,1024);
                mm = Mix_LoadMUS("Sample4.mp3");
                Mix_FadeInMusic(mm, -1, 300);
                break;
    
         case 5:
               Mix_PauseMusic();
    	      break;
    
         case 6:
               Mix_ResumeMusic();
    	      break;
    
         case 7: 
    	      Mix_FadeOutMusic(3000);
    	      break;
    
         default:
                printf ("!!!Falsche Eingabe!!!\n\n");
    	      getchar();
    	      break;
    
      }
    
    }while (iauswahl!=0);
    
    SDL_Quit();
    
      getchar();
      return 0;
    }
    

    Danke für jede Hilfe!



  • Kontrolliere mal mit dem alsamixer die Pegel der einzelnen Kanäle.



  • Jo, also weiß ja nicht wie die Kanäle aussehen müssen damit sie falsch wären, aber ich glaub da passt eigentlich alles....
    Aber hatte auch so einen Verdacht, dass irgendwelche Kanäle nicht geschlossen wurden und jetzt noch die ganze Zeit eben "Silent" spielen und das deswegen nix mehr zu hören ist. Kann man einzelne Kanäle auch abschiessen?



  • Martin G schrieb:

    Sound in "C" unter Linux ist auch hier beschrieben. 😉

    Martin

    Hab das Buch, aber sooo viel zum Thema Sound steht da nun auch nicht gerade drinne...

    SDL ist imho Rotz, weil es standardmaessig keinen Surround unterstuetzt... bin deshalb immer noch fuer ALSA. Und ein gutes Spiel (vorallem Egoshooter etc.) sollte schon Surround-Sound bieten... Hab da auch ein schönes C++ ALSA-Interface geschrieben, kann ich bei Bedarf ja mal posten...


Anmelden zum Antworten