麦克风输入的最大浮点数为 1。如何让它变大并从 1 更改?团结 C#



我有一个代码,它接受麦克风输入(当按下"T"时(,并将其作为浮点数(最后一个浮点数(返回。然而,当我对着麦克风大喊大叫或吹气时,它打印的最大浮子是1,无论我在它打印1后如何安静地大喊大叫,它都只打印1。如何将其更改为更大的数字。比方说,如果我大喊大叫,它会返回比我只是安静地说更大的数字。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
public class MicInputs : MonoBehaviour
{
public enum micActivation
{
HoldToSpeak,
}
public micActivation micControl;
private float sample_max = 0.0f;
public static float MicLoudFloat;
public List<float> recorded_values = new List<float>();
private string theMicroDevice;
AudioClip recordOfClips;
//microphone initialization
void MicroInitialization()
{
if (theMicroDevice == null) theMicroDevice = Microphone.devices[0];
recordOfClips = Microphone.Start(theMicroDevice, true, 999, 44100);
}
void StopMicrophone()
{
Microphone.End(theMicroDevice);
Maximum_Level(); // Collect the final sample
MicLoudFloat = sample_max;
print(MicLoudFloat);
}
void Awake()
{
recordOfClips = AudioClip.Create("nameOfClip", 128, 2, 1000, true);
}
//AudioClip clip = myRecordedOrOwnClip;
//reate(string name, int lengthSamples, int channels, int frequency, 
bool stream,
//_sampleWindow = clip.samples;
//AudioClip _clipRecord = new AudioClip();
//AudioClip _clipRecord = AudioClip.Create("nameOfClip", 128, 2, 1, 
true);
int samplesWindows = 128;

//=========THIS IS THE START OF THE METHOD========

// get data from microphone into audioclip
float Maximum_Level()
{
float[] waveData = new float[samplesWindows];
int micPosition = Microphone.GetPosition(null) - (samplesWindows 
+1); // null means the first microphone
if (micPosition < 0) return 0;
recordOfClips.GetData(waveData, micPosition);
// Getting a peak on the last 128 samples
for (int i = 0; i < samplesWindows; i++)
{
float wavePeak = waveData[i] * waveData[i];
if (wavePeak > sample_max)
{
sample_max = wavePeak;
}
}
return sample_max;
//float maximum_level = 0;
//float[] waveData = new float[samplesWindows];
//int micPosition = Microphone.GetPosition(null) - (samplesWindows 
+ 1); // null means the first microphone
//if (micPosition < 0) return 0;
//recordOfClips.GetData(waveData, micPosition);
//// Getting a peak on the last 128 samples
//for (int i = 0; i < samplesWindows; i++)
//{
//    float wavePeak = waveData[i] * waveData[i];
//    if (maximum_level < wavePeak)
//    {
//        maximum_level = wavePeak;
//        recorded_values.Add(maximum_level);
//    }
//}
//float max = recorded_values.Max();
////print(max);
//return max;

//print(maximum_level);
//return maximum_level;
}
//=========THIS IS THE END OF THE METHOD========

void Update()
{
if (micControl == micActivation.HoldToSpeak)
{
//if (Microphone.IsRecording(theMicroDevice) && 
Input.GetKey(KeyCode.T) == false)
//StopMicrophone();
//
if (Input.GetKeyDown(KeyCode.T)){ //Push to talk
MicroInitialization();
}
//
if (Input.GetKeyUp(KeyCode.T)){
StopMicrophone();

}
}
Maximum_Level();
// levelMax equals to the highest normalized value power 2, a small 
number because < 1
// pass the value to a static var so we can access it from anywhere

//print(MicLoudFloat);
}
//bool isItInitialized;
//// start mic when scene starts
//void OnEnable()
//{
//    MicroInitialization();
//    isItInitialized = true;
//}
////stop mic when loading a new level or quit application
//void OnDisable()
//{
//    StopMicrophone();
//}
//void OnDestroy()
//{
//    StopMicrophone();
//}

// detects if the mic gets started & stopped when application gets 
focused
//void OnApplicationFocus(bool focus)
//{
//    if (focus)
//    {
//        //Debug.Log("Focus");
//        if (!isItInitialized)
//        {
//            //Debug.Log("Init Mic");
//            MicroInitialization();
//            isItInitialized = true;
//        }
//    }
//    if (!focus)
//    {
//        //Debug.Log("Pause");
//        StopMicrophone();
//        //Debug.Log("Stop Mic");
//        isItInitialized = false;
//    }
//}
}

传感器只返回0或1,而不是0->inf,如果你想做其他事情,比如检查语音从0到100的负载,你可以录制它,检查音频文件的最高通气量并返回。

最新更新