Vollständige Musik in Spiel einbauen (wav - Format)

OLED

Mitglied
Sehr geehrte Mitgieder.

Ich möchte euch nun nocheinmal bei einem Problem zu meinem Projekt befragen,vielleicht könnt ihr mir bitte nocheinmal helfen. Ich habe folgendes Problem:

Ich möchte in meinem Spiel vollständige Musik abspielen, dass heißt keine Clips im Sekundenbereich sondern Musik in Minutenlänge. Dazu habe ich schon einen passenden WAV- Player gefunden. doch nach einbindung in mein Projekt wird die Musik zwar abgespielt aber ich kann keine Taste mehr drücken bzw nimmt sie nicht mehr an. Am Timer liegt es nicht wie ich anfangs dachte. Hat jemand eine Idee an was es liegen könnte? Hier mein code aus dem Player:
Java:
public void playSound(String filename){

        String strFilename = filename;
        
        try {
            soundFile = new File(strFilename);
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
        }

        try {
            audioStream = AudioSystem.getAudioInputStream(soundFile);
        } catch (Exception e){
            e.printStackTrace();
            System.exit(1);
        }

        audioFormat = audioStream.getFormat();

        DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);
        try {
            sourceLine = (SourceDataLine) AudioSystem.getLine(info);
            sourceLine.open(audioFormat);
        } catch (LineUnavailableException e) {
            e.printStackTrace();
            System.exit(1);
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
        }
        
        	sourceLine.start();
        
        int nBytesRead = 0;
        byte[] abData = new byte[BUFFER_SIZE];
        while (nBytesRead != -1) {
            try {
                nBytesRead = audioStream.read(abData, 0, abData.length);
            } catch (IOException e) {
                e.printStackTrace();
            }
            if (nBytesRead >= 0) {
                @SuppressWarnings("unused")
                int nBytesWritten = sourceLine.write(abData, 0, nBytesRead);
            }
        }

        sourceLine.drain();
        sourceLine.close();
    }

Ich habe den Player nicht einfach Kopiert sondern auch informiert wie er funktioniert, doch nach vielen durchgegoogelten Foren kam ich nicht auf das Problem.

Danke im vorraus
lg
 
Zuletzt bearbeitet:
Ich weiß zwar nicht, wo das Problem bei dir liegt,
aber versuch doch mal diese Variante:
Java:
import java.applet.*;
import java.net.*;
import java.util.*;

public class SoundLib {
	
	HashTable<String, AudioClip> sounds = new HashTable<String, AudioClip>();
	Vector<AudioClip> loopingClips = new Vector<AudioClip>();
	
	public void loadSound( String name, String path ) {
		
		if ( sounds.containsKey( name ) ) return;
		
		URL sound_url = getClass().getClassLoader().getResource( path );
		sounds.put( name, Applet.newAudioClip( sound_url ) );
		
	}
	
	public void playSound( String name ) { sounds.get( name ).play(); }
	
	public void loopSound( String name ) {
		
		AudioClip audio = sounds.get( name );
		loopingClips.add( audio );
		audio.loop();
		
	}
	
	public void stopLoopingSounds() { for ( AudioClip c : loopingClips ) c.stop(); }
	
}
 
Zuletzt bearbeitet:
OK probier ich gleich aus danke.
Naja dass Problem liegt daran dass ich in einer if anweisung die Musikklasse aufrufe, aber nach dieser anweisung läuft nichts mehr weiter. Wenn ich diesen Musikplayer zum Beispiel noch vor dem JFrame aufrufe mach sich das Fenster garnicht auf aber Musik läuft...
 
Funktioniert dass mit wav Dateien auch? hab ne NullpointerException bzw welche Formate kann ich bei einem Clip den hernehmen?
 
Zuletzt bearbeitet:
Bin gerade drauf gekommen auf etwas:
Wenn ich den Musikplayer als erstes Starte dann erst dass Spiel dann funtioniert alles einwandfrei :bahnhof: wieso ist das so?
 
... Funktioniert dass mit wav Dateien auch? hab ne NullpointerException bzw welche Formate kann ich bei einem Clip den hernehmen? ...
So weit ich weiß funktioniert es mit .aiff, .au, .midi, .ogg, .rmf, .wav sowie weiteren :rtfm:

... die Musik zwar abgespielt aber ich kann keine Taste mehr drücken bzw nimmt sie nicht mehr an. ...
Das ist eine gute Frage, ich vermute mal, dass bei dir der Sound nicht extra gestartet wird ( Thread )
und deine anderen Prozesse ( Tasten, etc. ) somit auf dessen Ende warten :toll:
 
Zuletzt bearbeitet:
Danke dir ich hatte ebenfalls schon die vermutung. Obs nun komplett funktuiniert muss ich nich schauen, da ich das programm jetzt dementsprechend umbauen muss...
Eine.frage noch: mit "this" übergebe ich da den aktuellen zustand eines programmes, also dass ich das this in.eine andere klasse übergebe und die klasse dann steuern kann, hab da noch nicht so den überblick :autsch:
 
gewissermaßen, ja :autsch:
vor allem aber ist es nötig, wenn man eine Variable im Konstruktor-/Methoden- Kopf, etc. genauso benennt, wie eine Instanzvariable :bloed:
Dann muss man z. B. im Konstruktor( int x, int y, int z )
Code:
this.x = x; this.y = y; this.z = z
angeben,
da x, y und z relativ zum Ort verschiedene Objekte angeben 😛opcorn:
Wenn eine solche, gleichnamige Variable nicht existiert, ist "this" unnötig :toll:
 
Haha danke :lol:

dass mit den gleichen Variablen ist mir ja eh schon bekannt :bae: wollte nur einmal wissen weil ich den musikplayer je nachdem welche musik ich brauche steuern muss zwischen ingame und menümusik 😀 und den musikplayer muss ich druch 4 klassen durchgeben :bloed: xD

naja danke dir trotzdem
 

Zurück
Oben