About audio effects
table of contents
- 1 Audio Filter
- 2 requirements
- 3 Setting a filter on the Audio Listener
- 4 Allow each filter to be turned on/off with a checkbox
- 5 Low Pass and High Pass filters specify frequencies using sliders
- 6 Enable to play bgm, se, jingle respectively
- 7 Try displaying something like an audio spectrum
- 8 summary
- 9 lastly
thank you for your hard work.
This is Matsuyama from the System Development Office.
I suddenly thought that there are audio filters, but I've only used them for reverb, so
I decided to check out other filters (effects).
Audio Filter
First, let's check what kind of filter you have.
Click here for official documentation
Low Pass Filter
Since this is a Low Pass filter, it cuts high frequencies.
This is how you hear when high frequencies are attenuated, such as on the other side of a wall or other obstruction, or behind a speaker.
High Pass Filter
This is the opposite of Low Pass, which is a filter that cuts low frequencies.
As a physical phenomenon, it should attenuate from high frequencies, so it sounds like low frequencies cannot be reproduced with cheap earphones.
It makes a clicking sound.
Echo Filter
It's an echo. It repeats the same sound attenuated.
It's like singing in a karaoke box with echo.
If you widen the spacing, it might look like Yamabiko.
Distortion Filter
Makes the sound louder regardless of volume.
Due to the low quality, the sound is distorted and sounds like cracking.
Reverb Filter
Personally, this is the filter I use the most.
It sounds like it's reverberating in a closed space, such as a hall or an underground passage.
Also, does it sound like the sound coming through a microphone?
It has the most parameters that can be set, and as an amateur, I feel like I can't make all the adjustments.
Chorus Filter
This is a filter that plays back modulated audio along with a chorus-like sound.
I tried a sample, but it didn't seem to work.
If anyone knows please let me know...
requirements
As always, we'll create an example in Unity to try it out.
① Set various filters on the Audio Listener
② Make it possible to turn each filter on/off using the checkbox
③ Specify the frequency for the Low Pass and High Pass filters with the slider
④ Make it possible to play BGM, SE, and jingle individually
⑤ Try displaying something like an audio spectrum
It's like this.
The parameters of each filter are in their default state.
All I need to do is create a UI that plays some audio.
If the audio spectrum behaves like that, it's OK.
Setting a filter on the Audio Listener
There is an Audio Listener in the Component of MainCamera, so we will add each filter below it.
All settings other than Low / High Pass Filter can be switched using checkboxes, so leave them off by default.
Allow each filter to be turned on/off with a checkbox
Created using UI.Toggle. (Like this↓)
Prepare a method for the trigger,
// Toggle for Filter public void OnClickToggleFilter(int no) { switch ((FilterNo)no) { case FilterNo.Chorus: fltChorus.enabled = tglChorus.isOn; break; case FilterNo.Distortion: fltDistortion.enabled = tglDistotion.isOn; break ; case FilterNo.Echo: fltEcho.enabled = tglEcho.isOn; break; case FilterNo.Reverv: fltReverb.enabled = tglReverv.isOn; break; } }
It's OK if you set it in OnValueChanged.
Low Pass and High Pass filters specify frequencies using sliders
Low Pass and High Pass filters can be set using sliders.
At the same time, I also create volume and pitch.
The j reflection of the slider looks like this.
① Set event listener
// Bass pass sldLoPass.onValueChanged.AddListener((value) => { setLoPass(value); });
② Set value to filter
// Low-pass filter settings private void setLoPass(float val) { var loPassHz = ExpHz(val); fltLoPass.cutoffFrequency = loPassHz; txtLoPass.text = string.Format("{0:#}", loPassHz); }
* ExpHz converts values from 0.0 to 1.0 to 10 to 22000 Hz
float ExpHz(float logHz) { var t = Mathf.Log(LowHz) - Mathf.Log(HighHz); return Mathf.Exp(logHz * t) * 10f; }
Enable to play bgm, se, jingle respectively
Use UI.Button to be able to play audio.
Set up an event listener to toggle play/stop.
Use AudioSource.Play(), Stop().
// BGM play/stop btnBgmPlay.onClick.AddListener(() => { if (!bgmSource.isPlaying) bgmSource.Play(); else bgmSource.Stop(); });
Try displaying something like an audio spectrum
Finally, let's display the waveform data.
It's the one that appears in the title image.
Use GetSpectrumData() of AudioListener
I used this as a reference for implementation. (Thank you)
I want to see the spectrum analysis of sound on an actual smartphone.
Divide the audio sample obtained with GetSpectrumData() into 512 frequency bands for UI display.
AudioListener.GetSpectrumData(spectrumData, 0, FFTWindow.Hanning); var outputF = AudioSettings.outputSampleRate; // Initialize all bins for (int i=0; i <bins.Length; i++) { bins[i] = 0f; } var logMaxF = Mathf.Log(graphMaxFrequency); // 上のbinの周波数のlog var logMinF = Mathf.Log(graphMinFrequency); var logRange = logMaxF - logMinF; if (logRange <= 0f) { logRange = 8f; } // まず周波数分類 for (int i=0; i<spectrumData.Length; i++) { var f = outputF * 0.5f * (float)i / (float)spectrumData.Length; if (f == 0f) { f = float.Epsilon; } // 対数を取ってどのビンに入るか確定 float binValue = (float)bins.Length * (Mathf.Log(f) - logMinF) / logRange; int binIndex = Mathf.FloorToInt(binValue); if ((binIndex > = 0) && (binIndex < bins.Length)) { // Add data to that bin bins[binIndex] += spectrumData[i]; } }
Create a base Prefab to display in each block.
UI.Image with Width: 3, Height: 0.
Arrange these in order from the left of the screen and set the height according to the size of the value.
// Reflected on the bar for(int i=0; i
Now, when you play the audio, the waveform data will be displayed like that.
summary
I tried a bunch of audio filters.
Chorus didn't work well (tears)
I feel like it's difficult to use anything other than reverb and low pass.
Unity an Audio Mixer , so if you want to make more detailed settings, you may want to use this.
To be honest, I don't think it's a good area for amateurs to dabble in,
but that's all for today's story.
This time, I will upload it to Git.
I hope this will be of some help to you.
Unity sample
In addition, the audio data was used from the following sources.
OtoLogic Samoto
no Mori
lastly
I have opened the system development service site "SEKARAKU Lab" to which I belong.
Beyond is a one-stop service for everything from server design and construction to operation, so if you have any trouble with server-side development, please feel free to contact us.
SEKARAKU Lab: [https://sekarakulab.beyondjapan.com/](https://sekarakulab.beyondjapan.com/)
thank you.