WP8: PlaySound crashes in some cases

Monkey Forums/Monkey Bug Reports/WP8: PlaySound crashes in some cases

Xaron(Posted 2014) [#1]
Playsound crashes when there was some resource loading in between.

To be exact, it crashes at StopChannel, because the pointer to the channel "voice" has become invalid. Commenting out StopChannel in PlaySound solves it.

It's a bit hard to reproduce, doesn't happen with small test projects, but I can send you my full project if you like, Mark? It crashes then all the time and the same place.




marksibly(Posted 2014) [#2]
Send me the project.


Xaron(Posted 2014) [#3]
Done.


Difference(Posted 2014) [#4]
Great that this is getting looked into, because I have the same problem, but I haven't been able to make a small runnable example.

I get the error the exact same place on both Windows Phone and Windows 8 target.


Xaron(Posted 2014) [#5]
Difference a quick fix is to comment out the StopChannel call in PlaySound in MonkeyGame.cpp


Xaron(Posted 2014) [#6]
Well Mark,

Sorry for the huge project, I managed to strip it down to the bug itself, here's the code. Looks like a Discard call screws up your GC?

Strict

Import mojo

Function Main:Int()
  New Test()
  Return 0
End Function

Class Test Extends App
  Field _counter:Int
  Field _lastPlayTime:Int
  Field _sound:Sound
  Field _sfxLoaded:Bool = False
    
  Method OnCreate:Int()
    SetUpdateRate(30)
    _sound = LoadSound( "click.wav" )
    _sfxLoaded = True
    Return 0
  End Method

  Method OnUpdate:Int()
    Return 0
  End Method
  
  Method OnSuspend:Int()
    Return 0
  End Method
  
  Method OnResume:Int()
    Return 0
  End Method

  Method OnRender:Int()
    Cls()
    Local dt:Int = Millisecs() - _lastPlayTime
    If( dt > 1000 And _sfxLoaded )
      _lastPlayTime = Millisecs()
      PlaySound( _sound )
    End If

    'Every 2nd update we discard all images
    If( _counter Mod 2 = 0 )
      _sound.Discard()
      _sfxLoaded = False
    Else
      _sound = LoadSound( "click.wav" )
      _sfxLoaded = True
    End If
    _counter += 1

    Return 0
  End Method

  Method OnBack:Int()
    Return 0
  End Method
End Class


Whole project:
http://www.leidel.net/dl/monkey/wp8test.zip


marksibly(Posted 2014) [#7]
Thanks for the much reduced demo!

I've just uploaded v77e which includes a fix for this.


Xaron(Posted 2014) [#8]
Thanks Mark, you did a marvellous job! :)


freedo(Posted 2014) [#9]
Wow..you cant beat customer service like that...good on ya Mark...gonna buy soon.