unity汤姆猫自动检测录音,不说话自动播放
来源:互联网 发布:小米手机网络设置 编辑:程序博客网 时间:2024/05/02 17:03
unity汤姆猫自动检测录音,不说话自动播放
脚本
using System.Collections.Generic;using System.Linq;using UnityEngine;[RequireComponent(typeof(AudioSource))]public class MicrophoneInput : MonoBehaviour{ //每秒种产生0.4M数据量 private LinkedList<float> recordData = new LinkedList<float>(); private AudioClip microphoneClip; private float voiceDetectLevel = 0.2f; private void Start() { startMicRecord(); } private void startMicRecord() { recordData.Clear(); isRecordingMic = false; microphoneClip = Microphone.Start(null, true, 600, 44100); while (!(Microphone.GetPosition(null) > 0)) { } Loom.StartSingleThread(getMicData); } private int lastReadPositio = 0; private float myMax; private bool isRecordingMic = false; private float clipPlayTime; private void getMicData() { Loom.WaitForSeconds(0.4f); //todo 加载数据并分析 int currentPosition = Microphone.GetPosition(null); int sz = currentPosition - lastReadPositio; if (sz > 1) { float[] d = new float[(sz - 1)]; microphoneClip.GetData(d, lastReadPositio); float maxValue = 0; foreach (float s in d) { maxValue = maxValue > Mathf.Abs(s) ? maxValue : Mathf.Abs(s); } myMax = maxValue; if (isRecordingMic) { if (myMax < voiceDetectLevel) { //nobody is talking. //todo maybe to relay the recored data. Loom.DispatchToMainThread(replayRecoredData); return; } foreach (float f in d) { recordData.AddLast(f); } } else { if (myMax > voiceDetectLevel) { isRecordingMic = true; recordData.Clear(); foreach (float f in d) { recordData.AddLast(f); } } } } lastReadPositio = currentPosition; // getMicData(); } public void replayRecoredData() { Microphone.End(null); float[] clipFloats = new float[recordData.Count]; int i = 0; foreach (var f in recordData) { clipFloats[i] = f; i++; } AudioClip myClip = AudioClip.Create("tom", clipFloats.Length, 1, 44100, false, false); myClip.SetData(clipFloats, 0); audio.clip = myClip; audio.Play(); audio.loop = false; audio.pitch = 1.2f; clipPlayTime = clipFloats.Length / 44100.0f; Loom.StartSingleThread(waitToRestartMic); } private void waitToRestartMic() { Loom.WaitForSeconds(clipPlayTime); startMicRecord(); } private void OnGUI() { GUI.Label(new Rect(10, 10 * 2, 100, 20), "audio" + audio); // GUI.Label(new Rect(10, 10 * 3, 100, 20), "audio" + audio.clip); // GUI.Label(new Rect(10, 10 * 4, 100, 20), "audio" + audio.clip.samples); // GUI.Label(new Rect(10, 10 * 5, 100, 20), "audio" + audio.clip.samples.ToString()); GUI.Label(new Rect(10, 10 * 6, 100, 20), "mic pos:" + Microphone.GetPosition(null)); GUI.Label(new Rect(10, 10 * 7, 100, 20), "myMax:" + myMax); GUI.Label(new Rect(10, 10 * 8, 100, 20), "recordData:" + recordData.Count()); }}完整项目地址:
http://download.csdn.net/detail/chh19941125/8744043
0 0
- unity汤姆猫自动检测录音,不说话自动播放
- unity汤姆猫自动检测录音,不说话自动播放
- 学习说话录音播放
- Unity自动录音自动播放功能
- unity自动录音功能
- 马文自动部署汤姆猫
- 【成长记录】iOS小程序-不会说话的汤姆猫
- 【我就看看不说话】自动布局
- 会说话的好朋友:汤姆猫开发商Outfit7旗下应用盘点
- OC:不会说话的汤姆猫(2014年12月)未添加音频
- swift之汤姆猫实现(UIImageView动画播放)
- 汤姆猫
- 汤姆猫
- 使用Unity原生方法进行录音即使播放基于UGUI
- Unity 录音
- 【我就看看不说话】Cell 自动调高
- 自动检测版本,自动升级
- android 录音和播放录音
- SharePoint 2013 开发——APP安全模型
- MySql中having语句的使用
- 程序员自我修养--编译链接
- Prefer Domain- Specific Types to Primitive Types
- Windows下GlassFish v2 安装完美攻略
- unity汤姆猫自动检测录音,不说话自动播放
- dwr学习2
- 分组正则备忘
- 图像处理基础知识
- 阶码
- Prevent Errors
- linux下U盘无法删除文件的解决办法
- adb 命令用法
- vim基础学习