private void drawSpectrum(Graphics g) { int numchannels = 0; int dummy = 0; FMOD.SOUND_FORMAT dummyformat = FMOD.SOUND_FORMAT.NONE; FMOD.DSP_RESAMPLER dummyresampler = FMOD.DSP_RESAMPLER.LINEAR; int count = 0; int count2 = 0; system.getSoftwareFormat(ref dummy, ref dummyformat, ref numchannels, ref dummy, ref dummyresampler, ref dummy); /* * DRAW SPECTRUM */ for (count = 0; count < numchannels; count++) { float max = 0; system.getSpectrum(spectrum, SPECTRUMSIZE, count, FMOD.DSP_FFT_WINDOW.TRIANGLE); for (count2 = 0; count2 < 255; count2++) { if (max < spectrum[count2]) { max = spectrum[count2]; } } /* * The upper band of frequencies at 44khz is pretty boring (ie 11-22khz), so we are only * going to display the first 256 frequencies, or (0-11khz) */ for (count2 = 0; count2 < 255; count2++) { float height; height = spectrum[count2] / max * GRAPHICWINDOW_HEIGHT; if (height >= GRAPHICWINDOW_HEIGHT) { height = GRAPHICWINDOW_HEIGHT - 1; } if (height < 0) { height = 0; } height = GRAPHICWINDOW_HEIGHT - height; g.FillRectangle(mBrushGreen, count2, height, 1.0f, GRAPHICWINDOW_HEIGHT - height); } } }
public float[] getSpectrum(int size, int channel, DSP_FFT fft) { float[] data = new float[size]; switch (fft) { case DSP_FFT.RECT: m_system.getSpectrum(data, size, channel, FMOD.DSP_FFT_WINDOW.RECT); break; case DSP_FFT.BLACKMAN: m_system.getSpectrum(data, size, channel, FMOD.DSP_FFT_WINDOW.BLACKMAN); break; case DSP_FFT.BLACKMANHARRIS: m_system.getSpectrum(data, size, channel, FMOD.DSP_FFT_WINDOW.BLACKMANHARRIS); break; case DSP_FFT.HAMMING: m_system.getSpectrum(data, size, channel, FMOD.DSP_FFT_WINDOW.HAMMING); break; case DSP_FFT.HANNING: m_system.getSpectrum(data, size, channel, FMOD.DSP_FFT_WINDOW.HANNING); break; case DSP_FFT.TRIANGLE: m_system.getSpectrum(data, size, channel, FMOD.DSP_FFT_WINDOW.TRIANGLE); break; } return(data); }