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