Поверхность C# (WPF) / Звуковые эффекты -> Словарь<String, MediaElement>
Из -за отсутствия звуковых эффектов в приложениях Microsoft Surface я попытался создать "звуковой банк" со звуковыми файлами (.wav) в словаре.
Звуковой файл короткий.
путь = PathToFile
Мой "Звуковой банк":
Dictionary<string, MediaElement> soundBank = new Dictionary<string, MediaElement>(29);
soundBank = new Dictionary<string, MediaElement>(20);
soundBank.Add("1", new MediaElement());
soundBank.Add("2", new MediaElement());
soundBank.Add("3", new MediaElement());
soundBank.Add("4", new MediaElement());
soundBank.Add("A", new MediaElement());
soundBank.Add("BE", new MediaElement());
soundBank.Add("CF", new MediaElement());
...
foreach (var item in soundBank)
{
Console.WriteLine(item.Key);
//soundBank[item.Key] = new MediaElement();
soundBank[item.Key].Source = new Uri(path);
soundBank[item.Key].LoadedBehavior = MediaState.Manual;
soundBank[item.Key].UnloadedBehavior = MediaState.Manual;
soundBank[item.Key].Volume = 1;
soundBank[item.Key].MediaEnded += new System.Windows.RoutedEventHandler(mp_MediaEnded);
Если я пытаюсь воспроизвести несколько звуков (on_button_click), звуки задерживаются или просто не воспроизводятся:
public void play(string key)
{
soundBank[key].Stop();
soundBank[key].Play();
}
void mp_MediaEnded(object sender, System.Windows.RoutedEventArgs e)
{
((MediaElement)e.Source).Stop();
}
SoundPlayer и MediaPlayer не подходят, потому что они останавливают все остальные воспроизводимые звуки.
1 ответ
Решение
Сейчас я использую библиотеку irrKlang для своего проекта:
Это очень легко использовать:
using IrrKlang;
...
ISoundEngine engine = new ISoundEngine();
...
engine.Play2D(@"C:\Users\Public\Documents\sound.wav");
В конечном итоге простое решение ^^