Example #1
0
        private static void Initialise()
        {
            if (!_initialised)
            {
                _initialised = true;

#if ((UNITY_STANDALONE_OSX || UNITY_EDITOR_OSX) && !UNITY_5) || (UNITY_IPHONE || UNITY_IOS || UNITY_TVOS)
                AVPPluginRegister();
#endif

                DebugLogCallbackDelegate callbackDelegate = new DebugLogCallbackDelegate(DebugLogCallback);
                IntPtr func = Marshal.GetFunctionPointerForDelegate(callbackDelegate);
                AVPPluginSetDebugLogFunction(func);

                // Initialisation needs to happen on a render thread.
                IssuePluginEvent(AVPPluginEvent.Initialise, 0);
            }
        }
Example #2
0
        static void Initialise()
        {
            if (!_initialised)
            {
                _initialised = true;

#if ((UNITY_STANDALONE_OSX || UNITY_EDITOR_OSX) && !UNITY_5) || (UNITY_IPHONE || UNITY_IOS || UNITY_TVOS)
                AVPPluginRegister();
#endif

                DebugLogCallbackDelegate callbackDelegate = new DebugLogCallbackDelegate(DebugLogCallback);
                IntPtr func = Marshal.GetFunctionPointerForDelegate(callbackDelegate);
                AVPPluginSetDebugLogFunction(func);

                AVPPluginInitialise();

#if AVPROVIDEO_ISSUEPLUGINEVENT_UNITY52
                _renderEventFunc = AVPGetRenderEventFunc();
#endif
            }
        }
Example #3
0
        static void Initialise()
        {
            if (!_initialised)
            {
                _initialised = true;

#if ((UNITY_STANDALONE_OSX || UNITY_EDITOR_OSX) && !UNITY_5) || (UNITY_IPHONE || UNITY_IOS || UNITY_TVOS)
                AVPPluginRegister();
#endif
                DebugLogCallbackDelegate callbackDelegate = new DebugLogCallbackDelegate(DebugLogCallback);
                IntPtr func = Marshal.GetFunctionPointerForDelegate(callbackDelegate);
                AVPPluginSetDebugLogFunction(func);

                AVPPluginColorSpace colorSpace = QualitySettings.activeColorSpace == ColorSpace.Linear ? AVPPluginColorSpace.Linear : AVPPluginColorSpace.Gamma;
                AVPPluginInitialise(colorSpace);

#if AVPROVIDEO_ISSUEPLUGINEVENT_UNITY52
                _renderEventFunc = AVPGetRenderEventFunc();
#endif
                _matchURLRegex = new Regex("^[a-zA-Z][a-zA-Z0-9+-.]*://.*$");
            }
        }
    void Awake()
    {
        //Q3DAudioManager should never be constructed by Q3DAudioListener if we are running a platform Q3DAudio does not support or the user has disabled
        //allow C++ plugin can emit to Unity's debug logs -- call as soon as possible!
        DebugLogCallbackDelegate callbackDelegate = new DebugLogCallbackDelegate(DebugLogCallBackFunction);

        System.IntPtr intptrDelegate = Marshal.GetFunctionPointerForDelegate(callbackDelegate); //convert callback_delegate into a function pointer that can be used in unmanaged code
        SetDebugLogCallback(intptrDelegate);                                                    // Call the API passing along the function pointer

        Q3DAudioGlobalSettings.vr_audio_shoebox_mode firstChoiceReverbProcessor  = Q3DAudioGlobalSettings.vr_audio_shoebox_mode.COMPUTE_DSP;
        Q3DAudioGlobalSettings.vr_audio_shoebox_mode secondChoiceReverbProcessor = Q3DAudioGlobalSettings.vr_audio_shoebox_mode.HEXAGON_ADSP;
        Q3DAudioGlobalSettings globalSettings = Q3DAudioGlobalSettings.GetQ3DAudioGlobalSettings();

        if (globalSettings)
        {
            firstChoiceReverbProcessor  = globalSettings.mAndroidReverbProcessorFirstChoice;
            secondChoiceReverbProcessor = globalSettings.mAndroidReverbProcessorSecondChoice;
        }

        /*  * command line arguments (Windows) and intents (Android) override global settings
         * command line arguments are case-insensitive and are expected to be formatted: NAME_OF_EXE Q3DAudio1stChoiceReverbProcessor=COMPUTE_DSP
         * the equivalent Android intent has a case-sensitive key (due to Android's requirements) and a case-insensitive value:
         *    adb shell am start -n NAME_OF_PACKAGE/com.unity3d.player.UnityPlayerActivity -e Q3DAudio1stChoiceReverbProcessor COMPUTE_CPU
         */
        string firstChoiceReverbProcessorString  = "1stChoiceReverbProcessor";
        string secondChoiceReverbProcessorString = "2ndChoiceReverbProcessor";
        string q3dAudioString = "Q3DAudio";

#if UNITY_STANDALONE_WIN || UNITY_EDITOR_WIN
        //Windows is case-insensitive for convenience, because (unlike some other platforms) we can make it so
        q3dAudioString = q3dAudioString.ToLower();
        firstChoiceReverbProcessorString  = firstChoiceReverbProcessorString.ToLower();
        secondChoiceReverbProcessorString = secondChoiceReverbProcessorString.ToLower();

        string[] commandLineArgs = Environment.GetCommandLineArgs();
        foreach (string c in commandLineArgs)
        {
            string commandLineArg = c.ToLower();
            if (StringIsInString(q3dAudioString, commandLineArg))
            {
                if (StringIsInString(firstChoiceReverbProcessorString, commandLineArg))
                {
                    ParseAndroidReverbProcessorIfItExists(ref firstChoiceReverbProcessor, commandLineArg);
                }
                else if (StringIsInString(secondChoiceReverbProcessorString, commandLineArg))
                {
                    ParseAndroidReverbProcessorIfItExists(ref secondChoiceReverbProcessor, commandLineArg);
                }
            }
        }
#elif UNITY_ANDROID
        AndroidJavaClass  UnityPlayer     = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject currentActivity = UnityPlayer.GetStatic <AndroidJavaObject>("currentActivity");

        AndroidJavaObject intent = currentActivity.Call <AndroidJavaObject>("getIntent");
        ParseAndroidReverbProcessorIfItExists(ref firstChoiceReverbProcessor, q3dAudioString + firstChoiceReverbProcessorString, intent);
        ParseAndroidReverbProcessorIfItExists(ref secondChoiceReverbProcessor, q3dAudioString + secondChoiceReverbProcessorString, intent);
#endif//#if UNITY_STANDALONE_WIN #elif UNITY_ANDROID

        Q3DAudioManager.DebugLog("Reverb: 1stChoiceProcessor=" + firstChoiceReverbProcessor + ";2ndChoiceProcessor=" + secondChoiceReverbProcessor);
        SetReverbProcessorPreferences((int)firstChoiceReverbProcessor, (int)secondChoiceReverbProcessor);

        //point C++ plugin to the directory where q3d_audio dll's are deployed
        Q3DAudioManager.SetApplicationDataPath(Application.dataPath, InEditor());

        //the user is not allowed to set the default parameters on the mixer effect at runtime, so this can be done here once
        int roomMatWalls, roomMatCeiling, roomMatFloor;
        GetDefaultReverb(
            out mQ3DAudioRoomSettingsDefault.gainAdjust,
            out mQ3DAudioRoomSettingsDefault.brightAdjust,
            out mQ3DAudioRoomSettingsDefault.timeAdjust,
            out mQ3DAudioRoomSettingsDefault.wetMix,
            out mQ3DAudioRoomSettingsDefault.roomDimensionsX_meters,
            out mQ3DAudioRoomSettingsDefault.roomDimensionsY_meters,
            out mQ3DAudioRoomSettingsDefault.roomDimensionsZ_meters,
            out roomMatWalls,
            out roomMatCeiling,
            out roomMatFloor);
        mQ3DAudioRoomSettingsDefault.roomMaterialWalls   = (Q3DAudioRoom.vr_audio_room_material_type)roomMatWalls;
        mQ3DAudioRoomSettingsDefault.roomMaterialCeiling = (Q3DAudioRoom.vr_audio_room_material_type)roomMatCeiling;
        mQ3DAudioRoomSettingsDefault.roomMaterialFloor   = (Q3DAudioRoom.vr_audio_room_material_type)roomMatFloor;

#if UNITY_EDITOR
        //after the first "play", the editor doesn't recreate the mixer effects, so the default settings are not necessarily what q3d_audio is using
        SetAudioRoomSettings(mQ3DAudioRoomSettingsDefault);//q3d_audio uses default settings
#else
        //for standalone players, the default settings are by definition what is set immediately after creating the mixer effects
        mQ3DAudioRoomSettingsLast = mQ3DAudioRoomSettingsDefault;
#endif//#if UNITY_EDITOR

        DontDestroyOnLoad(this);//persist until the game is shut down

        //BEG_CONFIG

        /*  as of Unity 2017.1.0f3 this cannot be done.  Executing the code below appears to cause Unity to destroy all
         *  mixer effects, and the spatializer effect and ambisonic decoder effect (correct), and then recreate all of
         *  these except for the ambisonic decoder effect (wrong) and then proceeds to play silence on Android (wrong) */

        ///@todo: warn if overriding values
        //AudioConfiguration audioConfiguration = AudioSettings.GetConfiguration();
        //audioConfiguration.dspBufferSize = 192;
        ////audioConfiguration.sampleRate = 48000;
        ////audioConfiguration.speakerMode = AudioSpeakerMode.Stereo;
        ////AudioSettings.Reset(audioConfiguration);///@todo: if false, then log epic failure
        //END_CONFIG
    }