Anzeige:
Ergebnis 1 bis 10 von 10

Thema: Sound, Koexistenz mit anderen Programmen

  1. #1
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825

    Sound, Koexistenz mit anderen Programmen

    Hallo Leute,

    ich versetze eine Application mit Soundeffekten, das läuft auch soweit.
    Nur:
    Mit Qt/C++ (aRTs, NAS) gab es eine friedliche Koexistenz der Programme, unter Java nicht mehr. So ist es z.B. nicht mehr möglich, Amarok und ein Java-Programm gleichzeitig zu hören, wer zuerst kommt, darf Files abspielen.

    Bisheriger Code:
    Code:
    // Java-Soundmodul by uja 26.10.07
    // Aufruf: my_soundmodul.play_sound(nr);
    
    package grube;
    import java.io.*;
    import javax.sound.sampled.*;
    
    public class soundmodul
    {
      String pfad="/grube/sounds/";
      String[] wavfile= { "mausklick.wav","treffer.wav","zusammenfallen.wav","abfall.wav","levelup.wav","over.wav","explo.wav" };
      Clip[] saund=new Clip[wavfile.length]; // Sound-Effekt-Puffer
    
      // alle Sounds vorladen:
      soundmodul()
      { for (int i=0; i<wavfile.length; i++)
        { try
          { // aus Jar laden:
            AudioInputStream ais=AudioSystem.getAudioInputStream(this.getClass().getResourceAsStream(pfad+wavfile[i]));
            AudioFormat af = ais.getFormat();
           // Clip erzeugen und oeffnen, dabei in Frames umrechnen
            DataLine.Info info = new DataLine.Info(Clip.class,af,((int) ais.getFrameLength()*af.getFrameSize()) );
            saund[i] = (Clip)AudioSystem.getLine(info);
            // ready for use:
            saund[i].open(ais);
          }
          catch (Exception e) { System.out.println("Sound-Problem bei: "+pfad+wavfile[i]); }
        }
      }
    
      void play_sound(int nr) { saund[nr].setFramePosition(0); saund[nr].start(); }
      void stop_sound(int nr) { saund[nr].stop(); }
    
      void close_soundall()
      { for (int i=0; i<wavfile.length; i++)
        saund[i].close();
      }
    
    }
    Wenn Amarok schneller ist, rennt's in die Exception rein.
    Ist Java schneller, meldet mir Amarok: "Xine-Treiber nicht initialisiert."

    Abhilfe?

    so long,
    Bluejay
    Eigentlich ganz einfach, wenn man's weiss!

  2. #2
    Registrierter Benutzer
    Registriert seit
    02.12.2002
    Ort
    Darmstadt
    Beiträge
    615
    Abhilfe kann ich dir so direkt nicht anbieten, es liegt aber daran das Softwaremixing unter Linux standardmäßig von Alsa nicht aktiviert ist - bei meiner Soundkarte/Distribution zumindest. Für solche Gründe wurde annodazumal arts und Konsorten erstellt. Ich vermute dass Java einfach direkt auf Alsa zugreift und somit das Gerät blockiert.

    Lösungansätze könnten demnach also sein, die Java Soundausgabe an arts zu übergeben oder in alsa das Software Mixing zu aktivieren. Für ersteres weiß ich keine Lösung, da ich arts nicht kenne, für zweiteres müsstest du je nach Distribution nach entsprechenden Anleitungen suchen, allerdings habe ich das bei mir auch noch nicht zufriedenstellend lösen können.
    Seine Rätselhaftigkeit wird nur durch seine Macht übertroffen!

  3. #3
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Software-Mixing muss aktiviert sein, denn Amarok und einige (ältere) C++-Programme, die aRts benutzen, dudeln fröhlich durcheinander.

    Ich denke auch, dass sich diese Java-Version (Sun 1.6.0_03) das ganze Sound-System unter den Nagel reißt, so wie es mit gutem Grund Audacity tut.

    Meine Hoffnung auf Classes, die nur einen Soundserver anschubsen, muss ich wohl begraben.
    Eigentlich ganz einfach, wenn man's weiss!

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Eventuell lässt sich über Properties steuern, wie die javax.sound Implementierung arbeitet, z.B. ein soundserverfähiges Backend benutzt.

    Alternativ könntest du versuchen, die JVM mit einem der Soundserver Wrapper zu starten, z.B. für aRts

    artsdsp java "argumente von java"

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Nice try, aber Satz mit x: "artsdsp works only for binaries".

    Wobei ich eigentlich nichts dagegen hätte, das Java-Zeuchs durch einen nativen Compiler zu jagen, wenn ich denn mal einen hätte.
    Eigentlich ganz einfach, wenn man's weiss!

  6. #6
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Ist "java" bei dir am System kein Binary?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  7. #7
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    So sieht es zwar aus, aber Sun Java 1.6 wird von artsdsp nicht als binary anerkannt, Die Meldung kommt auch ohne irgendwelche zusätzlichen java-Parameter. (Linux gentoo x-86_64 2.6.22-rc8)
    Und Einpacken in Gänsefüßchen hilft da auch nix.

    Spuckt da ein ClassLoader in die Suppe?
    Eigentlich ganz einfach, wenn man's weiss!

  8. #8
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Was sagt
    Code:
    file $(which java)
    bei dir?

    Bzw. falls das ein Link ist, worauf er zeigt?

    Sonst

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  9. #9
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    ... auf usr/bin/java
    artsdsp mag dieses Java trotzdem nicht.
    Eigentlich ganz einfach, wenn man's weiss!

  10. #10
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Es scheint da eine Möglichkeit zu geben, in einem Java Properties File Angaben zum Soundsystem zu machen:
    http://ohioloco.ubuntuforums.org/sho...d.php?t=497589

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

Lesezeichen

Berechtigungen

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