Wednesday, July 10, 2013

WPF–SoundPlayer Bug

Here is an interesting one. I was using the SoundPlayerAction in WPF to plan a small .wav file when a view was loaded, and I noticed that sometimes I would get a very strange screeching sound while the audio was playing. This did not happen all the time, but it happened enough that it needed to be fixed. The bug was more apparent on certain machines than others. After some digging around, I found out it had to do with the Garbage Collector of all things.  Essentially, the GC automatically decides to start moving the bytes used in the sound file before it’s done playing the file. This causes the annoying screeching sound. So how did I fix this issue? The solution that worked for me was to simply change the build action on my sound files from resource to content. I then had to change all my references to my audio files to use the correct format (from pack://application to pack://siteoforigin) and that took care of the issue. This bug only presents itself when trying to play audio from embedded resources. If playing directly from a file, you should not have the same problem.

Here are the links I found explaining more about the bug and how to get around it.

http://social.msdn.microsoft.com/Forums/vstudio/en-US/9c8bf569-3469-49d8-9f2a-8246ee40477c/soundplayeraction-plays-crazy-noise

http://www.codeproject.com/Articles/13909/SoundPlayer-bug-Calling-unmanaged-APIs

Happy Screech-Free Coding!

No comments:

Post a Comment