Threads und Sounds
Übersicht

![]() |
FirstdeathmakerBetreff: Threads und Sounds |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi, da bin ich schon wieder. Hab diesmal ein Problem mit LoadSound() und Threads.
So wie es jetzt da steht läuft es nicht, aber wenn man den ausgeklammerten Teil mit reinnimmt, dann spielt er auf einmal die Musik ab. Ich check es einfach nicht... Code: [AUSKLAPPEN] SuperStrict
Local s:TSound Local c:TChannel Local map:TMap = CreateMap() Rem s = LoadSound("data/s1.ogg") c = PlaySound(s) Delay 1000 c.stop() End Rem Local sfxList:TList = New TList sfxList.AddLast("data/s1.ogg") sfxList.AddLast("data/s2.ogg") sfxList.AddLast("data/s3.ogg") Local loader:TDataLoader = New TDataLoader loader.setLoadFunction(LoadSound,0) loader.setTargetMap(map) loader.setUrlList(sfxList) loader.start() Graphics 400,300 Local cc:Int While Not loader.isFinished() cc:+1 Cls DrawText "Loading: " + Int(loader.getProgress()*100)+"%", (Sin(cc)+1)*GraphicsWidth()/4,10 Flip Wend s:TSound = TSound(MapValueForKey(map,"data/s2.ogg")) c:TChannel = s.Play() Print "Sound exists: "+(s<>Null) Print "Channel exists: "+(c<>Null) Print "Channel plays: "+c.playing() Repeat Cls DrawText("Music should be playing",10,10) Flip Until KeyHit(KEY_ESCAPE) End '############## TDataLoader ################ Type TDataLoader Field loadFunction:Object(url:Object, flags:Int) Field flags:Int Field urlList:TList Field thread:TThread Field targetMap:TMap Field total:Int Field Current:Int Method setLoadFunction(f:Object(url:Object, flags:Int), flags:Int = 0) Self.loadFunction = f Self.flags = flags End Method Method setUrlList(urls:TList) Self.urlList = urls End Method Method setTargetMap(m:TMap = Null) targetMap = m If targetMap = Null targetMap = CreateMap() End Method Method start() Self.thread = CreateThread(TDataLoader.LoadThread, Self) End Method Function LoadThread:Object(data:Object) Local dl:TDataLoader = TDataLoader(data) If dl = Null Return Null EndIf dl.total = dl.urlList.Count() For Local url:Object = EachIn dl.urlList Local obj:Object = dl.loadFunction(url, dl.flags) If obj = Null Print "error occured when loading data" MapInsert(dl.targetMap, url, obj) dl.Current:+1 Next Return dl End Function Method getProgress:Float() If total = 0 Return 1 Return Float(Current) / total End Method Method getMap:TMap() Return Self.targetMap End Method Method isFinished:Byte() If ThreadRunning(Self.thread) = False DetachThread(Self.thread) Return True EndIf Return False End Method End Type |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
amon |
![]() Antworten mit Zitat ![]() |
---|---|---|
also bei mir läufts so wie es da steht ![]() [edit] falls du dich wegen dem progress fragst, das geht einfach zu schnell - versuche mal den start aufruf nach dem graphics command zu setzen, dann solltest du auch einen ladefortschritt sehen ![]() |
||
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also bei mir wird einfach kein Sound abgespielt wenn ich das obere ausklammere. (Ich lade ganze Lieder, da dauert das dann schon etwas länger). Also es geht weniger um die Progressanzeige, sondern mehr darum, dass kein Sound abgespielt wird, obwohl der geladen, abgespielt (channel zurückgegeben) und der channel sagt dass der Sound gerade abgespielt wird. Sobald ich aber vorher konventionell etwas lade und abspiele funktioniert auch das zweite. | ||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
amon |
![]() Antworten mit Zitat ![]() |
---|---|---|
hm, also das am nachmittag war mein notebook, da gings - hier am standpc gehts auch nicht...
[edit] Jetzt wärs die Frage obs am Betriebssystem liegt Notebook - Vista 64bit Standpc - XP 32bit |
||
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm, ich hab hier auch XP, aber das kann doch nicht sein? Ich seh den Unterschied einfach nicht. Ich werd jetzt auch mal im englischen Forum posten. | ||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielleicht muss der Mainthread erst das Soundsystem initialisieren bevor es genutzt werden kann? Versuch für einen Workaround wäre es einen kurzen Leersound zu serstellen und den zu beginn deines Programmes zu Laden und wiederzugeben, um genau das zu erreichen. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nur zur Info: Der Mainthread startet in beiden Fällen den Abspielvorgang. Aber dein Workaround wäre natürlich eine Möglichkeit. | ||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group