2025-06-19 23:24:39 -07:00

54 lines
1.6 KiB
C#

using NAudio.Wave;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Media;
using System.Text;
using System.Threading.Tasks;
namespace qtc_net_client_2.Services
{
public class AudioService : IDisposable
{
public WaveOutEvent? OutputDevice { get; set; }
public AudioFileReader? AudioFileReader { get; set; }
public void PlaySoundEffect(string soundName)
{
if (!File.Exists($"./Sounds/{soundName}.wav")) return;
OutputDevice = new WaveOutEvent();
AudioFileReader = new AudioFileReader($"./Sounds/{soundName}.wav");
OutputDevice.Init(AudioFileReader);
OutputDevice.Play();
return;
}
public void PlaySoundLooped(string soundName, int loopCount)
{
if (!File.Exists($"./Sounds/{soundName}.wav")) return;
OutputDevice = new WaveOutEvent();
AudioFileReader = new AudioFileReader($"./Sounds/{soundName}.wav");
OutputDevice.Init(AudioFileReader);
OutputDevice.Play();
int i = 0;
OutputDevice.PlaybackStopped += (sender, args) =>
{
i++;
if (i == loopCount) { OutputDevice.PlaybackStopped += null; return; }
AudioFileReader.Seek(0, SeekOrigin.Begin);
OutputDevice.Play();
};
}
public void Dispose()
{
if (OutputDevice != null) { OutputDevice.Dispose(); OutputDevice = null; }
if (AudioFileReader != null) { AudioFileReader.Dispose(); AudioFileReader = null; }
}
}
}