I have used the following tutorial and was able to audio working for the most part: https://www.scirra.com/tutorials/593/windows-phone-games-with-construct-2#h2a2
I am having a couple issues:
1. Audio doesnt stop or pause on Windows Phone emulator or device
2. Game crashes when going to the next layout
For the first, I am playing background music during most of the game. I want it to pause when I get to a question when another audio file plays. On the emulator and device the background music keeps playing while the question music starts. I have tried stopping all, stopping tag, etc but nothing seems to work. I must be missing something.
For the second, there is an audio clip that plays for a correct or incorrect answer at the end of the layout, pause for 2 seconds then goes back to the question list layout. The game is crashing after I select an answer.
There must be something in the C# edits because if I test before adding that portion in everything works, except the audio of course. The C# audio section must be the issue.
Any help would be appreciated.
Here is the code that I am using from the above link
MainPage.xaml - Add this into the "…phone:WebBrowser…" section
ScriptNotify="Browser_ScriptNotify"[/code:3ph8sn0x]
MainPage.xaml.cs - Add the following into the top references:
[code:3ph8sn0x]// The following are required for the Windows Phone Plugin
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Media;
using System.IO;
using System.Runtime.Serialization.Json;
using Microsoft.Devices;
using System.Threading.Tasks;
using Microsoft.Phone.Marketplace;
using Microsoft.Phone.Tasks;
using System.Globalization;
[/code:3ph8sn0x]
MainPage.xaml.cs - Insert the following into code after the "… navigation failures." section
[code:3ph8sn0x] // Convert DB volume to scale
public float dbToScale(Single db)
{
float volume = (Single)Math.Pow(10, db / 20);
volume = volume * (6 - (volume * 3)); // Added to account for quiet sounds being too quiet. Not a technically correct conversion.
return Math.Max(0, Math.Min(1, volume));
}
// Check whether user is playing music on the phones media player
public void checkMusic()
{
FrameworkDispatcher.Update();
if (MediaPlayer.GameHasControl)
{
try
{
Browser.InvokeScript("eval", "window['deviceMusicPlaying'] = false;");
}
catch
{
}
}
else
{
try
{
Browser.InvokeScript("eval", "window['deviceMusicPlaying'] = true;");
}
catch
{
}
}
}
// Sound effect instance
SoundEffectInstance sound = null;
public Dictionary<string, SoundEffectInstance> SoundList = new Dictionary<string, SoundEffectInstance>();
// **********************************************************************
// JavaScript communicating with C#
// **********************************************************************
private async void Browser_ScriptNotify(object sender, NotifyEventArgs e)
{
// Get a comma delimited string from js and convert to array
string valueStr = e.Value;
string[] valueArr = valueStr.Split(',');
// Trim and convert empty strings to null
for (int i = 0; i < valueArr.Length; i++)
{
valueArr[i] = valueArr[i].Trim();
if (string.IsNullOrWhiteSpace(valueArr[i]))
valueArr[i] = null;
}
// Stop music
if (valueArr[0] == "stopMusic")
{
if (MediaPlayer.GameHasControl)
{
FrameworkDispatcher.Update();
MediaPlayer.Stop();
}
}
// Play sound
if (valueArr[0] == "playSound")
{
var file = valueArr[1];
var loop = valueArr[2] == "0" ? false : true;
var db = Single.Parse(valueArr[3], CultureInfo.InvariantCulture);
var volume = Convert.ToSingle(dbToScale(db));
var tag = valueArr[4];
Stream stream = TitleContainer.OpenStream(file);
SoundEffect effect = SoundEffect.FromStream(stream);
sound = effect.CreateInstance();
sound.IsLooped = loop;
sound.Volume = volume;
if (!string.IsNullOrEmpty(tag))
{
if (SoundList.ContainsKey(tag))
{
SoundList[tag].Stop();
}
SoundList[tag] = sound;
}
FrameworkDispatcher.Update();
sound.Play();
}
}
[/code:3ph8sn0x]