Video and Mediahttp://forums.silverlight.net//20.aspx/1?Video+and+MediaDiscussions about video and media in Silverlight applicationsMon, 01 Jan 0001 00:00:00 -05002010399http://forums.silverlight.net//p/3599/10399.aspx/1?Looping+MP3+or+WMA+without+a+gapLooping MP3 or WMA without a gap <p>I want background music with a beat to back my game. It's only a short loop, different on each level.. but when it loops there is an evident gap. The solution I am using to create looping is the same one that a forum search returned, i.e. attaching a MediaEnded event, setting the start pos and playing again. If anyone has any pointers for gapless looping in Silverlight that would be much appreciated!</p> <p>Cheers!<br> Josh</p> 2007-08-12T21:07:08-04:0010400http://forums.silverlight.net//p/3599/10400.aspx/1?Re+Looping+MP3+or+WMA+without+a+gapRe: Looping MP3 or WMA without a gap <p>Interestingly, I thought I'd try using WAV files to eliminate the gap, but then I get an AG_E_INVALID_FILE_FORMAT error! Silverlight supports wave files, so not sure what that is about...</p> 2007-08-12T21:10:40-04:0010412http://forums.silverlight.net//p/3599/10412.aspx/1?Re+Looping+MP3+or+WMA+without+a+gapRe: Looping MP3 or WMA without a gap <p class="MsoNormal" style="margin-bottom:0.0001pt; line-height:normal">After trying lots of threading techniques and them some digging around it appears Silverlight does not <i>yet</i> have it's BackgroundWorker class ready, which makes it very difficult to initiate some UI changes from a separate thread (all UI changed must be done in the same thread that the UI was created in). I wanted to loop two sounds, without a gap between them. Achievable with just one loop, but two loops of differing lengths and you run out of HtmlTimer's scope (unless I'm missing something). So a thread kicks off, and a super quick HtmlTimer (i.e. set to 1) keeps checking for any updates to the _queue, and then performs them if necessary. Also, you may wonder why I create new MediaElements as opposed to restarting the old one's. It just performed a lot better this way round - which leads to garbage coleciton; I have done some in that I am removing the old MediaElements when they're done from the Children collection. This got rid of 98% of garbage building up on each loop, but there is still a small memory leak in this code, probably because the MediaElements are not destroyed from memory.<br> </p> <p class="MsoNormal" style="margin-bottom:0.0001pt; line-height:normal">&nbsp;</p> <p class="MsoNormal" style="margin-bottom:0.0001pt; line-height:normal"><b>A horrible, nasty, uncommented and unrefactored (it's too late for that sort of thing!) semi-solution to my problem</b> (that doesn't get the two samples in perfect harmony, but darn close.. roll on BackgroundWorker):</p> <p class="MsoNormal" style="margin-bottom:0.0001pt; line-height:normal">&nbsp;</p> <p class="MsoNormal" style="margin-bottom:0.0001pt; line-height:normal"><span style="font-size:10pt; font-family:'Courier New'"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">public</span> <span style="color:blue">partial</span> <span style="color:blue">class</span> <span style="color:rgb(43,145,175)">Page</span> : <span style="">Canvas<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">private</span> <span style="color:rgb(43,145,175)"> Dictionary</span>&lt;<span style="color:rgb(43,145,175)">MediaElement</span>, <span style="color:blue"> int</span>&gt; _mediaElementPositions = <span style="color:blue">new</span> <span style="color:rgb(43,145,175)"> Dictionary</span>&lt;<span style="color:rgb(43,145,175)">MediaElement</span>, <span style="color:blue"> int</span>&gt;();<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">private</span> <span style="color:rgb(43,145,175)"> List</span>&lt;<span style="color:rgb(43,145,175)">MediaElement</span>&gt; _loopedAudios = <span style="color:blue">new</span> <span style="color:rgb(43,145,175)">List</span>&lt;<span style="color:rgb(43,145,175)">MediaElement</span>&gt;();<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">private</span> <span style="color:rgb(43,145,175)"> List</span>&lt;<span style="color:blue">int</span>&gt; _queue = <span style="color:blue"> new</span> <span style="color:rgb(43,145,175)">List</span>&lt;<span style="color:blue">int</span>&gt;();&nbsp;<br> <span style=""><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">public</span> <span style="color:blue"> void</span> Page_Loaded(<span style="color:blue">object</span> o, <span style="color:rgb(43,145,175)"> EventArgs</span> e)<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<br> <span style=""></span></span><span style="font-size:10pt; font-family:'Courier New'"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:green">// Required to initialize variables</span></span> </p> <p class="MsoNormal" style="margin-bottom:0.0001pt; line-height:normal"><span style="font-size:10pt; font-family:'Courier New'"><span style=""></span><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>InitializeComponent();</span></p> <p class="MsoNormal" style="margin-bottom:0.0001pt; line-height:normal"><span style="font-size:10pt; font-family:'Courier New'; color:green"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size:10pt; font-family:'Courier New'">PlayLoopedSound(</span><span style="font-size:10pt; font-family:'Courier New'; color:green"><span style="color:rgb(163,21,21)"></span></span><span style="font-size:10pt; font-family:'Courier New'; color:green"><span style=""></span><span style="color:rgb(163,21,21)">&quot;Loop1.wma&quot;</span></span><span style="font-size:10pt; font-family:'Courier New'">, 0.5, 1);</span><span style="font-size:10pt; font-family:'Courier New'; color:green"><span style="color:rgb(163,21,21)"></span><br> <span style=""></span></span><span style="font-size:10pt; font-family:'Courier New'"><span style=""></span><span style=""></span>&nbsp;&nbsp;<span style=""> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>PlayLoopedSound(</span><span style="font-size:10pt; font-family:'Courier New'; color:green"><span style="color:rgb(163,21,21)">&quot;Loop2.wma&quot;</span></span><span style="font-size:10pt; font-family:'Courier New'">, 0.5, -1);<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p> <p class="MsoNormal" style="margin-bottom:0.0001pt; line-height:normal"><span style="font-size:10pt; font-family:'Courier New'"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">void</span> PlayLoopedSound(<span style="color:blue">string</span> source, <span style="color:blue">double</span> volume, <span style="color:blue">double</span> balance)<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:rgb(43,145,175)">MediaElement</span> me = <span style="color:blue">new</span> <span style="color:rgb(43,145,175)">MediaElement</span>();<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>_loopedAudios.Add(me);<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>me.Source = <span style="color:blue">new</span> <span style="color:rgb(43,145,175)">Uri</span>(source, <span style="color:rgb(43,145,175)"> UriKind</span>.Relative);<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>me.Volume = volume;<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>me.Balance = balance;<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>me.MediaOpened &#43;= <span style="color:blue"> new</span> <span style="color:rgb(43,145,175)">EventHandler</span>(SetToLoop);<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Children.Add(me);<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:rgb(43,145,175)">HtmlTimer</span> timer = <span style="color:blue">new</span> <span style="color:rgb(43,145,175)">HtmlTimer</span>();<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>timer.Interval = 1;<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>timer.Tick &#43;= <span style="color:blue">new</span> <span style="color:rgb(43,145,175)">EventHandler</span>(timer_Tick);<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>timer.Enabled = <span style="color:blue"> true</span>;<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>timer.Start();<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p> <p class="MsoNormal" style="margin-bottom:0.0001pt; line-height:normal"><span style="font-size:10pt; font-family:'Courier New'">&nbsp;<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">void</span> timer_Tick(<span style="color:blue">object</span> sender, <span style="color:rgb(43,145,175)">EventArgs</span> e)<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">if</span> (_queue.Count &gt; 0)<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>CloneAndAddAudio(_loopedAudios[_queue[0]]);<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>_queue.RemoveAt(0);<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p> <p class="MsoNormal" style="margin-bottom:0.0001pt; line-height:normal"><span style="font-size:10pt; font-family:'Courier New'">&nbsp;<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">void</span> SetToLoop(<span style="color:blue">object</span> sender, <span style="color:rgb(43,145,175)">EventArgs</span> e)<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<br> <span style="">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:rgb(43,145,175)">MediaElement</span> me = sender <span style="color:blue">as</span> <span style="color:rgb(43,145,175)">MediaElement</span>;<br> <span style=""></span></span><span style="font-size:10pt; font-family:'Courier New'"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:green">// The 50 milliseconds removes the gap between loops<br> </span></span><span style="font-size:10pt; font-family:'Courier New'"><span style="">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:rgb(43,145,175)">AudioLooper</span> al = <span style="color:blue"> new</span> <span style="color:rgb(43,145,175)">AudioLooper</span>((<span style="color:blue">int</span>)me.NaturalDuration.TimeSpan.TotalMilliseconds - 50, _loopedAudios.IndexOf(me));<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; </span>al.AudioLooped &#43;= <span style="color:blue"> new</span> <span style="color:rgb(43,145,175)">AudioLoopedHandler</span>(al_AudioLooped);<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color:rgb(43,145,175)">ThreadStart</span> ts = <span style="color:blue">new</span> <span style="color:rgb(43,145,175)">ThreadStart</span>(al.Play);<br> <span style="">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:rgb(43,145,175)">Thread</span> t = <span style="color:blue">new</span> <span style="color:rgb(43,145,175)">Thread</span>(ts);<br> <span style="">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>t.Start();<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p> <p class="MsoNormal" style="margin-bottom:0.0001pt; line-height:normal"><span style="font-size:10pt; font-family:'Courier New'"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">void</span> al_AudioLooped(<span style="color:blue">object</span> sender, <span style="color:rgb(43,145,175)">AudioLoopedEventArgs</span> e)<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>_queue.Add(e.LoopedAudioIndex);<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}&nbsp;<br> <span style=""><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">private</span> <span style="color:blue"> void</span> CloneAndAddAudio(<span style="color:rgb(43,145,175)">MediaElement</span> me)<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:rgb(43,145,175)">MediaElement</span> meNew = <span style="color:blue">new</span> <span style="color:rgb(43,145,175)">MediaElement</span>();<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>meNew.Source = me.Source;<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>meNew.Volume = me.Volume;<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>meNew.Balance = me.Balance;<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>_loopedAudios[_loopedAudios.IndexOf(me)] = meNew;<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Children.Remove(me);<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Children.Add(meNew);<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}&nbsp;<br> <span style=""><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">public</span> <span style="color:blue">delegate</span> <span style="color:blue">void</span> <span style="color:rgb(43,145,175)">AudioLoopedHandler</span>(<span style="color:blue">object</span> sender, <span style="color:rgb(43,145,175)">AudioLoopedEventArgs</span> e);</span></p> <p class="MsoNormal" style="margin-bottom:0.0001pt; line-height:normal"><span style="font-size:10pt; font-family:'Courier New'"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">public</span> <span style="color:blue">class</span> <span style="color:rgb(43,145,175)">AudioLoopedEventArgs</span> : <span style=""> EventArgs<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">private</span> <span style="color:blue"> int</span> _loopedAudioIndex;&nbsp;<br> <span style=""><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">public</span> <span style="color:blue"> int</span> LoopedAudioIndex<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">get</span> { <span style="color:blue"> return</span> _loopedAudioIndex; }<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">set</span> { _loopedAudioIndex = <span style="color:blue">value</span>; }<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p> <p class="MsoNormal" style="margin-bottom:0.0001pt; line-height:normal"><span style="font-size:10pt; font-family:'Courier New'"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">class</span> <span style="">AudioLooper<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">public</span> <span style="color:blue"> event</span> <span style="color:rgb(43,145,175)">AudioLoopedHandler</span> AudioLooped;<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">private</span> <span style="color:blue"> int</span> _loopLength;<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">private</span> <span style="color:blue"> int</span> _loopedAudioIndex;&nbsp;<br> <span style=""><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">public</span> <span style="color:blue"> int</span> LoopedAudioIndex<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">get</span> { <span style="color:blue"> return</span> _loopedAudioIndex; }<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">set</span> { _loopedAudioIndex = <span style="color:blue">value</span>; }<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}&nbsp;<br> <span style=""><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">public</span> <span style="color:blue"> int</span> LoopLength<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">get</span> { <span style="color:blue"> return</span> _loopLength; }<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p> <p class="MsoNormal" style="margin-bottom:0.0001pt; line-height:normal"><span style="font-size:10pt; font-family:'Courier New'"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">public</span> AudioLooper(<span style="color:blue">int</span> loopLength, <span style="color:blue">int</span> loopedAudioIndex)<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>_loopedAudioIndex = loopedAudioIndex;<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>_loopLength = loopLength;<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}&nbsp;</span></p> <p class="MsoNormal" style="margin-bottom:0.0001pt; line-height:normal"><span style="font-size:10pt; font-family:'Courier New'"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">public</span> <span style="color:blue">void</span> Play()<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">while</span> (<span style="color:blue">true</span>)<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:rgb(43,145,175)">Thread</span>.Sleep(LoopLength);<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:rgb(43,145,175)">AudioLoopedEventArgs</span> e = <span style="color:blue">new</span> <span style="color:rgb(43,145,175)">AudioLoopedEventArgs</span>();<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>e.LoopedAudioIndex = LoopedAudioIndex;<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>OnAudioLooped(e);<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}&nbsp;</span></p> <p class="MsoNormal"><span style="font-size:10pt; line-height:115%; font-family:'Courier New'"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color:blue">protected</span> <span style="color:blue">virtual</span> <span style="color:blue">void</span> OnAudioLooped(<span style="color:rgb(43,145,175)">AudioLoopedEventArgs</span> e)<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>AudioLooped(<span style="color:blue">this</span>, e);<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<br> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p> 2007-08-13T01:45:02-04:0024757http://forums.silverlight.net//p/3599/24757.aspx/1?Re+Looping+MP3+or+WMA+without+a+gapRe: Looping MP3 or WMA without a gap <p>This can be achieved by adding Markers to your MediaElement. Add a marker&nbsp;on the time where you want to loop the file. When the marker is reached, set the position of the MediaElement to 0.</p> <p>Something like this:</p> <font size="2"></font><font color="#0000ff" size="2">void</font><font size="2"> mdeBackgroundMusic_MediaOpened(</font><font color="#0000ff" size="2">object</font><font size="2"> sender, </font><font color="#2b91af" size="2">EventArgs</font><font size="2"> e)<br> {<br> </font><font color="#2b91af" size="2">TimelineMarker</font><font size="2"> marker = </font><font color="#0000ff" size="2">new</font><font size="2"> </font><font color="#2b91af" size="2">TimelineMarker</font><font size="2">();<br> marker.Time = </font><font color="#2b91af" size="2">TimeSpan</font><font size="2">.FromMilliseconds(TIME_OF_MP3_IN_MILLISECONDS);<br> marker.Text = </font><font color="#a31515" size="2">&quot;foo&quot;</font><font size="2">; </font> <font color="#008000" size="2">// Dummy value requred<br> </font><font size="2">marker.Type = </font><font color="#a31515" size="2">&quot;yada&quot;</font><font size="2">; </font><font color="#008000" size="2">// Dummy value requred<br> </font><font color="#008000" size="2"><br> </font><font size="2">mdeBackgroundMusic.Markers.Add(marker);<br> mdeBackgroundMusic.MarkerReached &#43;= </font><font color="#0000ff" size="2">new</font><font size="2"> </font><font color="#2b91af" size="2">TimelineMarkerEventHandler</font><font size="2">(mdeBackgroundMusic_MarkerReached);<br> }</font><font size="2"> <p></font><font color="#0000ff" size="2">void</font><font size="2"> mdeBackgroundMusic_MarkerReached(</font><font color="#0000ff" size="2">object</font><font size="2"> sender, </font><font color="#2b91af" size="2">TimelineMarkerEventArgs</font><font size="2"> e)<br> {<br> mdeBackgroundMusic.Position = </font><font color="#2b91af" size="2">TimeSpan</font><font size="2">.FromMilliseconds(0);<br> }</font></p> <p><font size="2">HTH,<br> Billy</p> </font> 2007-12-28T00:54:35-05:0027081http://forums.silverlight.net//p/3599/27081.aspx/1?Re+Looping+MP3+or+WMA+without+a+gapRe: Looping MP3 or WMA without a gap <p>Hi,</p> <p>&nbsp;Then is there any reason why my SilverLight app doesn't play wav file.&nbsp; Its a valid wav file that Media Player 11 plays well.</p> <p>The same sound plays as .mp3 but .wav NOPE !</p> 2008-01-18T22:12:41-05:0056956http://forums.silverlight.net//p/3599/56956.aspx/1?Re+Looping+MP3+or+WMA+without+a+gapRe: Looping MP3 or WMA without a gap <p>Has anybody got Billy Porter's marker method to work without a gap?&nbsp; I haven't.&nbsp; If I use the MediaElement's duration as TIME_OF_MP3 then the MarkerVentHandler is never called.&nbsp; I figured I'd subtract some milliseconds, which works, but I still get a gap.</p> 2008-06-03T17:25:11-04:00140331http://forums.silverlight.net//p/3599/140331.aspx/1?Re+Looping+MP3+or+WMA+without+a+gapRe: Looping MP3 or WMA without a gap <p>One thing you can not do when looping sounds is use Natural Duration.&nbsp; It is <em> way</em> off.&nbsp; You have to figure out the duration with another program.&nbsp; I used Audacity and zoomed in as far as possible and get a passable result.</p> <p>... even then you can't rely on getting an accurate result because you don't know when exactly the thread that is responsible is going to go, and the point you wanted may have passed.</p> <p>&nbsp;So truely accurate looping is impossible.</p> 2008-12-01T19:10:38-05:00141811http://forums.silverlight.net//p/3599/141811.aspx/1?Re+Looping+MP3+or+WMA+without+a+gapRe: Looping MP3 or WMA without a gap <p>As we all know by now, wav files aren't supported yet. The problem is that mp3 files add silence to the start of a file, and wma add silence to the end of a file, coupled with the fact that the time it takes for an audio file to restart or reposition is not constant. With this in mind it seems that when trying to do seamless looping with the SL Media Player,&nbsp;results will always be at best erratic. - My workaround was to us the &quot;bgsound&quot; HTML object, which DOES support wav files and looping.</p> <p>So with your WAV file at the ready, add the following line&nbsp;to your html Page:-</p> <font color="#0000ff" size="2"><font color="#0000ff" size="2"> <p>&lt;</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">bgsound</font></font><font size="2"> </font><font color="#ff0000" size="2"><font color="#ff0000" size="2">id</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">=&quot;oBGSound&quot;</font></font><font size="2"> </font><font color="#ff0000" size="2"><font color="#ff0000" size="2">loop</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">=&quot;-1&quot;</font></font><font size="2"> </font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&gt;</font></font></p> <p><font color="#0000ff">the following&nbsp;xaml page gives you a button to start the loop, and a slider to control the volume :-</font></p> <p><font color="#0000ff" size="2"><font color="#0000ff" size="2">THE XAML MARKUP-</font></font></p> <font color="#0000ff" size="2"><font color="#0000ff" size="2"> <p>&lt;</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">UserControl</font></font><font color="#ff0000" size="2"><font color="#ff0000" size="2"> x</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">:</font></font><font color="#ff0000" size="2"><font color="#ff0000" size="2">Class</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">=&quot;SilverlightApplication24.Page&quot;</p> </font></font><font size="2"></font><font color="#ff0000" size="2"><font color="#ff0000" size="2">xmlns</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;</font></font><font size="2"> </font><font size="2"> <p></font><font color="#ff0000" size="2"><font color="#ff0000" size="2">xmlns</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">:</font></font><font color="#ff0000" size="2"><font color="#ff0000" size="2">x</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;&gt;</p> </font></font><font color="#a31515" size="2"><font color="#a31515" size="2"> <p></font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&lt;</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">Canvas</font></font><font color="#ff0000" size="2"><font color="#ff0000" size="2"> x</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">:</font></font><font color="#ff0000" size="2"><font color="#ff0000" size="2">Name</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">=&quot;LayoutRoot&quot;</font></font><font color="#ff0000" size="2"><font color="#ff0000" size="2"> Background</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">=&quot;White&quot;&gt;</p> </font></font><font color="#a31515" size="2"><font color="#a31515" size="2"> <p></font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&lt;</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">Button</font></font><font color="#ff0000" size="2"><font color="#ff0000" size="2"> Height</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">=&quot;25&quot;</font></font><font color="#ff0000" size="2"><font color="#ff0000" size="2"> Width</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">=&quot;70&quot;</font></font><font color="#ff0000" size="2"><font color="#ff0000" size="2"> Content</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">=&quot;Play Loop&quot;</font></font><font color="#ff0000" size="2"><font color="#ff0000" size="2"> Click</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">=&quot;playme&quot;&gt;&lt;/</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">Button</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&gt;</p> </font></font><font color="#a31515" size="2"><font color="#a31515" size="2"> <p></font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&lt;</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">TextBlock</font></font><font color="#ff0000" size="2"><font color="#ff0000" size="2"> x</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">:</font></font><font color="#ff0000" size="2"><font color="#ff0000" size="2">Name</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">=&quot;volcount&quot;</font></font><font color="#ff0000" size="2"><font color="#ff0000" size="2"> Text</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">=&quot;100&quot;</font></font><font color="#ff0000" size="2"><font color="#ff0000" size="2"> Canvas.Left</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">=&quot;190&quot;</font></font><font color="#ff0000" size="2"><font color="#ff0000" size="2"> Canvas.Top</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">=&quot;4&quot;</font></font><font color="#ff0000" size="2"><font color="#ff0000" size="2"> FontSize</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">=&quot;12&quot;&gt;&lt;/</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">TextBlock</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&gt;</p> </font></font><font color="#a31515" size="2"><font color="#a31515" size="2"> <p></font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&lt;</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">Slider</font></font><font color="#ff0000" size="2"><font color="#ff0000" size="2"> x</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">:</font></font><font color="#ff0000" size="2"><font color="#ff0000" size="2">Name</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">=&quot;volslid&quot;</font></font><font color="#ff0000" size="2"><font color="#ff0000" size="2"> Value</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">=&quot;0&quot;</font></font><font color="#ff0000" size="2"><font color="#ff0000" size="2"> ValueChanged</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">=&quot;setvol&quot;</font></font><font color="#ff0000" size="2"><font color="#ff0000" size="2"> Canvas.Top</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">=&quot;4&quot;</font></font><font color="#ff0000" size="2"><font color="#ff0000" size="2"> Canvas.Left</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">=&quot;80&quot;</font></font><font color="#ff0000" size="2"><font color="#ff0000" size="2"> Width</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">=&quot;100&quot;</font></font><font color="#ff0000" size="2"><font color="#ff0000" size="2"> Minimum</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">=&quot;-7000&quot;</font></font><font color="#ff0000" size="2"><font color="#ff0000" size="2"> Maximum</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">=&quot;0&quot;&gt;&lt;/</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">Slider</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&gt;</p> </font></font><font color="#a31515" size="2"><font color="#a31515" size="2"></font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&lt;/</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">Canvas</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&gt;</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2"> <p>&lt;/</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">UserControl</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&gt;</p> </font></font> <p><font color="#0000ff" size="2"><font color="#0000ff" size="2">END XAML MARKUP</font></font></p> <p><font color="#0000ff">the page.xaml.cs gives you the functions:-</font></p> <p><font color="#0000ff" size="2"><font color="#0000ff" size="2">page.xaml.cs MARKUP:-</font></font></p> <font color="#0000ff" size="2"><font color="#0000ff" size="2"><font color="#0000ff" size="2"><font color="#0000ff" size="2"> <p>using</font></font><font size="2"><font color="#000000"> System;</font></p> </font><font color="#0000ff" size="2"><font color="#0000ff" size="2"> <p>using</font></font><font size="2"><font color="#000000"> System.Windows.Browser;</font></p> </font><font color="#0000ff" size="2"><font color="#0000ff" size="2"> <p>using</font></font><font size="2"><font color="#000000"> System.Windows.Controls;</font></p> </font><font color="#0000ff" size="2"><font color="#0000ff" size="2">namespace</font></font><font size="2"><font color="#000000"> SilverlightApplication24</font></font></font></font><font size="2"> <p>{</p> <p></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">public</font></font><font size="2"> </font><font color="#0000ff" size="2"><font color="#0000ff" size="2">partial</font></font><font size="2"> </font><font color="#0000ff" size="2"><font color="#0000ff" size="2">class</font></font><font size="2"> </font><font color="#2b91af" size="2"><font color="#2b91af" size="2">Page</font></font><font size="2"> : </font><font color="#2b91af" size="2"><font color="#2b91af" size="2">UserControl</p> </font></font><font size="2"> <p>{</p> </font><font color="#0000ff" size="2"><font color="#0000ff" size="2">public</font></font><font size="2"> Page()</font><font size="2"> <p>{</p> <p>InitializeComponent();</p> <p>}</p> </font><font color="#0000ff" size="2"><font color="#0000ff" size="2">private</font></font><font size="2"> </font><font color="#0000ff" size="2"><font color="#0000ff" size="2">void</font></font><font size="2"> playme(</font><font color="#0000ff" size="2"><font color="#0000ff" size="2">object</font></font><font size="2"> sender, </font><font color="#2b91af" size="2"><font color="#2b91af" size="2">EventArgs</font></font><font size="2"> e)</font><font size="2"> <p>{</p> </font><font color="#2b91af" size="2"><font color="#2b91af" size="2">HtmlPage</font></font><font size="2">.Document.GetElementById(</font><font color="#a31515" size="2"><font color="#a31515" size="2">&quot;oBGSound&quot;</font></font><font size="2">).SetProperty(</font><font color="#a31515" size="2"><font color="#a31515" size="2">&quot;src&quot;</font></font><font size="2">, </font><font color="#a31515" size="2"><font color="#a31515" size="2">&quot;raw1.wav&quot;</font></font><font size="2">); </font><font size="2"> <p>}</p> </font><font color="#0000ff" size="2"><font color="#0000ff" size="2">private</font></font><font size="2"> </font><font color="#0000ff" size="2"><font color="#0000ff" size="2">void</font></font><font size="2"> setvol(</font><font color="#0000ff" size="2"><font color="#0000ff" size="2">object</font></font><font size="2"> sender, </font><font color="#2b91af" size="2"><font color="#2b91af" size="2">EventArgs</font></font><font size="2"> e)</font><font size="2"> <p>{</p> </font><font color="#2b91af" size="2"><font color="#2b91af" size="2">HtmlPage</font></font><font size="2">.Document.GetElementById(</font><font color="#a31515" size="2"><font color="#a31515" size="2">&quot;oBGSound&quot;</font></font><font size="2">).SetProperty(</font><font color="#a31515" size="2"><font color="#a31515" size="2">&quot;volume&quot;</font></font><font size="2">, volslid.Value);</font><font size="2">volcount.Text = </font><font color="#a31515" size="2"><font color="#a31515" size="2">&quot;&quot;</font></font><font size="2"> &#43; </font><font color="#2b91af" size="2"><font color="#2b91af" size="2">Math</font></font><font size="2">.Round((volslid.Value/70)&#43;(100*1)/1);</font><font size="2"> <p>}</p> <p>&nbsp;</p> <p>}</p> <p>}</p> <p>More info on the bgsound object here :- <a href="http://msdn.microsoft.com/en-gb/library/ms535198(VS.85).aspx"> http://msdn.microsoft.com/en-gb/library/ms535198(VS.85).aspx</a></p> <p>Hope this helps</p> <p>Regards, Marc.</p> </font> 2008-12-03T19:13:40-05:00