mirror of
https://github.com/Ryujinx/Opentk.git
synced 2024-12-26 15:55:29 +00:00
989be84c96
Made example source code visible for all examples in example browser. Updated Prebuild.exe to newest SVN version (resolves issues with resources). Added .rtf and .resx files to Examples project in Prebuild.xml.
98 lines
3.2 KiB
C#
98 lines
3.2 KiB
C#
#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.Collections.Generic;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.ComponentModel;
|
|
|
|
using OpenTK.Audio;
|
|
|
|
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())
|
|
using (AudioReader sound = new AudioReader(filename))
|
|
{
|
|
int source = AL.GenSource();
|
|
int[] buffers = AL.GenBuffers(buffer_count);
|
|
int state;
|
|
|
|
Console.WriteLine("Testing WaveReader({0}).ReadSamples()", filename);
|
|
|
|
Console.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
|
|
{
|
|
//Console.Write(".");
|
|
|
|
do
|
|
{
|
|
AL.GetSource(source, ALGetSourcei.BuffersProcessed, out processed_count);
|
|
//Thread.Sleep(1);
|
|
}
|
|
while (processed_count == 0);
|
|
|
|
Console.WriteLine(processed_count);
|
|
while (processed_count > 0)
|
|
{
|
|
int buffer = AL.SourceUnqueueBuffer(source);
|
|
if (buffer != 0 && !sound.EndOfFile)
|
|
{
|
|
Console.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);
|
|
Console.WriteLine("r");
|
|
}
|
|
}
|
|
else
|
|
break;
|
|
}
|
|
while (true);
|
|
|
|
AL.SourceStop(source);
|
|
AL.DeleteSource(source);
|
|
AL.DeleteBuffers(buffers);
|
|
}
|
|
|
|
Console.WriteLine();
|
|
}
|
|
}
|
|
}
|