Newer
Older
EARS-LINUX / audiotest / altest.cs
using System;
using System.Threading;
using OpenTK.Audio;
using OpenTK.Audio.OpenAL;

class AlTest
{
    static void Main(string[] args)
    {
        if (args.Length < 1)
        {
            Console.WriteLine("usage: altest <file.wav> [gain 0..1]");
            return;
        }
        float gain = args.Length > 1 ? float.Parse(args[1]) : 1.0f;

        var ctx = new AudioContext();
        ctx.MakeCurrent();
        Console.WriteLine("device: " + AudioContext.CurrentContext.CurrentDevice);

        WavFile w = WavFile.Load(args[0]);
        Console.WriteLine("{0}  {1} Hz  {2} bytes", w.Format, w.SampleRate, w.Data.Length);

        int buf = AL.GenBuffer();
        AL.BufferData(buf, w.Format, w.Data, w.Data.Length, w.SampleRate);

        int src = AL.GenSource();
        AL.Source(src, ALSourcei.Buffer, buf);
        AL.Source(src, ALSourcef.Gain, gain);
        AL.SourcePlay(src);

        ALError e = AL.GetError();
        if (e != ALError.NoError) Console.WriteLine("AL error: " + AL.GetErrorString(e));

        while (AL.GetSourceState(src) == ALSourceState.Playing)
            Thread.Sleep(50);

        AL.DeleteSource(src);
        AL.DeleteBuffer(buf);
        ctx.Dispose();
    }
}