add StaticSound.FromQOA

pull/48/head
cosmonaut 2023-05-04 11:51:51 -07:00
parent 6cd44c6f24
commit 8829b7bcc3
1 changed files with 33 additions and 0 deletions

View File

@ -197,6 +197,39 @@ namespace MoonWorks.Audio
return sound;
}
public static unsafe StaticSound FromQOA(AudioDevice device, string path)
{
var fileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
var fileDataPtr = NativeMemory.Alloc((nuint) fileStream.Length);
var fileDataSpan = new Span<byte>(fileDataPtr, (int) fileStream.Length);
fileStream.ReadExactly(fileDataSpan);
fileStream.Close();
var qoaHandle = FAudio.qoa_open((char*) fileDataPtr, (uint) fileDataSpan.Length);
if (qoaHandle == 0)
{
NativeMemory.Free(fileDataPtr);
Logger.LogError("Error opening QOA file!");
throw new AudioLoadException("Error opening QOA file!");
}
FAudio.qoa_attributes(qoaHandle, out var channels, out var samplerate, out var samples_per_channel_per_frame, out var total_samples_per_channel);
var buffer = FAudio.qoa_load(qoaHandle);
return new StaticSound(
device,
1,
16,
(ushort) (channels * 2),
(ushort) channels,
samplerate,
(nint) buffer,
total_samples_per_channel * channels * sizeof(short),
true
);
}
public StaticSound(
AudioDevice device,
ushort formatTag,