Sounds und deren Channels in Types abspeichern?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

joshmami

Betreff: Sounds und deren Channels in Types abspeichern?

BeitragSa, Mai 21, 2011 14:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Community,
Ich habe folgendes Problem:
In dem Menü für ein Spiel sollen sich alle Sounds auf einmal ausschalten lassen.
Damit ich nicht jeden einzelnen Channel ausschalten muss, habe ich einen Type Sound
BlitzBasic: [AUSKLAPPEN]
Type Sound
Field Sound
Field Channel
End Type

erstellt und darin alle meine Sounds und die zugehörigen Channels gespeichert.
BlitzBasic: [AUSKLAPPEN]
RotorLoop.Sound = New Sound
RotorLoop\Sound = LoadSound("Sounds\RotorenGerausch.wav")
ExploSound.Sound = New Sound
ExploSound\Sound = LoadSound("Sounds\ExploSound.wav")
ShotSound.Sound = New Sound
ShotSound\Sound = LoadSound("Sounds\ShotSound.wav")
MenuMusic.Sound = New Sound
MenuMusic\Sound = LoadSound("Sounds\MenuMusic.wav")
NormalMusic.Sound = New Sound
NormalMusic\Sound = LoadSound("Sounds\NormalMusic.wav")
BombSound.Sound = New Sound
BombSound\Sound = LoadSound("Sounds\Bomb.wav")
MenuDrehSound.Sound = New Sound
MenuDrehSound\Sound = LoadSound("Sounds\MenuDrehSound.wav")
MenuAuswahlSound.Sound = New Sound
MenuAuswahlSound\Sound = LoadSound("Sounds\Reload.wav")

Wenn ich jetzt aber
BlitzBasic: [AUSKLAPPEN]
RotorLoop\Channel = PlaySound(RotorLoop\Sound)

schreibe, dann kommt der Fehler:Code: [AUSKLAPPEN]
Illegal Type Conversion

Wieso funktioniert das nicht Question

Xeres

Moderator

BeitragSa, Mai 21, 2011 14:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du die Instanzen nicht Global deklariert hast, ist z.B. "RotorLoop" nicht unbedingt ein Sound-Type sondern wird - wie immer - als Integer on the fly deklariert, womit es kein Field gibt, auf das zugegriffen werden könnte...
Lange rede, kurzer Sinn: Immer ordentlich deklarieren, selbst wenn BlitzBasic kein Problem damit hat.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

joshmami

BeitragSa, Mai 21, 2011 14:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiß nicht, ob ich das richtig verstanden habe, aber ich habs mal so probiert
BlitzBasic: [AUSKLAPPEN]
Global RotorLoop.Sound = New Sound
RotorLoop\Sound = LoadSound("Sounds\RotorenGerausch.wav")
Global ExploSound.Sound = New Sound
ExploSound\Sound = LoadSound("Sounds\ExploSound.wav")
Global ShotSound.Sound = New Sound
ShotSound\Sound = LoadSound("Sounds\ShotSound.wav")
Global MenuMusic.Sound = New Sound
MenuMusic\Sound = LoadSound("Sounds\MenuMusic.wav")
Global NormalMusic.Sound = New Sound
NormalMusic\Sound = LoadSound("Sounds\NormalMusic.wav")
Global BombSound.Sound = New Sound
BombSound\Sound = LoadSound("Sounds\Bomb.wav")
Global MenuDrehSound.Sound = New Sound
MenuDrehSound\Sound = LoadSound("Sounds\MenuDrehSound.wav")
Global MenuAuswahlSound.Sound = New Sound
MenuAuswahlSound\Sound = LoadSound("Sounds\Reload.wav")

Funkt aber trotzdem nicht.

Xeres

Moderator

BeitragSa, Mai 21, 2011 14:47
Antworten mit Zitat
Benutzer-Profile anzeigen
"Funzt nicht" hilft nicht, dir zu Helfen.
Ich würde nicht Type und Field exakt die Selbe Bezeichnung geben:
BlitzBasic: [AUSKLAPPEN]
Type TSound
Field Sound
Field Channel
End Type

Ansonsten bräuchte man mehr Code um den Fehler zu lokalisieren.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Midimaster

BeitragSa, Mai 21, 2011 15:13
Antworten mit Zitat
Benutzer-Profile anzeigen
also bei mir geht das:

BlitzBasic: [AUSKLAPPEN]
Type SoundTyp
Field Klang%
Field Kanal%
End Type

Rotor.SoundTyp=New SoundTyp

Rotor\Klang = LoadSound("test.wav")
Rotor\Kanal = PlaySound(Rotor\Klang)


teste aber unbedingt, ob der sound überhaupt gefunden und geladen wurde:

BlitzBasic: [AUSKLAPPEN]
Type SoundTyp
Field Klang%
Field Kanal%
End Type

Datei="Sounds\RotorenGerausch.wav"
Test_Klang = LoadSound(Datei)
Test_Kanal = PlaySound(Test_Klang)

Rotor.SoundTyp=New SoundTyp

Rotor\Klang = LoadSound(Datei)
Rotor\Kanal = PlaySound(Rotor\Klang)

ToeB

BeitragSa, Mai 21, 2011 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Im Übrigen würde ich mir auch eine Funktion schreiben, vereinfacht das ganze Wink

z.B. so :
BlitzBasic: [AUSKLAPPEN]
Type SoundTyp
Field Sound
Field Channel
End Type


Global RotorSound.SoundTyp = LoadSoundTyp( "Rotorsound.ogg" )
Global SchussSound.SoundTyp = LoadSoundTyp( "Schuss.ogg" )


PlaySoundTyp( RotorSound )



Function LoadSoundTyp.SoundTyp( tmpSoundFile$ )
Local tmpSound = LoadSound( tmpSoundFile$ )
If tmpSound = 0 Then Return Null

Local tmpSoundTyp.SoundTyp = New SoundTyp
tmpSoundTyp\Sound = tmpSound
tmpSoundTyp\Channel = 0

Return tmpSoundTyp
End Function


Function PlaySoundTyp( tmpSoundTyp.SoundTyp )
If tmpSoundTyp = Null Then Return

If tmpSoundTyp\Channel <> 0 Then
If ChannelPlaying( tmpSoundTyp\Channel ) = 1 Then StopChannel( tmpSoundTyp\Channel )
EndIf

tmpSoundTyp\Channel = PlaySound( tmpSoundTyp\Sound )
End Function


(Noch nicht getestet, sollte aber funzten)

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Xeres

Moderator

BeitragSa, Mai 21, 2011 15:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Statt Code: [AUSKLAPPEN]
If tmpSound = 0 Then Return Null
besser gleich Code: [AUSKLAPPEN]
If tmpSound = 0 Then RuntimeError(tmpSoundFile$ + " konnte nicht geladen werden!")
Dann ist gleich klar, wo der Fehler liegt, anstatt das einfach nichts passiert.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

FireballFlame

BeitragSa, Mai 21, 2011 15:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Wegen sowas das ganze Programm abschmieren zu lassen, ist aber auch nicht die schönste Lösung. Wink
Ich würd statt RuntimeError lieber einen Eintrag in den DebugLog oder so machen.
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

joshmami

BeitragSa, Mai 21, 2011 17:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Erst mal vielen Dank für die Antworten.
Der Code der nicht funktioniert(und jetzt mit Abfrage ob der Sound geladen werden konnte sieht jetzt so aus:
BlitzBasic: [AUSKLAPPEN]
Global RotorLoop.TypeSound = New TypeSound
RotorLoop\Sound = LoadSound("Sounds\RotorenGerausch.wav")
If RotorLoop\Sound = 0 Then
RuntimeError("Sound existiert nicht")
EndIf
RotorLoop\Channel = PlaySound(RotorLoop\Sound)

Das mit der Funktion ist mir erstmal zu kompliziert, ich probier's erst mal ohne.
Das ganze steht vor der Hauptschleife, der Sound ist geloopt und soll die ganze Zeit laufen.Das Problem ist übrigens kein Einzelfall, das Rotorengeräuch ist nur das erste, das abgespielt werden soll.
EDIT:Das Programm läuft nicht mal an!Es kommt sofort die im ersten Post beschriebene Meldung!

Midimaster

BeitragSa, Mai 21, 2011 18:38
Antworten mit Zitat
Benutzer-Profile anzeigen
und mein Beispiel (...in den betreffenden Ordner als "test.bb" erstellt) läuft auch nicht, oder doch?

schreib doch mal zur Abwechslung beides in deinen nächsten Beitrag : Type-Definition und Ablaufcode. Sonst wissen wir ja nie, ob beides zueinander passt...

und noch ein Tipp: isolier mal das Problem in eine eigene "test.bb". Läuft es dann? Vielleicht liegt es ja an einer ganz anderen Stelle?

joshmami

BeitragSa, Mai 21, 2011 18:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Boah bin ich idiotisch Embarassed Embarassed Embarassed Embarassed Embarassed
Es war einfach die Zeile drüber ein Name noch nicht umgeändert(hatte vorher die Sounds ohne Types)
Tut mir echt leid, dass ich deswegen extra einen Thread geöffnet habe *schäm*

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group