Unity - 麦克风检查是不是静音
Posted
技术标签:
【中文标题】Unity - 麦克风检查是不是静音【英文标题】:Unity - Microphone check if silentUnity - 麦克风检查是否静音 【发布时间】:2016-12-01 14:24:02 【问题描述】:我们使用 Unity 中录制音频的标准方法:
_sendingClip = Microphone.Start(_device, true, 10, 16000);
其中_sendingClip
是音频剪辑,_device
是设备名称。
我想知道用户何时停止说话,这可能会在 2 秒甚至 10 秒后发生。
我查看了不同的来源以找到答案,但找不到答案:
https://forum.unity3d.com/threads/check-current-microphone-input-volume.133501/ http://answers.unity3d.com/questions/137170/how-to-check-if-the-user-speak-to-microphone.html(但这个已经5岁多了) http://answers.unity3d.com/questions/1113690/microphone-input-in-unity-5x.html这个想法是,当用户停止说话时,音频会立即发送到语音识别服务器,并且不会在用户仍在说话时中断音频。
解决方案不需要采用代码格式。大致的看哪里的方向会很好。
【问题讨论】:
我们如何知道用户是否停止说话?可能是当波的幅度低于某个阈值时。 【参考方案1】:您可以将录制的音频剪辑发送到 Audiosource 并使用以下方法播放:
audioSource.clip = Microphone.Start(_device, true, 60, 16000);
while (!(Microphone.GetPosition(null) > 0))
audioSource.Play();
播放时,您可以从音频中获取 SpectrumData。当用户说话时,频谱数据会显示更多的峰值。您可以检查 SpectrumData 音频的平均值以确定是否有人在讲话。您应该设置某种最低级别,因为录音中可能会有一些噪音。如果频谱数据的平均值高于确定的水平,则有人在讲话,如果低于该水平,则用户停止讲话。
float[] clipSampleData = new float[1024];
bool isSpeaking=false;
void Update()
audioSource.GetSpectrumData(clipSampleData, 0, FFTWindow.Rectangular);
float currentAverageVolume = clipSampleData.Average();
if(currentAverageVolume>minimumLevel)
isSpeaking=true
else if(isSpeaking)
isSpeaking=false;
//volume below level, but user was speaking before. So user stopped speaking
你可以把这个检查放在Update方法中,spectrumdata将是最后一帧的spectrumdata。所以它将接近实时。
可以通过只录制一些无声的内容来确定最低级别,您可以在用户需要说话之前这样做,或者以某种设置的方式。
使用此解决方案,用户会听到自己说话,您可以将音频源的输出设置到音频混音器,并将音量设置为 -80。所以它仍然会识别数据,但不会向用户输出声音。在 audioSource 上将音量设置为 0 将给出 0 个频谱数据,因此在这种情况下使用 audiomixer。
【讨论】:
什么是 minimumLevel 值? 这取决于环境声音。假设你在没有对着麦克风说话的情况下运行了 1 分钟。您可以在 1 分钟内获得平均currentAverageVolume
,该值可以是您的 minimumLevel
。
我得到了大约 0.0002 的值,所以当你保持沉默时它接近于 0,如果你说话的话,值会像 5 或 7 一样高
这意味着您处于一个非常安静的房间/环境中。如果说 5 或 7,我会把它放高一点。也许是 3?这也为您提供了一些空间,以防环境变得更加嘈杂。 (尽管您也可以在您的程序中添加某种步骤,允许您在游戏的某种启动步骤中重新设置最低级别)
是的,我进入了安静的房间是的,需要保留一些设置,以便我可以在开始时分析房间噪音并确认最小级别并继续【参考方案2】:
处理音频时总会有延迟。
您是否要求在每次用户停止讲话时录制剪辑并将其发送到 SRS?或者在没有收到语音输入的“x”时间之后? (需要考虑的事情)
这是一个不错的阅读主题:https://support.unity3d.com/hc/en-us/articles/206485253-How-do-I-get-Unity-to-playback-a-Microphone-input-in-real-time-
抱歉,我无法提供更多帮助 - 希望您能找到解决方案!
【讨论】:
以上是关于Unity - 麦克风检查是不是静音的主要内容,如果未能解决你的问题,请参考以下文章
Swift 3:如何在使用 AVFoundation 录制视频期间将麦克风静音/取消静音
Swift AVAudioEngine - 如何使本地麦克风静音