From 79d8da74ac98166ec9e9dae7eff820cd9842edb3 Mon Sep 17 00:00:00 2001 From: bonmas14 Date: Sun, 29 Oct 2023 21:03:26 +0300 Subject: basic functionality + compute bound --- RayRoom.NAudio/AudioSampler.cs | 46 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 RayRoom.NAudio/AudioSampler.cs (limited to 'RayRoom.NAudio/AudioSampler.cs') diff --git a/RayRoom.NAudio/AudioSampler.cs b/RayRoom.NAudio/AudioSampler.cs new file mode 100644 index 0000000..2aebcce --- /dev/null +++ b/RayRoom.NAudio/AudioSampler.cs @@ -0,0 +1,46 @@ +using NAudio.Wave; +using RayRoom.Core; + +namespace RayRoom.NAudioEngine +{ + public class AudioSampler : ISampleHandler, IDisposable + { + public bool Loop { get; set; } + + private bool disposed; + + private AudioFileReader reader; + private ISampleProvider provider; + + public AudioSampler(string file, bool looping = false) + { + disposed = false; + reader = new AudioFileReader(file); + Loop = looping; + + provider = reader.ToSampleProvider(); + provider = provider.ToMono(); + } + + public int WriteTo(float[] buffer, int offset, int count) + { + if (disposed) throw new ObjectDisposedException("AudioSampler is disposed"); + + int length = provider.Read(buffer, offset, count); + + if (Loop && length < count) + { + reader.Position = 0; + length += provider.Read(buffer, length, count - length); + } + + return length; + } + + public void Dispose() + { + reader.Close(); + reader.Dispose(); + } + } +} \ No newline at end of file -- cgit v1.2.3-70-g09d2