Пример #1
0
        public static float[] GetMetering()
        {
            FMOD.System lowlevel;
            CheckResult(System.getLowLevelSystem(out lowlevel));
            FMOD.ChannelGroup master;
            CheckResult(lowlevel.getMasterChannelGroup(out master));
            FMOD.DSP masterHead;
            CheckResult(master.getDSP(FMOD.CHANNELCONTROL_DSP_INDEX.HEAD, out masterHead));

            FMOD.DSP_METERING_INFO inputMetering  = null;
            FMOD.DSP_METERING_INFO outputMetering = new FMOD.DSP_METERING_INFO();
            CheckResult(masterHead.getMeteringInfo(inputMetering, outputMetering));

            FMOD.SPEAKERMODE mode;
            int rate, raw;

            lowlevel.getSoftwareFormat(out rate, out mode, out raw);
            int channels;

            lowlevel.getSpeakerModeChannels(mode, out channels);

            float[] data = new float[outputMetering.numchannels > 0 ? outputMetering.numchannels : channels];
            if (outputMetering.numchannels > 0)
            {
                Array.Copy(outputMetering.rmslevel, data, outputMetering.numchannels);
            }
            return(data);
        }
        void DrawDebugOverlay(int windowID)
        {
            if (lastDebugUpdate + 0.25f < Time.unscaledTime)
            {
                if (initException != null)
                {
                    lastDebugText = initException.Message;
                }
                else
                {
                    if (mixerHead == null)
                    {
                        FMOD.ChannelGroup master;
                        lowlevelSystem.getMasterChannelGroup(out master);
                        master.getDSP(0, out mixerHead);
                        mixerHead.setMeteringEnabled(false, true);
                    }

                    StringBuilder debug = new StringBuilder();

                    FMOD.Studio.CPU_USAGE cpuUsage;
                    studioSystem.getCPUUsage(out cpuUsage);
                    debug.AppendFormat("CPU: dsp = {0:F1}%, studio = {1:F1}%\n", cpuUsage.dspusage, cpuUsage.studiousage);

                    int currentAlloc, maxAlloc;
                    FMOD.Memory.GetStats(out currentAlloc, out maxAlloc);
                    debug.AppendFormat("MEMORY: cur = {0}MB, max = {1}MB\n", currentAlloc >> 20, maxAlloc >> 20);

                    int realchannels, channels;
                    lowlevelSystem.getChannelsPlaying(out channels, out realchannels);
                    debug.AppendFormat("CHANNELS: real = {0}, total = {1}\n", realchannels, channels);

                    FMOD.DSP_METERING_INFO metering = new FMOD.DSP_METERING_INFO();
                    mixerHead.getMeteringInfo(null, metering);
                    float rms = 0;
                    for (int i = 0; i < metering.numchannels; i++)
                    {
                        rms += metering.rmslevel[i] * metering.rmslevel[i];
                    }
                    rms = Mathf.Sqrt(rms / (float)metering.numchannels);

                    float db = rms > 0 ? 20.0f * Mathf.Log10(rms * Mathf.Sqrt(2.0f)) : -80.0f;
                    if (db > 10.0f)
                    {
                        db = 10.0f;
                    }

                    debug.AppendFormat("VOLUME: RMS = {0:f2}db\n", db);
                    lastDebugText   = debug.ToString();
                    lastDebugUpdate = Time.unscaledTime;
                }
            }

            GUI.Label(new Rect(10, 20, 290, 100), lastDebugText);
            GUI.DragWindow();
        }
Пример #3
0
        public static float[] GetMetering()
        {
            FMOD.System lowlevel;
            CheckResult(System.getLowLevelSystem(out lowlevel));
            FMOD.ChannelGroup master;
            CheckResult(lowlevel.getMasterChannelGroup(out master));
            FMOD.DSP masterHead;
            CheckResult(master.getDSP(FMOD.CHANNELCONTROL_DSP_INDEX.HEAD, out masterHead));

            FMOD.DSP_METERING_INFO inputMetering  = null;
            FMOD.DSP_METERING_INFO outputMetering = new FMOD.DSP_METERING_INFO();
            CheckResult(masterHead.getMeteringInfo(inputMetering, outputMetering));

            float[] data = new float[outputMetering.numchannels];
            Array.Copy(outputMetering.rmslevel, data, outputMetering.numchannels);
            return(data);
        }
Пример #4
0
        public static float[] GetMetering()
        {
            FMOD.System lowlevel;
            CheckResult(System.getLowLevelSystem(out lowlevel));
            FMOD.ChannelGroup master;
            CheckResult(lowlevel.getMasterChannelGroup(out master));
            FMOD.DSP masterHead;
            CheckResult(master.getDSP(FMOD.CHANNELCONTROL_DSP_INDEX.HEAD, out masterHead));

            FMOD.DSP_METERING_INFO inputMetering = null;
            FMOD.DSP_METERING_INFO outputMetering = new FMOD.DSP_METERING_INFO();
            CheckResult(masterHead.getMeteringInfo(inputMetering, outputMetering));

            FMOD.SPEAKERMODE mode;
            int rate, raw;
            lowlevel.getSoftwareFormat(out rate, out mode, out raw);
            int channels;
            lowlevel.getSpeakerModeChannels(mode, out channels);

            float[] data = new float[outputMetering.numchannels > 0 ? outputMetering.numchannels : channels];
            if (outputMetering.numchannels > 0)
            {
                Array.Copy(outputMetering.rmslevel, data, outputMetering.numchannels);
            }
            return data;
        }
Пример #5
0
        void DrawDebugOverlay(int windowID)
        {
            if (lastDebugUpdate + 0.25f < Time.unscaledTime)
            {
                if (initException != null)
                {
                    lastDebugText = initException.Message;
                }
                else
                {

                    StringBuilder debug = new StringBuilder();

                    FMOD.Studio.CPU_USAGE cpuUsage;
                    studioSystem.getCPUUsage(out cpuUsage);
                    debug.AppendFormat("CPU: dsp = {0:F1}%, studio = {1:F1}%\n", cpuUsage.dspUsage, cpuUsage.studioUsage);

                    int currentAlloc, maxAlloc;
                    FMOD.Memory.GetStats(out currentAlloc, out maxAlloc);
                    debug.AppendFormat("MEMORY: cur = {0}MB, max = {1}MB\n", currentAlloc >> 20, maxAlloc >> 20);

                    int realchannels, channels;
                    lowlevelSystem.getChannelsPlaying(out channels);
                    lowlevelSystem.getChannelsReal(out realchannels);
                    debug.AppendFormat("CHANNELS: real = {0}, total = {1}\n", realchannels, channels);

                    FMOD.DSP_METERING_INFO metering = new FMOD.DSP_METERING_INFO();
                    mixerHead.getMeteringInfo(null, metering);
                    float rms = 0;
                    for (int i = 0; i < metering.numchannels; i++)
                    {
                        rms += metering.rmslevel[i] * metering.rmslevel[i];
                    }
                    rms = Mathf.Sqrt(rms / (float)metering.numchannels);

                    float db = rms > 0 ? 20.0f * Mathf.Log10(rms * Mathf.Sqrt(2.0f)) : -80.0f;
                    if (db > 10.0f) db = 10.0f;

                    debug.AppendFormat("VOLUME: RMS = {0:f2}db\n", db);
                    lastDebugText = debug.ToString();
                    lastDebugUpdate = Time.unscaledTime;
                }
            }

            GUI.Label(new Rect(10, 20, 290, 100), lastDebugText);
            GUI.DragWindow();
        }        
Пример #6
0
        public static float[] GetMetering()
        {
            FMOD.System lowlevel;
            CheckResult(System.getLowLevelSystem(out lowlevel));
            FMOD.ChannelGroup master;
            CheckResult(lowlevel.getMasterChannelGroup(out master));
            FMOD.DSP masterHead;
            CheckResult(master.getDSP(FMOD.CHANNELCONTROL_DSP_INDEX.HEAD, out masterHead));

            FMOD.DSP_METERING_INFO inputMetering = null;
            FMOD.DSP_METERING_INFO outputMetering = new FMOD.DSP_METERING_INFO();
            CheckResult(masterHead.getMeteringInfo(inputMetering, outputMetering));

            float[] data = new float[outputMetering.numchannels];
            Array.Copy(outputMetering.rmslevel, data, outputMetering.numchannels);
            return data;
        }