From 51050a02d4d5eff361cfa697eeba777ddafa085a Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 15 Apr 2017 14:39:24 -0400 Subject: Use NAudio to handle system sounds --- ShiftOS_TheReturn/AudioManager.cs | 62 ++++++++++++++------------------------- 1 file changed, 22 insertions(+), 40 deletions(-) (limited to 'ShiftOS_TheReturn') diff --git a/ShiftOS_TheReturn/AudioManager.cs b/ShiftOS_TheReturn/AudioManager.cs index 7466eeb..54ee1f1 100644 --- a/ShiftOS_TheReturn/AudioManager.cs +++ b/ShiftOS_TheReturn/AudioManager.cs @@ -42,58 +42,40 @@ namespace ShiftOS.Engine private static IAudioProvider _provider = null; private static bool _running = true; + public static void Stop() + { + _out?.Stop(); + _reader?.Dispose(); + _out?.Dispose(); + } + public static void Init(IAudioProvider _p) { -#if !NOSOUND _provider = _p; - AppearanceManager.OnExit += () => - { - _running = false; - _out?.Stop(); - _reader?.Dispose(); - _out?.Dispose(); - System.IO.File.Delete("temp.mp3"); - }; - var t = new Thread(() => - { - SaveSystem.GameReady += () => - { - while(_out == null) - { + } - } - _out.Volume = _provider.Volume; - }; - Random rnd = new Random(); - while(_running == true) + public static void SetVolume(float volume) + { + _provider.Volume = volume; //persist between songs + _out.Volume = volume; + } + + public static void Play(string file) + { + new Thread(() => + { + try { - int track = rnd.Next(0, _provider.Count); - byte[] mp3 = _provider.GetTrack(track); - System.IO.File.WriteAllBytes("temp.mp3", mp3); - _reader = new AudioFileReader("temp.mp3"); + _reader = new AudioFileReader(file); _out = new WaveOut(); _out.Init(_reader); _out.Volume = _provider.Volume; - _out.Play(); - while(_out.PlaybackState == PlaybackState.Playing) - { - Thread.Sleep(5000); //even when the player isn't playing, this will give a good delay between songs. - } - _reader.Dispose(); - _out.Dispose(); } - }); - t.IsBackground = true; - t.Start(); -#endif + catch { } + }).Start(); } - public static void SetVolume(float volume) - { - _provider.Volume = volume; //persist between songs - _out.Volume = volume; - } internal static void Kill() { -- cgit v1.2.3