MonoDroidでOpenalでオーディオコンテキストを作成する方法は?
-
13-11-2019 - |
質問
MonoDroidで新しいオーディオコンテキストを作成しようとするたびに、Openal32.dllが欠落していると言って、それは私に倒れます。これは単胚葉であるので、自然に意味がありません、そして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
. 解決
OpenAl32.dllはOpenTKの一部として含まれていません。OpenTKはOpenal用のバインディングを持っています。Graphics Card Driversの一部として含まれているOpenGL32.dllのように、OpenAl32.dllはオーディオカードドライバ(またはそのソフトウェア実装)を介してインストールする必要があります。
クイック検索後、AndroidのOpenalのソフトウェア実装をコンパイルする必要があるようになります。 http://pielot.org/2010/12/12/14/12/14/openal-on-android/
編集:それはAndroidが新しいOpenSL ESを使用することを好むように見えます。手に少し時間がある場合は、OpenTKのジェネレータをあなたのためにOpenSL ESバインディングを生成するようにすることを試みることができます。
この他のスタックオーバーフロー質問 OpenSLを使用するための他のいくつかのオプションを持っています。
所属していません StackOverflow