add StaticSound.FromQOA
parent
6cd44c6f24
commit
8829b7bcc3
|
@ -197,6 +197,39 @@ namespace MoonWorks.Audio
|
||||||
return sound;
|
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(
|
public StaticSound(
|
||||||
AudioDevice device,
|
AudioDevice device,
|
||||||
ushort formatTag,
|
ushort formatTag,
|
||||||
|
|
Loading…
Reference in New Issue