fix streaming audio buffer size initialization
parent
a869a0e958
commit
6cd44c6f24
|
@ -10,9 +10,6 @@ namespace MoonWorks.Audio
|
|||
/// </summary>
|
||||
public abstract class StreamingSound : SoundInstance
|
||||
{
|
||||
// How big should each buffer we consume be?
|
||||
protected abstract int BUFFER_SIZE { get; }
|
||||
|
||||
// Should the AudioDevice thread automatically update this class?
|
||||
public abstract bool AutoUpdate { get; }
|
||||
|
||||
|
@ -20,6 +17,7 @@ namespace MoonWorks.Audio
|
|||
protected bool ConsumingBuffers = false;
|
||||
|
||||
private const int BUFFER_COUNT = 3;
|
||||
private nuint BufferSize;
|
||||
private readonly IntPtr[] buffers;
|
||||
private int nextBufferIndex = 0;
|
||||
private uint queuedBufferCount = 0;
|
||||
|
@ -32,13 +30,17 @@ namespace MoonWorks.Audio
|
|||
ushort bitsPerSample,
|
||||
ushort blockAlign,
|
||||
ushort channels,
|
||||
uint samplesPerSecond
|
||||
uint samplesPerSecond,
|
||||
uint bufferSize
|
||||
) : base(device, formatTag, bitsPerSample, blockAlign, channels, samplesPerSecond)
|
||||
{
|
||||
BufferSize = bufferSize;
|
||||
System.Console.WriteLine(BufferSize);
|
||||
|
||||
buffers = new IntPtr[BUFFER_COUNT];
|
||||
for (int i = 0; i < BUFFER_COUNT; i += 1)
|
||||
{
|
||||
buffers[i] = (IntPtr) NativeMemory.Alloc((nuint) BUFFER_SIZE);
|
||||
buffers[i] = (IntPtr) NativeMemory.Alloc(bufferSize);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -156,7 +158,7 @@ namespace MoonWorks.Audio
|
|||
|
||||
FillBuffer(
|
||||
(void*) buffer,
|
||||
BUFFER_SIZE,
|
||||
(int) BufferSize,
|
||||
out int filledLengthInBytes,
|
||||
out bool reachedEnd
|
||||
);
|
||||
|
|
|
@ -9,8 +9,6 @@ namespace MoonWorks.Audio
|
|||
private IntPtr VorbisHandle;
|
||||
private IntPtr FileDataPtr;
|
||||
private FAudio.stb_vorbis_info Info;
|
||||
|
||||
protected override int BUFFER_SIZE => 32768;
|
||||
public override bool AutoUpdate => true;
|
||||
|
||||
public unsafe static StreamingSoundOgg Load(AudioDevice device, string filePath)
|
||||
|
@ -43,14 +41,16 @@ namespace MoonWorks.Audio
|
|||
AudioDevice device,
|
||||
IntPtr fileDataPtr, // MUST BE A NATIVE MEMORY HANDLE!!
|
||||
IntPtr vorbisHandle,
|
||||
FAudio.stb_vorbis_info info
|
||||
FAudio.stb_vorbis_info info,
|
||||
uint bufferSize = 32768
|
||||
) : base(
|
||||
device,
|
||||
3, /* float type */
|
||||
32, /* size of float */
|
||||
(ushort) (4 * info.channels),
|
||||
(ushort) info.channels,
|
||||
info.sample_rate
|
||||
info.sample_rate,
|
||||
bufferSize
|
||||
) {
|
||||
FileDataPtr = fileDataPtr;
|
||||
VorbisHandle = vorbisHandle;
|
||||
|
|
|
@ -9,7 +9,6 @@ namespace MoonWorks.Audio
|
|||
private IntPtr QoaHandle;
|
||||
private IntPtr FileDataPtr;
|
||||
|
||||
protected override int BUFFER_SIZE { get; }
|
||||
public override bool AutoUpdate => true;
|
||||
|
||||
uint Channels;
|
||||
|
@ -60,15 +59,14 @@ namespace MoonWorks.Audio
|
|||
16,
|
||||
(ushort) (2 * channels),
|
||||
(ushort) channels,
|
||||
samplesPerSecond
|
||||
samplesPerSecond,
|
||||
samplesPerChannelPerFrame * channels * sizeof(short)
|
||||
) {
|
||||
FileDataPtr = fileDataPtr;
|
||||
QoaHandle = qoaHandle;
|
||||
Channels = channels;
|
||||
SamplesPerChannelPerFrame = samplesPerChannelPerFrame;
|
||||
TotalSamplesPerChannel = totalSamplesPerChannel;
|
||||
|
||||
BUFFER_SIZE = (int) (samplesPerChannelPerFrame * Channels * sizeof(short));
|
||||
}
|
||||
|
||||
public override void Seek(uint sampleFrame)
|
||||
|
|
|
@ -4,8 +4,24 @@ namespace MoonWorks.Audio
|
|||
{
|
||||
public bool Loop { get; set; }
|
||||
|
||||
protected StreamingSoundSeekable(AudioDevice device, ushort formatTag, ushort bitsPerSample, ushort blockAlign, ushort channels, uint samplesPerSecond) : base(device, formatTag, bitsPerSample, blockAlign, channels, samplesPerSecond)
|
||||
{
|
||||
protected StreamingSoundSeekable(
|
||||
AudioDevice device,
|
||||
ushort formatTag,
|
||||
ushort bitsPerSample,
|
||||
ushort blockAlign,
|
||||
ushort channels,
|
||||
uint samplesPerSecond,
|
||||
uint bufferSize
|
||||
) : base(
|
||||
device,
|
||||
formatTag,
|
||||
bitsPerSample,
|
||||
blockAlign,
|
||||
channels,
|
||||
samplesPerSecond,
|
||||
bufferSize
|
||||
) {
|
||||
|
||||
}
|
||||
|
||||
public abstract void Seek(uint sampleFrame);
|
||||
|
|
|
@ -6,7 +6,7 @@ namespace MoonWorks.Video
|
|||
public unsafe class StreamingSoundTheora : StreamingSound
|
||||
{
|
||||
private IntPtr VideoHandle;
|
||||
protected override int BUFFER_SIZE => 8192;
|
||||
|
||||
// Theorafile is not thread safe, so let's update on the main thread.
|
||||
public override bool AutoUpdate => false;
|
||||
|
||||
|
@ -14,14 +14,16 @@ namespace MoonWorks.Video
|
|||
AudioDevice device,
|
||||
IntPtr videoHandle,
|
||||
int channels,
|
||||
uint sampleRate
|
||||
uint sampleRate,
|
||||
uint bufferSize = 8192
|
||||
) : base(
|
||||
device,
|
||||
3, /* float type */
|
||||
32, /* size of float */
|
||||
(ushort) (4 * channels),
|
||||
(ushort) channels,
|
||||
sampleRate
|
||||
sampleRate,
|
||||
bufferSize
|
||||
) {
|
||||
VideoHandle = videoHandle;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue