Как я могу создать аудио контекст с OpenAL в monodroid? - PullRequest
0 голосов
/ 28 февраля 2012

Всякий раз, когда я пытаюсь создать новый аудио-контекст в monodroid, он говорит, что openal32.dll отсутствует; что, естественно, не имеет смысла, поскольку это монодроид, а openal включен как часть OpenTK.

Я могу только предположить, что я делаю что-то не так, но раньше я использовал OpenTK / OpenAL под Windows и прекрасно справился с аналогичным кодом.

в любом случае вот код обидчика:

        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

1 Ответ

1 голос
/ 28 февраля 2012

openal32.dll не входит в состав OpenTK.OpenTK просто имеет привязки для OpenAL.Так же, как opengl32.dll, который входит в состав драйверов вашей видеокарты, openal32.dll должен быть установлен через драйверы звуковой карты (или его программную реализацию).

После быстрого поиска он выглядит следующим образомвам нужно скомпилировать программную реализацию OpenAL для Android: http://pielot.org/2010/12/14/openal-on-android/

Edit : похоже, что Android предпочитает использовать более новую OpenSL ES.Если у вас есть немного времени, вы можете попытаться получить генератор OpenTK для генерации привязок OpenSL ES.

Этот другой вопрос StackOverflow имеет несколько других вариантов:используя OpenSL.

...