C# 如何在monodroid中使用OpenAL创建音频上下文?
每当我试图在monodroid中创建一个新的音频上下文时,它总是告诉我openal32.dll丢失了;这自然没有意义,因为这是单机器人,openal是OpenTK的一部分 我只能假设我做错了什么,但我以前在windows下使用过OpenTK/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
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。