Musik und Sound


Wer ein Spielchen programmiert, wird wohl nicht auf Musik oder Sounds verzichten können. Deshalb kümmern wir uns hier darum, wie und wo man Sounds oder Musik einbindet. Zudem gibt es auch gleich ein kleines Tutorial, wie man in das gewünschte Format konvertiert. Vorweg sei aber gesagt, dass so ziemlich jeder Luaplayer andere Befehle für Musik und Sound hat, sowie auch andere Dateiformate unterstützt.

Der "normale" LUAPlayer (hier speziell Luaplayer Mod1-4 von Cools) kann folgende Formate abspielen: UNI, IT, XM, S3M, MOD, MTM, STM, DSM, MED, FAR, ULT oder 669 für Musik. WAV kann nur für Sounds verwendet werden. Die obigen Formate können direkt aus dem MIDI-Format konvertiert werden. Dazu gibt es ein schönes Programm namens MadTracker, erhältlich auf http://www.madtracker.org. Nun zum eigentlichen Code (Achtung, diese Befehle gelten NUR für die Luaplayer Mod1-4 von Cools)

	Music.playFile("lied.xm", true)
	--...spielt Musik ab, true/false aktiviert/deaktiviert den Loop-Modus.
	Music.pause()
	--...pausiert ein Lied, also hält es nur an.
	Music.stop()
	--...beendet ein Lied.
	Music.resume()
	--...setzt die Wiedergabe fort nach der Pausierung.
	Music.playing()
	--...ermittelt, ob gerade ein Lied läuft.
	Music.volume(Zahl)
	--...legt die Lautstärke fest, Zahl kann einen Wert von 0 bis 128 enthalten.

Soviel zum Abspielen von Musik, wollen wir uns doch nun um Sounds kümmern. Wie schon gesagt, für Sounds eignet sich nur das Format WAV. Ins WAV-Format kann man z.B. mit Audacity konvertieren, dass es auf http://audacity.sourceforge.net gibt.

	sound = Sound.load("bing.wav",false)
	--...lädt eine WAV-Datei, der Loop ist deaktiviert(false!)
	sound:play()
	--...spielt eine Sounddatei ab.
	sound:stop()
	--...beendet die Wiedergabe der Sounddatei
	sound:pause()
	--...pausiert die Soundwiedergabe
	sound:resume()
	--...setzt die Soundwiedergabe fort
	sound:playing()
	--...ermittelt, ob der Sound gerade wiedergegeben wird.

Speziell beim LUAPlayer Mod 4 kann man aber dann doch MP3 abspielen mit den folgenden Befehlen:

	Mp3.load("song.mp3")
	--...lädt eine MP3-datei
	Mp3.play()
	--...spielt den MP3-Song ab
	Mp3.pause()
	--...pausiert das Abspielen
	Mp3.stop()
	--...stoppt das Abspielen und löscht den Song aus dem RAM
	Mp3.EndOfStream()
	--...ermittelt, ob der Song vorüber ist, gibt true oder false zurück
	Mp3.getTime()
	--...zeigt die MP3-Spielzeit an, Anzeige mittels einem String (Zeichenkette)
	Mp3.volume(zahl)
	--...stellt die MP3-Lautstärke ein
	

Das waren jetzt spziell die Funktionen des mittlerweile veralteten LuaPlayer Mod4 von Cools. Für neuere Firmwares benötigt man natürlich dann den LuaPlayerHM, ab Version 2 ist dieser auch Audio-tauglich. Version 2 hat zwar Befehle für Mp3, Sounds im .wav-Format können erst ab LuaPlayerHM 7 wieder problemlos benutzt werden.

Mp3/Ogg-Befehle (Standard Mp3-Funktionen) sind:

	Mp3.load("datei.mp3")
	--Achtung, es kann maximal eine Mp3 geladen und zur selben Zeit abgespielt werden
	Mp3.stop()
	Mp3.pause()
	Mp3.play()
	--braucht keine Parameter, da sowieso nur eine Mp3 abgespielt werden kann
	Mp3.EndOfStream()
	Mp3.getTime()
	Mp3.songTime()
	Mp3.artist()
	Mp3.title()
	Mp3.album()
	Mp3.genre()
	Mp3.year()
	Mp3.trackNumber()
	Mp3.layer()
	Mp3.kbit()
	Mp3.mode()
	
	Ogg.load()
	--Achtung, es kann maximal eine Ogg geladen und zur selben Zeit abgespielt werden
	Ogg.stop()
	Ogg.pause()
	Ogg.play()
	--braucht keine Parameter, da sowieso nur eine Ogg abgespielt werden kann
	Ogg.EndOfStream()
	Ogg.songTime()
	Ogg.artist()
	Ogg.title()
	Ogg.album()
	Ogg.genre()
	Ogg.year()
	Ogg.trackNumber()
	Ogg.layer()
	Ogg.kbit()
	Ogg.mode()
	

Dazu gibt es noch eine spezielle Mp3-Bibliothek, die um einiges stabiler und schneller läuft und daher bevorzugt zu verwenden ist:

	Aa3me.load()
	--Achtung, es kann maximal eine Aa3 geladen und zur selben Zeit abgespielt werden
	Aa3me.play()
	--braucht keine Parameter, da sowieso nur eine Aa3 abgespielt werden kann
	Aa3me.stop()
	Aa3me.eos()
	Aa3me.gettime()
	Aa3me.percent()
	Aa3me.pause()
	Aa3me.songTime()
	Aa3me.artist()
	Aa3me.title()
	Aa3me.album()
	Aa3me.genre()
	Aa3me.year()
	Aa3me.trackNumber()
	Aa3me.layer()
	Aa3me.kbit()
	Aa3me.mode()
	Aa3me.rawSongTime()
	Aa3me.instantBitrate()
	Aa3me.vis()
	
	Mp3me.load()
	--Achtung, es kann maximal eine Mp3 geladen und zur selben Zeit abgespielt werden
	Mp3me.play()
	--braucht keine Parameter, da sowieso nur eine Mp3 abgespielt werden kann
	Mp3me.stop()
	Mp3me.eos()
	Mp3me.gettime()
	Mp3me.percent()
	Mp3me.pause()
	Mp3me.songTime()
	Mp3me.artist()
	Mp3me.title()
	Mp3me.album()
	Mp3me.genre()
	Mp3me.year()
	Mp3me.trackNumber()
	Mp3me.layer()
	Mp3me.kbit()
	Mp3me.mode()
	Mp3me.rawSongTime()
	Mp3me.instantBitrate()
	Mp3me.vis()
	

Für Sounds speziell im .wav-Format muss ersteinmal ein Befehl ausgeführt werden, der das Abspielen aktiviert:

	System.oaenable()
	--Aktiviert die Wiedergabe von Sounds
	
	System.oadisable()
	--Deaktiviert die Wiedergabe von Sounds
	

Zwischen diesen beiden Befehlen können dann Sounds wiedergegeben werden:

	Sound.play(meinsound)
	

Der "Sound" meinsound muss aber natürlich zuvor geladen werden:

	meinsound = Sound.load("achso.wav")
	

Weitere Befehle wären:

	SoundSystem.SFXVolume()
	SoundSystem.reverb()
	SoundSystem.panoramicSeparation()
	sound:gc()
	sound:tostring()
	

Im Laufe der Zeit werden immer mehr Sound-Funktionen hinzukommen bzw evt. auch hinzugekommen sein. Für nähere Infos kann man dann einfach in der readme.txt des jeweiligen LuaPlayers nachlesen, oder auch im Entwicklerforum von http://luaplayerhm.xtreemhost.com nachsehen. Selbstverständlich darf auch im Forum auf http://www.bumuckl.com nachgefragt werden.