- Home /
Problem Using Microphone Input to Control Player
Hello there, I'm new to scripting and I've been working on a sound control game for my design course, I was using the following code I found on YouTube to control the player by shouting to microphone
public float moveSpeed;
public float sensitivity = 100;
public float loudness = 0;
private Rigidbody2D snake;
AudioSource _audio;
void Start () {
snake = GetComponent<Rigidbody2D>();
_audio = GetComponent<AudioSource>();
_audio.clip = Microphone.Start(null, true, 10, 44100);
_audio.loop = true;
while (!(Microphone.GetPosition(null) > 0)) { }
_audio.Play();
}
void Update () {
snake.velocity = new Vector2(moveSpeed, snake.velocity.y);
loudness = GetAveragedVolume() * sensitivity;
if (loudness > 5)
this.GetComponent<Rigidbody2D>().velocity = new Vector2(this.GetComponent<Rigidbody2D>().velocity.x, 6);
}
float GetAveragedVolume()
{
float[] data = new float[256];
float a = 0;
_audio.GetOutputData(data, 0);
foreach (float s in data)
{
a += Mathf.Abs(s);
}
return a / 256;
}
The movement works out fine but I don't know how not to hear the echo because it seems that the script has to read the data from the audio clip, which is the microphone input, in the player Audio Source and muting it will makes it out of function.
So first of all, I was wondering if I can mute the audio feedback but still working, or I have to find another way to do this?What's the recommended method?
Secondly, how do I read pitch to control other movement if it's possible?
That's all, thank you for reading my question and sorry if there are grammatical errors or it's hard to understand since I'm not a native English speaker.
Answer by LeBanc · Apr 16, 2019 at 06:51 AM
Hello, I wanted to do something similar and I linked my AudioSource to an AudioMixer with attenuation of -80dB. I used snapshots for my purpose to switch from a listening state to a mute one but you can also create a dedicated audio mixer group for the microphone as it is described in this video : https://www.youtube.com/watch?v=GHc9RF258VA
For the pitch, I am not sure I'm understanding your need but you can have the frequency response of an audio source with GetSpectrumData.
Your answer
Follow this Question
Related Questions
How can i find loudness of microphone from code? (code not working) 2 Answers
I need my play button to load level 1 when the player touches the play button 2 Answers
How to put the player in pandom now busy area of the play field? 0 Answers
Player Sprite Changing Scenes And getting a new camera to follow it and default spawn position 1 Answer
Multiple Targets Camera 1 Answer