37 lines
981 B
C#
37 lines
981 B
C#
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);
|
|
}
|
|
}
|
|
}
|