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(); }
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); }
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 { 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(); }
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; }