C# 如何在monodroid中使用OpenAL创建音频上下文?

C# 如何在monodroid中使用OpenAL创建音频上下文?,c#,mono,xamarin.android,openal,opentk,C#,Mono,Xamarin.android,Openal,Opentk,每当我试图在monodroid中创建一个新的音频上下文时,它总是告诉我openal32.dll丢失了;这自然没有意义,因为这是单机器人,openal是OpenTK的一部分 我只能假设我做错了什么,但我以前在windows下使用过OpenTK/OpenAL,并且用类似的代码处理得很好 不管怎么说,下面是令人不快的代码: public Audio() { if (Loaded == false) { Loaded = t

每当我试图在monodroid中创建一个新的音频上下文时,它总是告诉我openal32.dll丢失了;这自然没有意义,因为这是单机器人,openal是OpenTK的一部分

我只能假设我做错了什么,但我以前在windows下使用过OpenTK/OpenAL,并且用类似的代码处理得很好

不管怎么说,下面是令人不快的代码:

        public Audio()
    {
        if (Loaded == false)
        {
            Loaded = true;
            try
            {
                try {Console.WriteLine ("Current: " + AudioContext.CurrentContext.ToString());} catch { Console.WriteLine ("no current context"); }
                try {Console.WriteLine ("Default: " + AudioContext.DefaultDevice);} catch { Console.WriteLine ("no default device"); }

                Context = new AudioContext();
                ValidContext = true; //we have a valid audio context!
            }
            catch (Exception ex)
            {
                Console.WriteLine ("Loading the audio context failed.");
                Console.WriteLine (ex.ToString ());
                Console.WriteLine (ex.Message);
                ValidContext = false; //Loading the audio context failed :(
            }
        }
    }
以下是输出:

I/monodroid-gc(24762): environment supports jni NewWeakGlobalRef

D/AndroidGameView(24762): SurfaceCreated

D/libEGL  (24762): egl.cfg not found, using default config

D/libEGL  (24762): loaded /system/lib/egl/libGLES_android.so

I/mono-stdout(24762): no current context

I/mono-stdout(24762): no default device

I/mono-stdout(24762): Loading the audio context failed.

I/mono-stdout(24762): System.TypeInitializationException: An exception was thrown by the type initializer for OpenTK.Audio.AudioContext ---> System.TypeInitializationException: An exception was thrown by the type initializer for OpenTK.Audio.AudioDeviceEnumerator ---> System.DllNotFoundException: openal32.dll

I/mono-stdout(24762):   at (wrapper managed-to-native) OpenTK.Audio.OpenAL.Alc:MakeContextCurrent (intptr)

I/mono-stdout(24762):   at OpenTK.Audio.OpenAL.Alc.MakeContextCurrent (ContextHandle context) [0x00000] in <filename unknown>:0 

I/mono-stdout(24762):   at OpenTK.Audio.AudioDeviceEnumerator..cctor () [0x00000] in <filename unknown>:0 

I/mono-stdout(24762):   --- End of inner exception stack trace ---

I/mono-stdout(24762):   at OpenTK.Audio.AudioContext..cctor () [0x00000] in <filename unknown>:0 

I/mono-stdout(24762):   --- End of inner exception stack trace ---

I/mono-stdout(24762):   at Hardware.Audio..ctor () [0x00000] in <filename unknown>:0 

I/mono-stdout(24762): An exception was thrown by the type initializer for OpenTK.Audio.AudioContext

I/ARMAssembler(24762): generated scanline__00000177:03545444_00009001_00000000 [159 ipp] (215 ins) at [0x4fc138:0x4fc494] in 4168381 ns
I/monodroid gc(24762):环境支持jni NewWeakGlobalRef
D/AndroidGameView(24762):表面处理
D/libEGL(24762):未找到egl.cfg,使用默认配置
D/libEGL(24762):loaded/system/lib/egl/libGLES_android.so
I/mono标准输出(24762):无当前上下文
I/mono标准输出(24762):无默认设备
I/mono标准输出(24762):加载音频上下文失败。
I/mono标准输出(24762):System.TypeInitializationException:OpenTK.Audio.AudioContext的类型初始值设定项-->System.TypeInitializationException:OpenTK.Audio.AudioDeviceEnumerator的类型初始值设定项-->System.DllNotFoundException:openal32.dll引发异常
I/mono标准输出(24762):at(包装器管理为本机)OpenTK.Audio.OpenAL.Alc:MakeContextCurrent(intptr)
I/mono标准输出(24762):在:0中的OpenTK.Audio.OpenAL.Alc.MakeContextCurrent(ContextHandle上下文)[0x00000]处
I/mono标准输出(24762):在OpenTK.Audio.AudioDeviceEnumerator..cctor()[0x00000]中:0
I/mono标准输出(24762):--内部异常堆栈跟踪的结束---
I/mono标准输出(24762):在OpenTK.Audio.AudioContext..cctor()[0x00000]中:0
I/mono标准输出(24762):--内部异常堆栈跟踪的结束---
I/mono标准输出(24762):在Hardware.Audio..ctor()[0x00000]中:0
I/mono标准输出(24762):OpenTK.Audio.AudioContext的类型初始值设定项引发异常
I/ARMAssembler(24762):在4168381纳秒[0x4fc138:0x4fc494]处生成扫描线uuuuuuu00000177:035444_0009001_u00000000[159 ipp](215英寸)

openal32.dll不作为OpenTK的一部分包含。OpenTK只是有OpenAL的绑定。与图形卡驱动程序中包含的opengl32.dll一样,openal32.dll必须通过声卡驱动程序(或其软件实现)安装

快速搜索之后,您似乎需要编译OpenAL for Android的软件实现:

编辑:看起来Android更喜欢使用更新的OpenSL ES。如果您手头有一点时间,可以尝试让OpenTK的生成器为您生成OpenSL ES绑定


有一些使用OpenSL的其他选项。

感谢您的帮助,我将尝试编译OpenAL。