- Home /
Question by
AmineBMA · Oct 23, 2017 at 08:41 PM ·
unity 5inputaudiosourcemicrophonerecording
How to stop hearing in real time what i am recording with the microphone
I want to use the computer's microphone and record ambiant sound, then i convert it to decibels so i can put an if sentence to do an action. My problem is that the microphone starts recording only when i use the GetComponent.().Play() method, and this is playing in real time what the microphone is recording. i don't want to hear what im recording, how can i do? Here is my code in Javascript. Thanks
var qSamples: int = 1024;
var refValue: float = 0.1;
var threshold = 0.02;
var rmsValue: float;
var dbValue: float;
var pitchValue: float;
private var samples: float[];
private var spectrum: float[];
private var fSample: float;
var aud;
function Start () {
StartCoroutine(Talk());
aud = GetComponent.<AudioSource>();
aud.clip = Microphone.Start("Built-in Microphone", true, 10, 44100);
aud.loop = false;
samples = new float[qSamples];
spectrum = new float[qSamples];
fSample = AudioSettings.outputSampleRate;
}
function AnalyzeSound(){
aud.GetOutputData(samples, 0);
var i: int;
var sum: float = 0;
for (i=0; i < qSamples; i++){
sum += samples[i]*samples[i];
}
rmsValue = Mathf.Sqrt(sum/qSamples);
dbValue = 20*Mathf.Log10(rmsValue/refValue);
if (dbValue < -160) dbValue = -160;
aud.GetSpectrumData(spectrum, 0, FFTWindow.BlackmanHarris);
var maxV: float = 0;
var maxN: int = 0;
for (i=0; i < qSamples; i++){
if (spectrum[i] > maxV && spectrum[i] > threshold){
maxV = spectrum[i];
maxN = i;
}
}
var freqN: float = maxN;
if (maxN > 0 && maxN < qSamples-1){
var dL = spectrum[maxN-1]/spectrum[maxN];
var dR = spectrum[maxN+1]/spectrum[maxN];
freqN += 0.5*(dR*dR - dL*dL);
}
pitchValue = freqN*(fSample/2)/qSamples;
}
var talk: GUIText;
function Update () {
AnalyzeSound();
if(dbValue>7) talk.text="Wow you are screaming ! ";
}
function Talk(){
talk.text="Hi everyone !";
System.Diagnostics.Process.Start("file.vbs");
yield WaitForSeconds(1.5f);
aud.Play();
}
Comment