Strange Behavior Threaded TSound
BlitzMax Forums/BlitzMax Programming/Strange Behavior Threaded TSound
| ||
Hi there, ive got a strange behavior of my program: When I uncomment the rem-block in the beginning, I hear the sound in the uncommented section and also in the end. When I run it like I post it here, I hear no sound at all, although it should play the sound in the section above where I get the sound out of the TMap. Another guy tried the code on his system, but it worked well on Windows Vista. On Win XP we both get this strange behavior. 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 |