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函数中每隔一段时间进行处理。

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

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

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

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

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

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

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

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

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

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

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

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

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

  7. QAudioRecorder 获取音视频的设备,麦克风实时检测问题

    在获取音视频设备中遇到了一个麦克风实时检测问题(热插拔) 起初获取是通过 audioInputs() 重新调用这个函数时没有重新检测到新的结果这里因为之前避免掉使用计时器所以就没用,每次通过调用aud ...

  8. C语言LMS双麦克风消噪算法,详解双麦克风实时自适应噪声消减技术

    近年来,智能手机和笔记本电脑等移动/便携设备市场持续快速发展.这些产品在不断集成更多新功能以增强用户体验的同时,在基本语音通信功能的用户体验方面仍有充足提升空间,特别是在嘈杂环境下提升语音清晰度,同时 ...

  9. Unity声音-音源组件

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

最新文章

  1. [物理学与PDEs]第2章习题参考解答
  2. P1083 借教室(差分+二分)
  3. 第4代白盒測试方法介绍--理论篇
  4. 一个用Shell脚本写的猜丁壳游戏
  5. TypeError: Data must not be unicode
  6. HTTP 和 WebSocket的区别
  7. c语言220程序,电赛必备220个C语言实例源码分享
  8. oracle 完整约束,【oracle】完整性約束
  9. dude由于目标计算机,The Dude的教程
  10. SPSS统计分析与行业应用案例详解
  11. @SpringBootApplication注解的意思
  12. 微博结集成书 过把“作家瘾”
  13. 从程序员到数据科学家:SAS 编程基础 (07)- 常量与变量
  14. VMWare Workstation、GSX Server、ESX Server的区别?
  15. 字符型指针,数组,字符串赋值
  16. XLSX转换为DOCX,Aspose.Cells快速搞定
  17. Win控制台下的贪吃蛇(C++)
  18. Excel-将图表数据标签是0的值不显示
  19. timus 1192. Ball in a Dream URAL 解题报告 平生第一个计算几何+高中物理
  20. 06_《计算机安全原理与实践》访问控制

热门文章

  1. 新一波 JavaScript Web 框架
  2. 【EHub_tx1_tx2_E100】Ubuntu18.04 + ROS_ Melodic + LingAo IMU 测试及RVIZ展示
  3. freecodecamp_freeCodeCamp发布样式指南
  4. 腾讯技术官编写的594页MySQL优化手册,竟意外冲上GitHub调优热榜
  5. 重庆新地标佛罗伦萨小镇将开业;雅高宣布2021年开业新酒店计划;阅文集团出售懒人听书股权​ | 美通企业周刊...
  6. 读我(Readme)
  7. Block源码解析和深入理解
  8. 企业微信内容如何值入广告?
  9. 多目标跟踪中的目标是否静止判断——计算目标的速度
  10. 降噪算法如何评定效果?用标准的方法,科学合理的判定你的降噪算法效果。