[英]How to run C# code from WinPhone 8.1 Universal app when device connect to internet
[英]Playing sounds in C# WinPhone 8.1 App - Sometimes causes exception
我一直在編寫一個小應用程序,它使用C#在WinPhone 8.1上模擬架子鼓。 該應用程序運行但在觸發聲音時經常會導致異常:“ KiDrums.exe中發生了'System.Exception'類型的異常,但未在用戶代碼中處理
附加信息:災難性故障(HRESULT的異常:0x8000FFFF(E_UNEXPECTED))
我相信是由於當我嘗試在同一聲音或另一聲音仍在播放時觸發聲音而引起的。 很難說,因為我無法確定模式。 波紋管是我使用的一些代碼。 我有一個背景圖片,觸摸時有幾個橢圓在上面觸發聲音。
XAML:
<Grid>
<Image x:Name="KiDrums" HorizontalAlignment="Left" Height="620" Margin="10,10,-2,0" VerticalAlignment="Top" Width="392" Source="Assets/KiDrums.jpg" IsDoubleTapEnabled="False" ScrollViewer.VerticalScrollBarVisibility="Disabled" IsHitTestVisible="False" IsTapEnabled="False" ManipulationMode="None"/>
<Ellipse x:Name="RedDrum" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="196" Margin="142,10,0,0" Stroke="Black" VerticalAlignment="Top" Width="248" Opacity="0" Tapped="RedDrum_Tapped" Holding="RedDrum_Holding" DoubleTapped="RedDrum_DoubleTapped"/>
<MediaElement x:Name="Snare" Source="Assets/Snare.wav" AutoPlay="False" Visibility="Collapsed"/>
<MediaElement x:Name="SnareRollLong" Source="Assets/SnareRollLong.wav" AutoPlay="False" Visibility="Collapsed"/>
<MediaElement x:Name="SnareXtraRoll" Source="Assets/SnareXtraRoll.wav" AutoPlay="False" Visibility="Collapsed"/>
CS:
private void RedDrum_Tapped(object sender, TappedRoutedEventArgs e)
{
// Single Snare Hit : Snare.wav
Snare.Play();
}
private void RedDrum_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
{
// Snare Roll : SnareRollLong.wav
SnareRollLong.Play();
}
private void RedDrum_Holding(object sender, HoldingRoutedEventArgs e)
{
// Snare Extra Long Roll : SnareXtraRoll.wav
SnareXtraRoll.Play();
}
有誰知道我是否應該使用任何額外的代碼來確保其流暢運行? 我是否可以假設問題出在聲音的演奏上,對嗎? 感謝您提供的任何幫助。
如果只想播放“效果”,則應使用XNA Framework SoundEffect
類並調用Play()方法來播放,或者可以創建SoundEffectInstance
來停止和暫停它。 像這樣:
public class SoundEffectHelper : IDisposable
{
public TimeSpan Duration { get; private set; }
private SoundEffectInstance soundEffect;
public SoundEffectHelper(string path)
{
using (Stream stream = TitleContainer.OpenStream(path))
{
SoundEffect effect = SoundEffect.FromStream(stream);
this.Duration = effect.Duration;
this.soundEffect = effect.CreateInstance();
FrameworkDispatcher.Update();
}
}
public void Play()
{
this.soundEffect.Play();
}
public void Stop()
{
this.soundEffect.Stop(true);
}
public void Pause()
{
this.soundEffect.Pause();
}
public void Resume()
{
this.soundEffect.Resume();
}
public void Dispose()
{
this.soundEffect.Dispose();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.