Blame |
Last modification |
View Log
| RSS feed
#region --- License ---
/* Licensed under the MIT/X11 license.
* Copyright (c) 2006-2008 the OpenTK Team.
* This notice may not be removed from any source distribution.
* See license.txt for licensing details.
*/
#endregion
using System;
using System.Diagnostics;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.ComponentModel;
using OpenTK.Audio;
using OpenTK.Audio.OpenAL;
namespace Examples
.OpenAL
{
// Not working correctly (sound pops).
//[Example("Streaming Playback", ExampleCategory.OpenAL)]
public class StreamingPlayback
{
const string filename
= "Data\\Audio\\the_ring_that_fell.wav";
const int buffer_size
= (int)(0.5*44100);
const int buffer_count
= 4;
//static object openal_lock = new object(); // Should be global in your app.
public static void Main
()
{
using (AudioContext context
= new AudioContext
())
{
int source
= AL
.GenSource();
int[] buffers
= AL
.GenBuffers(buffer_count
);
int state
;
Trace
.WriteLine("Testing WaveReader({0}).ReadSamples()", filename
);
Trace
.Write("Playing");
//foreach (int buffer in buffers)
// AL.BufferData(buffer, sound.ReadSamples(buffer_size));
AL
.SourceQueueBuffers(source, buffers
.Length, buffers
);
AL
.SourcePlay(source
);
int processed_count, queued_count
;
do
{
//Trace.Write(".");
do
{
AL
.GetSource(source, ALGetSourcei
.BuffersProcessed,
out processed_count
);
//Thread.Sleep(1);
}
while (processed_count
== 0);
Trace
.WriteLine(processed_count
);
//while (processed_count > 0)
//{
// int buffer = AL.SourceUnqueueBuffer(source);
// if (buffer != 0 && !sound.EndOfFile)
// {
// Trace.WriteLine(" " + buffer.ToString());
// AL.BufferData(buffer, sound.ReadSamples(buffer_size));
// AL.SourceQueueBuffer(source, buffer);
// }
// --processed_count;
//}
AL
.GetSource(source, ALGetSourcei
.BuffersQueued,
out queued_count
);
if (queued_count
> 0)
{
AL
.GetSource(source, ALGetSourcei
.SourceState,
out state
);
if ((ALSourceState
)state
!= ALSourceState
.Playing)
{
AL
.SourcePlay(source
);
Trace
.WriteLine("r");
}
}
else
break;
}
while (true);
AL
.SourceStop(source
);
AL
.DeleteSource(source
);
AL
.DeleteBuffers(buffers
);
}
Trace
.WriteLine("");
}
}
}