SoundEffectInstances довольно просты в реализации, если предположить, что silverlight работает как обычный XNA.
SoundEffectInstance birdSoundInstance = birdSound.CreateInstance();
Использование SoundEffectInstance аналогично SoundEffect, но имеет гораздо больший контроль. Вы можете выбрать положение панорамирования стерео, высоту и громкость, установить петлю звука, приостановить звук и т. Д. Просто сохраняйте ссылку на Экземпляр и используйте один из его методов для этих действий. Я бы рекомендовал просто добавить birdSoundInstance и coyoteSoundInstance вместе с вашими SoundEffects в свойствах класса, я думаю.
Память не так важна для Windows Phone, потому что платформа ограничивает вас одновременным воспроизведением до 16 экземпляров SoundEffectInstances. Так что, по сути, он не позволит вам использовать большие объемы памяти (если вы не играете 16 очень больших звуков). Что мне нравится делать, так это создавать синглтон для воспроизведения музыки, который содержит 16 звуков. Когда я вызываю .PlaySound (SoundEffectInstance sound), он проверяет наличие пустого места в массиве для размещения этого звука. Если его нет, он заменяет самый старый звук. Он проверяет каждый кадр на наличие остановленных (законченных) звуков в массиве и очищает их, удаляя их. (Очередь может показаться хорошей структурой данных для этого, но она ограничивает удаление законченных звуков).
Еще одна вещь, которую стоит отметить при использовании SoundEffectInstances, это то, что они продолжают существовать, даже если вы разыменовали их, по моему опыту. Если вы хотите остановить воспроизведение экземпляра, вам нужно либо дать ему закончить, либо дать команду на остановку. Обратите внимание, что SoundEffectInstance имеет метод Dispose (). Используйте это, когда закончите воспроизведение звука, чтобы удалить его из памяти. Я не думаю, что сборщик мусора автоматически подхватывает их, как большинство других активов.
Я не уверен, что могу помочь с вашим кодом, поскольку кажется, что загрузка ресурсов Silverlight значительно отличается от загрузки конвейера XNA, но я надеюсь, что я пролил некоторый свет на эту тему. Я думаю, что звуки являются одними из самых простых вещей, которые можно сделать в XNA.