Unity AudioSource与MicroPhone以及AudioClip之间的关系。

下面是一个声音,长度为7秒钟,声音的实际数据本质是由采样点组成的的列表,一秒钟内的采样点数就是采样频率,下面的采样频率是10,正常实际中是44100,根据需求设置;AudioSource播放声音时,设置其TimeSamples的意思就是从声音的第timeSamples个采样点位置开始播放,因此设置声音的播放的偏移位置的方式是设置timeSamples或者设置time。播放时timeSamples并不是一直固定的,跟随时间逐个指向每个对应的采样点的索引值。

接下来是设置麦克风的,麦克风的原理就是首先定义一个Clip,开始录音之后,就不断的将录音采样点值赋予clip的相对应的采样点,这点和Audiosource的timeSamples相同,区别是两者的操作相反,当前采样点的位置可以用MicroPhone的GetPosition()获得。因此如果想要像KTV那样实时的播放录音,就是让audiosource播放的时候,timeSamples的值刚好等于当前采样点的值,或者延迟不大的一段采样点距离(好吧,我这么干了,可是不知道为什么噪音很严重,有待研究,并且timeSamples的值不能大于当前录音采样点的值,不然没有声音(傻瓜都能想到为什么))。好吧,今日附贴,与公司大佬讨论了一下之后终于明白了,原来噪音出现的原因是我播出来的声音又实时的被录进去了,从而出现类似回音的效果,所以最好戴上耳机录音。

下面是实时播放的代码。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class MicroPhoneTest : MonoBehaviour
{public AudioSource aud;bool isHaveMicroPhone;string device;public Text text;//Debug Textpublic Text clipLength;//记录音频文件的长度public Text devicePosition;//设备音频的位置public Text audioTime;//记录音频的时间public Text audioSampleTime;//// Start is called before the first frame updatevoid Start(){aud = GetComponent<AudioSource>();string[] devices = Microphone.devices;if (devices.Length > 0){isHaveMicroPhone = true;device = devices[0];text.text = devices[0];}else{isHaveMicroPhone = false;text.text = "没有获取到麦克风";}}//开始录音按钮public void OnclickButton(){if (!isHaveMicroPhone) return;aud.clip = Microphone.Start(device, true, 10, 10000);//aud.Play();//aud.timeSamples = Microphone.GetPosition(device);//aud.timeSamples = 0;Debug.Log("开始录音");}//开始播放按钮public void OnPlay(){aud.Play();aud.timeSamples = Microphone.GetPosition(device);//这里设置了之后就会近乎实时同步int min;int max;Microphone.GetDeviceCaps(device, out min,out max);//aud.timeSamples = 0;Debug.Log("开始播放"+min+" "+max);}private void Update(){//clipLength.text = "     clipLength:" + aud.clip.length;//devicePosition.text = " devicePosition:" + Microphone.GetPosition(device);//audioTime.text = "      audioTime:" + aud.time;//audioSampleTime.text = "audioSampleTime:" + aud.timeSamples;//Debug.Log("     clipLength:" + aud.clip.length);//Debug.Log(" devicePosition:" + Microphone.GetPosition(device));//Debug.Log("      audioTime:" + aud.time);//Debug.Log("audioSampleTime:" + aud.timeSamples);//aud.timeSamples = Microphone.GetPosition(device);
    }
}

注意,实时录音播放后,可能会出现播放的采样点与录音的采样点的值越来越大的问题,因此可能需要在update函数中每隔一段时间进行处理。

转载于:https://www.cnblogs.com/xiaoahui/p/11037671.html

Unity 声音与录音与麦克风实时播放相关推荐

  1. 【Unity3D】Unity声音与录音与麦克风实时播放

    Unity AudioSource与MicroPhone以及AudioClip之间的关系. 下面是一个声音,长度为7秒钟,声音的实际数据本质是由采样点组成的的列表,一秒钟内的采样点数就是采样频率,下面 ...

  2. Android 录音获取麦克风实时音量(转)--资料

    Android 上有一些很有趣的应用,例如<吹裙子>.<吹气球>之类的.利用的是实时获取麦克风输入音量,然后进行相应的处理.录音过程中怎样获得声音的大小呢?下面有个实例 Jav ...

  3. Android开发之PCM录音实时播放的实现方法 | 边录音边播放 |PCM录音播放无延迟 | 录音无杂音 | 录音无噪音

    先说下录音得开启录音权限 <uses-permission android:name="android.permission.RECORD_AUDIO" /> 然后录音 ...

  4. 傅里叶变换音频可视化_H5录音音频可视化-实时波形频谱绘制、频率直方图

    这段时间给GitHub Recorder开源库添加了两个新的音频可视化功能,比以前单一的动态波形显示丰富了好多(下图后两行是不是比第一行看起来丰满些):趁热打铁写了一个音频可视化相关扩展测试代码,下面 ...

  5. java音频频谱_H5录音音频可视化-实时波形频谱绘制、频率直方图

    这段时间给GitHub Recorder开源库添加了两个新的音频可视化功能,比以前单一的动态波形显示丰富了好多(下图后两行是不是比第一行看起来丰满些):趁热打铁写了一个音频可视化相关扩展测试代码,下面 ...

  6. iOS学习笔记2-使用Audio Queues录音,取得实时PCM数据

    1.学iOS接到的第一个项目就是需要用到实时录音,所以也就接触到了Audio Queues,苹果的录音相对安卓的较麻烦些,有以下两种常见录音方式: (1)苹果推荐我们使用AVFoundation框架中 ...

  7. Unity声音-音源组件

    音源组件(AudioSource) 音源是场景中在某个位置的发声装置,好像一个喇叭.它播放着音频片段 (Audio Clip). 发出的声音将输出到声音监听器(audio listener),或者声音 ...

  8. Unity声音-音源

    音源组件(AudioSource) 音源是场景中在某个位置的发声装置,好像一个喇叭.它播放着音频片段 (Audio Clip). 发出的声音将输出到声音监听器(audio listener),或者声音 ...

  9. 计算机无法找到输入设备,win7系统声音无法找到输入设备麦克风不能用的解决办法...

    win7系统声音无法找到输入设备麦克风不能用的解决办法? 在使用win7系统的时候,我们可能会遇到输入设备无法使用的问题.比如聊天的时候麦克风没有声音.小编觉得可以通过设备管理器中对设备或者是驱动进行 ...

最新文章

  1. android组件什么时候加载到r文件,Android自定义加载loading view动画组件
  2. SQL SERVER 2000 安装问题
  3. [BZOJ1131][POI2008]Sta
  4. 大数据驱动线上线下场景融合和零售数字化营销(有福利)
  5. AT24C0X I2C通信原理
  6. Linux系统中磁盘创建管理(一)
  7. Day.04 selenium的基础
  8. mysql数据库deptno_mysql数据库的 select查询
  9. ClassNotFoundException: INameEnvironment
  10. HttpServletResponse类
  11. bzoj 1786 bzoj 1831: [Ahoi2008]Pair 配对(DP)
  12. 机器学习课程笔记【三】广义线性模型(2)-构建广义线性模型
  13. CTFShow“萌心区“WP题解
  14. python黑白棋 pygame_python使用minimax算法实现五子棋
  15. 办公室计算机打印机共享,办公室小技巧:如何设置共享打印机
  16. 手机怎么解除root权限?华为手机root教程
  17. 狂飙突进的幻想乡 - 最短路 - 辛普森积分
  18. 选择SaaS供应商的15个关键问题
  19. 中国56个民族JSON数据
  20. 强化学习——从Q-Learning到DQN到底发生了什么?

热门文章

  1. Jexus-5.6.3使用详解
  2. 蓝海卓越NSWMP管理协议简介
  3. mac mini安装ubuntu系统
  4. 前端多次绑定click的坑
  5. Matlab histogram 画出十二种常见的混沌映射
  6. 多用途的web电商项目网页模板源码下载
  7. OpenCV图像颜色反转算法
  8. Git workflow工作流及边角知识
  9. Git - git push origin master 报错的解决方法
  10. SilkTest那些事儿_第一章 ST的HelloWord_录制回放1