diff options
author | bonmas14 <bonmas14@gmail.com> | 2023-10-29 21:03:26 +0300 |
---|---|---|
committer | bonmas14 <bonmas14@gmail.com> | 2023-10-29 21:03:26 +0300 |
commit | 79d8da74ac98166ec9e9dae7eff820cd9842edb3 (patch) | |
tree | bc359f214122236968f853e6aed7236a9e4905f9 /RayRoom.NAudio/AudioSampler.cs | |
parent | 0ee008ae77fb76cbe9fe151cc6c4bc9f89cb98a5 (diff) | |
download | RayRoom-79d8da74ac98166ec9e9dae7eff820cd9842edb3.tar.gz RayRoom-79d8da74ac98166ec9e9dae7eff820cd9842edb3.zip |
basic functionality
+ compute bound
Diffstat (limited to 'RayRoom.NAudio/AudioSampler.cs')
-rw-r--r-- | RayRoom.NAudio/AudioSampler.cs | 46 |
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 |