using System; using System.IO; namespace MoonWorks.Audio { // for streaming long playback public class Song { public IntPtr Handle { get; } public FAudio.stb_vorbis_info Info { get; } public uint BufferSize { get; } public bool Loop { get; set; } private readonly float[] buffer; private const int bufferShrinkFactor = 8; public TimeSpan Duration { get; set; } public Song(FileInfo fileInfo) { var filePointer = FAudio.stb_vorbis_open_filename(fileInfo.FullName, out var error, IntPtr.Zero); if (error != 0) { throw new AudioLoadException("Error loading file!"); } Info = FAudio.stb_vorbis_get_info(filePointer); BufferSize = (uint)(Info.sample_rate * Info.channels) / bufferShrinkFactor; buffer = new float[BufferSize]; FAudio.stb_vorbis_close(filePointer); } } }