aboutsummaryrefslogtreecommitdiff
path: root/RayRoom.NAudio/AudioSampler.cs
diff options
context:
space:
mode:
Diffstat (limited to 'RayRoom.NAudio/AudioSampler.cs')
-rw-r--r--RayRoom.NAudio/AudioSampler.cs46
1 files changed, 46 insertions, 0 deletions
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