aboutsummaryrefslogtreecommitdiff
path: root/RayRoom.NAudio/AudioSampler.cs
diff options
context:
space:
mode:
authorbonmas14 <bonmas14@gmail.com>2023-10-29 21:03:26 +0300
committerbonmas14 <bonmas14@gmail.com>2023-10-29 21:03:26 +0300
commit79d8da74ac98166ec9e9dae7eff820cd9842edb3 (patch)
treebc359f214122236968f853e6aed7236a9e4905f9 /RayRoom.NAudio/AudioSampler.cs
parent0ee008ae77fb76cbe9fe151cc6c4bc9f89cb98a5 (diff)
downloadRayRoom-79d8da74ac98166ec9e9dae7eff820cd9842edb3.tar.gz
RayRoom-79d8da74ac98166ec9e9dae7eff820cd9842edb3.zip
basic functionality
+ compute bound
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