Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Added basic media support (WAV and MP3 for now) and updated demo to r…

…eflect.
  • Loading branch information...
commit 17595eb2653d2f105c1c383297d57340208c7bbd 1 parent 1d9ce3e
@filmaj filmaj authored
View
4 winmo/CommandManager.cs
@@ -6,11 +6,11 @@ namespace PhoneGap {
class CommandManager {
- private Command[] commands = new Command[1];
+ private Command[] commands = new Command[2];
public CommandManager() {
commands[0] = new InitializationCommand();
- //commands[1] = new MediaCommand();
+ commands[1] = new MediaCommand();
}
public String processInstruction(String instruction) {
View
91 winmo/MediaCommand.cs
@@ -0,0 +1,91 @@
+using System;
+using System.Linq;
+using System.Collections.Generic;
+using System.Text;
+using System.IO;
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+namespace PhoneGap
+{
+ // Need to invoke unmanaged mobile native code from .NET to play sounds. Woot!
+ internal partial class PInvoke
+ {
+ private static IntPtr hSound = IntPtr.Zero; // Pointer/handle of currently-playing sound.
+ const int SND_SCOPE_PROCESS = 0x1;
+ private enum Flags
+ {
+ SND_SYNC = 0x0000, /* play synchronously (default) */
+ SND_ASYNC = 0x0001, /* play asynchronously */
+ SND_NODEFAULT = 0x0002, /* silence (!default) if sound not found */
+ SND_MEMORY = 0x0004, /* pszSound points to a memory file */
+ SND_LOOP = 0x0008, /* loop the sound until next sndPlaySound */
+ SND_NOSTOP = 0x0010, /* don't stop any currently playing sound */
+ SND_NOWAIT = 0x00002000, /* don't wait if the driver is busy */
+ SND_ALIAS = 0x00010000, /* name is a registry alias */
+ SND_ALIAS_ID = 0x00110000, /* alias is a predefined ID */
+ SND_FILENAME = 0x00020000, /* name is file name */
+ SND_RESOURCE = 0x00040004 /* name is resource name or atom */
+ }
+
+
+ [DllImport("aygshell.dll")]
+ static extern uint SndOpen(string pszSoundFile, ref IntPtr phSound);
+
+ [DllImport("aygshell.dll")]
+ static extern uint SndPlayAsync(IntPtr hSound, uint dwFlags);
+
+ [DllImport("aygshell.dll")]
+ static extern uint SndClose(IntPtr hSound);
+
+ [DllImport("aygshell.dll")]
+ static extern uint SndStop(int SoundScope, IntPtr hSound);
+ public static bool PlaySound(string path)
+ {
+ if (File.Exists(path))
+ {
+ SndOpen(path, ref hSound);
+ SndPlayAsync(hSound, 0);
+ return true;
+ }
+ else return false;
+ }
+ public static void StopSound()
+ {
+ SndClose(hSound);
+ SndStop(SND_SCOPE_PROCESS, hSound);
+ hSound = IntPtr.Zero;
+ }
+ }
+ class MediaCommand : Command
+ {
+ private string soundFileName = "";
+ private string soundExtension = "";
+ Boolean Command.accept(String instruction)
+ {
+ Boolean retVal = false;
+ if (instruction.StartsWith("/media"))
+ {
+ int firstSlash = instruction.IndexOf('/',5);
+ soundFileName = instruction.Substring(firstSlash);
+ soundExtension = soundFileName.Substring(soundFileName.LastIndexOf('.'));
+ // TODO: Test what other sound file types work.
+ switch (soundExtension)
+ {
+ case ".wav":
+ case ".mp3":
+ retVal = true;
+ break;
+ }
+ }
+ return retVal;
+ }
+ String Command.execute(String instruction)
+ {
+ Assembly assembly = Assembly.GetExecutingAssembly();
+ string path = "\\Program Files\\" + assembly.GetName().Name + "\\" + soundFileName.Substring(1).Replace("/","\\");
+ if (PInvoke.PlaySound(path)) return "";
+ else return ";alert(\"[PhoneGap Error] Could not find sound file with path '" + path + "'.\");";
+ }
+ }
+}
View
8 winmo/www/index.html
@@ -9,16 +9,20 @@
document.getElementById('resultText').innerText = newText;
}
function playApplause() {
- media.playSound('data:///www/media/applause.wav');
+ media.playSound('www/media/applause.wav');
showLabel('CLAP CLAP CLAP!');
}
+ function playBirds() {
+ media.playSound('www/media/bird.mp3');
+ }
</script>
</head>
<body onload="device.init();"> <!-- on load call init to make sure we bridge to device properly-->
<p>This is an HTML page.</p><br />
<a href="javascript:showLabel(device.name);">Show me the device model/name</a><br />
<a href='javascript:showLabel(device.uuid);'>Show me the device UUID</a><br />
- <!--<a href="javascript:playApplause();">Play expected audience response ;)</a><br />-->
+ <a href="javascript:playApplause();">Play applause</a><br />
+ <a href="javascript:playBirds();">Play birds</a><br />
<br />
<div id="resultLabel" style="width:100%;height:20px;background-color:#dddddd;padding:2px;margin:5px;border:solid 1px black;"><p id="resultText" style="margin:0 auto;"></p></div>
<br />
View
5 winmo/www/js/media.js
@@ -0,0 +1,5 @@
+var media = {
+ playSound: function(filename) {
+ device.exec("media",[filename]);
+ }
+};
View
BIN  winmo/www/media/applause.wav
Binary file not shown
View
BIN  winmo/www/media/bird.mp3
Binary file not shown
Please sign in to comment.
Something went wrong with that request. Please try again.