Input/Output Hintergrundmusik

Henning

Mitglied
Hallo,

ich habe mir bereits versucht selber zu helfen, aber dies schlug leider fehl, und deshalb hoffe ich, dass mir hier geholfen werden kann.

Um einer bestehenden Klasse Hintergrundmusik beizufügen, wollte ich zunächst eine eigene Klasse programmieren, die ich dann später in die andere einfüge. Doch leider erhalte ich immer noch eine Fehlermeldung, zu der ich keine Lösung finde.

Ich bin nun schon ein wenig in java-Programmierung fortgeschritten und weiß nicht, ob dies hier tatsächlich in den Anfängerbereich passt, aber da ich noch nie Audiodateien eingebaut habe, bin ich zumindest was das betrifft ganz am Anfang.

Hier meine aktuelle Klasse Sound, die sehr simpel sein sollte:

Java:
import  sun.audio.*;
import  java.io.*;
public class Sound
{
    public Sound () throws FileNotFoundException,IOException
    {
        InputStream in = new FileInputStream("Soundtrack.au");
        AudioStream as = new AudioStream(in);
        AudioData data = as.getData();
        ContinuousAudioDataStream cas = new ContinuousAudioDataStream(data);
        AudioPlayer.player.start(cas);
    }
}

Die auftretenden Warnungen bzgl. sun sind in diesem Falle nicht wichtig, da diese Klasse nur experimentell ist.
Dennoch erscheint beim Ausführen der Klasse folgende Fehlermeldung:

java.io.IOException: could not create AudioData object
at sun.audio.AudioStream.getData(AudioStream.java:110)
at Sound.<init>(Sound.java:9)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at bluej.runtime.ExecServer$3.run(ExecServer.java:790)

Anscheinend habe ich diesbezüglich zu simpel gedacht und deshalb bitte ich um Hilfe
 

Jango

Gesperrter Benutzer
Schon mal an Groß - Kleinschreibung gedacht?
Normalerweise benennt man eine Datei mit kleinen Buchstaben - im Code schreibst du das groß.
Könnte ja sein...;)
 

Henning

Mitglied
So, habs mal getestet, ändert leider nichts.

Aber so wie ich die Fehlermeldung deute, muss da doch eig. etwas gravierenderes fehlen/falsch sein...
 

Michael...

Top Contributor
Naja die Fehlermeldung besagt nur, dass kein AudioData Objekt erzeugt werden konnte. Ob das gravierend ist...

Probier doch einfachmal direkt den FileInputStream zu lesen z.B. in.read(); nach Zeile 7.
 

Henning

Mitglied
Das Problem scheint in Zeile 9 zu liegen

Gemeldet wird:
java.io.IOException:
could not create AudioData Object (in sun.audio.AudioStream)
 

Henning

Mitglied
Naja die Fehlermeldung besagt nur, dass kein AudioData Objekt erzeugt werden konnte. Ob das gravierend ist...

Probier doch einfachmal direkt den FileInputStream zu lesen z.B. in.read(); nach Zeile 7.

Hab jetzt mal versucht, wieder in einer experimentellen Klasse, die Sounddatei in 8-bit auszulesen, das liefert dann zwar keine Fehlermeldung mehr, aber mit dem Code, der in der Konsole angezeigt wird kann ich leider nichts anfangen, da er sich bei jedem erneuten Auslesen auch geringfügig ändert.

Das hier ist die Klasse:

Java:
import java.io.*; 
import javax.sound.sampled.*; 
class SoundTest 
{ 
 public static void main(String args[]) 
 { 
  File f = new File("Soundtrack.au"); 
  AudioInputStream ais;
  AudioFileFormat aff;
  byte[] buffer = new byte[1];
  int n;
  try 
  { 
   ais = AudioSystem.getAudioInputStream(f); 
   aff = AudioSystem.getAudioFileFormat(f);
   AudioFormat format = ais.getFormat();
   if ((format.getEncoding() == AudioFormat.Encoding.ULAW) ||
         (format.getEncoding() == AudioFormat.Encoding.ALAW))
     {
       AudioFormat tmp = new AudioFormat(
         AudioFormat.Encoding.PCM_SIGNED,
         format.getSampleRate(),
         format.getSampleSizeInBits() * 2,
         format.getChannels(),
         format.getFrameSize() * 2,
         format.getFrameRate(),
         true
       );
       ais = AudioSystem.getAudioInputStream(tmp, ais);
       format = tmp;
     }
   System.out.println("Format der Audio - Datei:"); 
   System.out.println(aff.toString());
   while ((n = ais.read(buffer)) != -1 ) 
   { 
    System.out.println(buffer);
   } 
  } 
  catch (IOException e) 
  { 
   System.out.println("Einlesen nicht moeglich!"); 
  } 
  catch (UnsupportedAudioFileException e) 
  { 
   System.out.println("Dateityp unerkannt!"); 
  } 
 } 
}

In der Konsole erscheint immer dieser Code: [B@(und dann folgt eine Kombination aus Zahlen und Buchstaben 6-7 Zeichen lang)
 
Zuletzt bearbeitet:

Henning

Mitglied
Hmh, schade, dass nun solange keine Antwort kam, ist mein Problem also nicht gravierend, sondern unlösbar oder wollt ihr noch weitere Infos?
 

xjCoder

Aktives Mitglied
Hi,

Hmh, schade, dass nun solange keine Antwort kam, ist mein Problem also nicht gravierend, sondern unlösbar oder wollt ihr noch weitere Infos?

...nicht gleich die Flinte ins Korn werfen...


Also ich habe mir gerade mal Dein Beispiel aus dem ersten Post genommen und mit dieser Beispieldatei getestet: funktioniert einwandfrei

Ich würde mal die Vermutung wagen, daß Dein Soundfile irgendwie korrupt ist ???:L
 

Henning

Mitglied
Wow, du hast recht, diese File funktioniert auch bei mir, ich hab selbst noch 3 andere Files geprüft und bei allen funktionierte es nicht, ich werde mal schauen, ob mir beim Konvertieren ein Fehler unterlaufen ist.

Kann es sein, dass es an der Größe meiner Files liegt?
Alle, die ich getestet habe waren größer als 1 MB.

Ein bisschen komprimiert scheint es nun zu funktionieren, ich danke vielmals euch allen :D
 
Zuletzt bearbeitet:

Neue Themen


Oben