Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
麦克风输入';s的最大浮点数为1。如何使其变大并将其从1更改为1?统一C#_C#_Unity3d - Fatal编程技术网

麦克风输入';s的最大浮点数为1。如何使其变大并将其从1更改为1?统一C#

麦克风输入';s的最大浮点数为1。如何使其变大并将其从1更改为1?统一C#,c#,unity3d,C#,Unity3d,我有一个接收麦克风输入(按“T”键时)的代码,并将其作为浮点数(最后一个浮点数)返回。然而,当我对着麦克风大喊大叫或吹气时,它打印的最大浮动是1,无论我在打印1后如何大喊大叫或安静地说,它都只会继续打印1。如何将其更改为更大的数字。比方说,如果我大声喊叫,它返回的数字会比我安静地说的数字要大 using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Linq; publi

我有一个接收麦克风输入(按“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;

//    }
//}
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
使用System.Linq;
公共类输入:单一行为
{
公共枚举激活
{
等等,
}
公共卫生控制;
专用浮子样本_max=0.0f;
公共静态浮点数;
公共列表记录的_值=新列表();
私有字符串微型设备;
音频剪辑录音机;
//麦克风初始化
void微初始化()
{
如果(theMicroDevice==null)theMicroDevice=micro.devices[0];
recordOfClips=麦克风启动(MicroDevice,true,999,44100);
}
无效停止麦克风()
{
麦克风。结束(微型设备);
最大水平();//采集最终样本
MicLoudFloat=样本最大值;
打印(MicLoudFloat);
}
无效唤醒()
{
recordOfClips=AudioClip.Create(“nameOfClip”,128,21000,true);
}
//音频剪辑剪辑=MyRecordedRownClip;
//创建(字符串名称、整数长度样本、整数通道、整数频率、,
布尔溪,
//_sampleWindow=clip.samples;
//AudioClip_clipRecord=新的AudioClip();
//AudioClip\u clipRecord=AudioClip.Create(“nameOfClip”,128,2,1,
正确的);
int samplesWindows=128;
//==========这是该方法的开始========
//将麦克风中的数据输入音频剪辑
浮动最大_级()
{
float[]waveData=新的float[samplesWindows];
int micPosition=麦克风.GetPosition(null)-(示例窗口
+1) ;//null表示第一个麦克风
如果(micPosition<0)返回0;
recordOfClips.GetData(waveData,micPosition);
//在最后128个样本中获得峰值
对于(int i=0;i采样最大值)
{
样本_max=波峰;
}
}
返回样本_max;
//浮动最大水平=0;
//float[]waveData=新的float[samplesWindows];
//int micPosition=麦克风.GetPosition(null)-(示例窗口
+1);//null表示第一个麦克风
//如果(micPosition<0)返回0;
//recordOfClips.GetData(waveData,micPosition);
////在最后128个样本中获得峰值
//对于(int i=0;i
传感器只返回0或1,而不是0->inf,如果你想做其他事情,比如检查声音从0到100的负载,你可以录制它并检查音频文件,然后返回该值。

实际传感器只返回0到1的值。可以在部分数字处进行检查。或者只需将输入乘以数字。类似于100。在StopMirror()中,我将sample_max乘以100。它只是将数字乘以100。这意味着它将给出100,而不是1。如果传感器返回0到1作为浮点值,而您想要“满音量的一半”,jsut将其与>=0.5进行比较您得到了浮点值。使用它们。因为您说,当您大声喊叫时,它返回的数字确实大于您安静说话时返回的数字,所以不清楚您在问什么。如果问题是您的麦克风的动态范围小,那么这不是您可以在软件中解决的问题。请购买更好的麦克风。