Opentk/Source/Examples/OpenAL/Test/TestAudioContext.cs
the_fiddler 989be84c96 Moved and renamed examples to match the new example structurs.
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.
2009-04-20 09:48:33 +00:00

206 lines
7.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 OpenTK.Audio;
using AlContext = System.IntPtr;
using AlDevice = System.IntPtr;
using System.Diagnostics;
namespace Examples
{
[Example("AudioContext Test", ExampleCategory.OpenTK, "Test", 0, false)]
class TestApp
{
public static void PrintOpenALErrors( IntPtr device )
{
ALError AlErr = AL.GetError();
// AudioContext should throw on errors, so no need to test them manually.
//AlcError AlcErr = Alc.GetError(device);
AlutError AlutErr = Alut.GetError();
Console.WriteLine("Al: " + AlErr + " Alut: " + Alut.GetErrorString(AlutErr));
}
public static void Main()
{
AlcUnitTestFunc();
}
public static void AlcUnitTestFunc()
{
AudioContext context = new AudioContext();
Trace.WriteLine("Testing AudioContext functions.");
Trace.Indent();
// Trace.WriteLine("Suspend()...");
// context.Suspend();
// Trace.Assert(!context.IsProcessing);
//
// Trace.WriteLine("Process()...");
// context.Process();
// Trace.Assert(context.IsProcessing);
//Trace.WriteLine("MakeCurrent()...");
//context.MakeCurrent();
//Trace.Assert(context.IsCurrent);
//Trace.WriteLine("IsCurrent = false...");
//context.IsCurrent = false;
//Trace.Assert(!context.IsCurrent);
//Trace.WriteLine("IsCurrent = true...");
//context.IsCurrent = true;
//Trace.Assert(context.IsCurrent);
Trace.WriteLine("AudioContext.CurrentContext...");
Trace.Assert(AudioContext.CurrentContext == context);
#region Get Attribs
//int AttribCount;
//Alc.GetInteger(context.Device, AlcGetInteger.AttributesSize, sizeof(int), out AttribCount);
//Console.WriteLine("AttributeSize: " + AttribCount);
//if (AttribCount > 0)
//{
// int[] Attribs = new int[AttribCount];
// Alc.GetInteger(context.Device, AlcGetInteger.AllAttributes, AttribCount, out Attribs[0]);
// for (int i = 0; i < Attribs.Length; i++)
// {
// Console.Write(Attribs[i]);
// Console.Write(" ");
// }
// Console.WriteLine();
//}
#endregion Get Attribs
#if false
AlDevice MyDevice;
AlContext MyContext;
// Initialize Open AL
MyDevice = Alc.OpenDevice( null );// open default device
if ( MyDevice != Al.Null )
{
Console.WriteLine( "Device allocation succeeded." );
MyContext = Alc.CreateContext( MyDevice, Al.Null ); // create context
if ( MyContext != Al.Null )
{
Console.WriteLine( "Context allocation succeeded." );
GetOpenALErrors( MyDevice );
Alc.SuspendContext( MyContext ); // disable context
Alc.ProcessContext( MyContext ); // enable context. The default state of a context created by alcCreateContext is that it is processing.
Al.Bool result = Alc.MakeContextCurrent( MyContext ); // set active context
Console.WriteLine( "MakeContextCurrent succeeded? " + result );
GetOpenALErrors( MyDevice );
Console.WriteLine( "Default: " + Alc.GetString( MyDevice, Enums.AlcGetString.DefaultDeviceSpecifier ) );
Console.WriteLine( "Device: " + Alc.GetString( MyDevice, Enums.AlcGetString.DeviceSpecifier ) );
Console.WriteLine( "Extensions: " + Alc.GetString( MyDevice, Enums.AlcGetString.Extensions ) );
GetOpenALErrors( MyDevice );
#region Get Attribs
int AttribCount;
Alc.GetInteger( MyDevice, Enums.AlcGetInteger.AttributesSize, sizeof( int ), out AttribCount );
Console.WriteLine( "AttributeSize: " + AttribCount );
if ( AttribCount > 0 )
{
int[] Attribs = new int[AttribCount];
Alc.GetInteger( MyDevice, Enums.AlcGetInteger.AttributesSize, AttribCount, out Attribs[0] );
for ( int i = 0; i < Attribs.Length; i++ )
Console.Write( ", " + Attribs[i] );
Console.WriteLine( );
}
#endregion Get Attribs
GetOpenALErrors( MyDevice );
AlDevice currdev = Alc.GetContextsDevice( MyContext );
AlContext currcon = Alc.GetCurrentContext( );
if ( MyDevice == currdev )
Console.WriteLine( "Devices match." );
else
Console.WriteLine( "Error: Devices do not match." );
if ( MyContext == currcon )
Console.WriteLine( "Context match." );
else
Console.WriteLine( "Error: Contexts do not match." );
// exit
Alc.MakeContextCurrent( Al.Null ); // results in no context being current
Alc.DestroyContext( MyContext );
result = Alc.CloseDevice( MyDevice );
Console.WriteLine( "Result: " + result );
Console.ReadLine( );
}
else
{
Console.WriteLine( "Context creation failed." );
}
}
else
{
Console.WriteLine( "Failed to find suitable Device." );
}
#endif
/*
include <stdlib.h>
include <AL/alut.h>
int
main (int argc, char **argv)
{
ALuint helloBuffer, helloSource;
alutInit (&argc, argv);
helloBuffer = alutCreateBufferHelloWorld (); alGenSources (1, &helloSource);
alSourcei (helloSource, AL_Buffer, helloBuffer);
alSourcePlay (helloSource);
alutSleep (1);
alutExit ();
return EXIT_SUCCESS;
}*/
/*
* Processing Loop Example:
// PlaceCamera - places OpenGL camera & updates OpenAL listener buffer
void AVEnvironment::PlaceCamera()
{
// update OpenGL camera position
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-0.1333, 0.1333, -0.1, 0.1, 0.2, 50.0);
gluLookAt(listenerPos[0], listenerPos[1], listenerPos[2],
(listenerPos[0] + sin(listenerAngle)), listenerPos[1],
(listenerPos[2] - cos(listenerAngle)),
0.0, 1.0, 0.0);
// update OpenAL
// place listener at camera
alListener3f(AL_POSITION, listenerPos[0], listenerPos[1], listenerPos[2]);
float directionvect[6];
directionvect[0] = (float) sin(listenerAngle);
directionvect[1] = 0;
directionvect[2] = (float) cos(listenerAngle);
directionvect[3] = 0;
directionvect[4] = 1;
directionvect[5] = 0;
alListenerfv(AL_ORIENTATION, directionvect);
}
*/
}
}
}