Unity3D音乐音效研究-MIDI与波表
其实音乐音效这个命题本身没什么好研究的。
Unity3D提供了丰富的结构和使用方式,足够使用了。
但是我有一些小小的想法和需求,一般的Unity资料并没有给我答案。
- 一个是容量要小。MP3、OGG的高音质压缩一分钟一M多,多放几首背景音乐就顶不住了。
- 一个是资源和主程序分离,方便更新,别和我提AssetBundle,这东西的平台不兼容性,完全是在增加麻烦。
- 还有就是想要一个示波器
像这样的就行了。
问题1、最小不过MIDI,MIDI是乐曲的原始信息,本地合成,1M多MP3不过一分钟,MIDI录一个小时也用不到1M。
这个问题就决定用MIDI来解决。
但MIDI的音色库也不小,一查动辄几十兆上百兆的音色库。
就简单的了解了一下MIDI的发展过程。
其实下面的文字我完全不知道他们在说什么,只是抄来的
1981年产生,作为一种设备连接标准,像USB那种东西。不过是专门为音乐而设计的。
1991年形成标准,制定了128种标准乐器。
第一块声卡 sound blaster 使用FM(频率调变)技术合成MIDI声音。
FM这种技术不需要什么内存,我就发现了这一点。
后来内存不是问题了,就发展出了波表合成技术GM,每种乐器的音色都是录制而来的,每个乐器都要录很多,再配合规则合成。
波表就比较费内存了,windows自带的那个波表有4M,网上很容易找到几十上百兆的波表
MIDI只能产生乐器效果,对于挑剔的耳朵来说,还是用OGGMP3之类能完美模拟声音的方式吧。
FM的声音效果按今天的标准来说可能有些惨不忍睹,管他呢,能提供MP3 百分之一的容量,还没有什么副作用。
各位自取所需吧,我反正是打算做点8bit风格的东西,FM够用。
那我们解决这个容量问题的关键就是找一个能用FM技术播放MIDI的东西。
然后就找到了http://forum.unity3d.com/threads/unitysynth-full-xplatform-midi-synth.130104/
FM播放所需的数据只有几百字节。
它提供了播放MIDI所需的一切,可以用FM技术合成,也可以用波表技术合成。
最关键的,它提供了一个例子,让我知道Unity怎么用DSP混音,这样最后一环就通了,可以用DSP去播放合成出来的声音。
问题2、资源和主程序分离
由于c#synth是完全从声音合成做起的,所以他不依赖任何库,这为跨平台提供了得天独厚的条件,可以说本来就是跨平台的。
我们找到的那个方案有一些无伤大雅的小bug,我已经修改了可以跨平台了。我还放了一个webplayer版本。
http://moshan.co/game?id=53,你可以打开看一看,内置了几十首midi,连主程序也只有200K
ogg虽然解码器也是开源的,但是我并没有找到c#的版本,如果要用ogg去做跨平台的播放,工作量可能不小。
Wav虽然不开源,但是wav pcm方式保存时格式非常简单,很容易实现。问题是wav容量比较尴尬,做音效可以,做音乐可舍不得用wav存。
问题3、示波器
这个问题其实我也不懂,硬着头皮搞出来的。
我就大概知道频率分析要用到傅里叶变换。
然后刚好前面学会了unity怎么用DSP混音。
那就加一个DSP混音,但是不改变声音,仅用来读取声音。
然后把每次得到的声音时域值域输入,拿傅里叶变换计算一下。就得到频域值域的输出。
然后把输出按我们想要观测的频率取出几个值。。。
好吧,其实时域值域频域我都不知道我到底理解对了没有,如果我前面乱讲,当我没讲过,这些年也没怎么接触过傅里叶变换啊。
反正最后弄出了这么个效果
拿到这串数字做什么效果都可以,我只是简单的用GUI.Button 画了些变换的棍子。
最后,附上GITHUB源码地址
https://github.com/lightszero/BlockFun/tree/master/unity/MidiPlayer
Unity3D音乐音效研究-MIDI与波表的更多相关文章
- Unity3D音乐音效学习笔记
对于Unity3D的音乐音效这块一直没有好好的看过,现在准备好好的研究一下,并作为一个笔记记录下. 支持格式 在游戏中,一般存在两种音乐,一种是时间较长的背景音乐,一种是时间较短的音效(比如按钮点击, ...
- cocos2dx基础篇(17) 音乐音效SimpleAudioEngine
[3.x] (1)获取单例:sharedEngine() 改为 getInstance() (2)实现了:音量的调节. (3)修改了播放音效 playEffect() 的参数: ...
- Unity3d之音效播放和调用手机震动
http://blog.csdn.net/sunshine_1984/article/details/12943979 今天研究了下Unity3d音效播放相关内容,整理下实现细节. 1,添加音效文件到 ...
- [Unity3D]添加音效说明
添加音效组件并添加音乐资源 其中Pitch用来提高和降低音调的,比如可以和赛车游戏的轮胎绑定,当轮胎越快,则音调越高 2D/3D音效:2D音效和摄影家的距离无关,可以看做是一个背景音乐:而3D音效则是 ...
- cocos2d-x 音乐/音效设置
cocos2d-x 游戏中声音 有两种 一种是背景音乐一种是音效 载入音乐 或者音效的时候 我们须要先缓存声音 #include "SimpleAudioEngine.h" usi ...
- Android 音乐(音效)播放方式总结
一.音效的分类 音效按照作用的不同,可以将音效分为即时音效和背景音乐.两种音效在Android中的实现技术是不同的. 主要的实现方式为:SoundPool.MediaPlayer. 区别在于,Medi ...
- Unity 为什么有时候播放音乐(音效)会没有声音
1.问题描述 昨晚,我遇到的情况如下: 1.MainCamera里有Audio Source,并且在循环播放音乐 2.在其他的GameObject中也新增一个Audio Source,在某个时机播放音 ...
- 项目文章|DNA(羟)甲基化研究揭示铁离子依赖表观调控促进狼疮致病性T细胞分化|易基因
易基因(羟)甲基化DNA免疫共沉淀测序(h)MeDIP-seq研究成果见刊<Journal of Clinical Investigation> 2022年5月2日,中南大学湘雅二医院赵明 ...
- Redis源码研究:哈希表 - 蕫的博客
[http://dongxicheng.org/nosql/redis-code-hashtable/] 1. Redis中的哈希表 前面提到Redis是个key/value存储系统,学过数据结构的人 ...
随机推荐
- 分享个win平台cocos2d-x创建项目的快捷方式
由于长期使用vs开发,相信使用vs开发的同学们也和我一样,都习惯点击图标然后就新建项目了,不是很适应命令的方式 由于vs2012一般都是win7 win8 win8.1这类系统开发,而这些系统,都是自 ...
- 《UML大战需求分析》阅读笔记6
流程分析三剑客之总结 顺序图,活动图相类似表示活动,状态机图表示状态.分析特点: 顺序图: 强调角色之间的交互,信息明确: 从上到下,从左到右,按时间顺序: 不适合表达复杂特殊情况(循环分支,条件分支 ...
- STM32 使用DMA+DAC+TIMER 输出正弦波
之前已经简单论述过,根据我个人菜鸟的了解与认识,对之前的知识进行整理回顾: DMA:我的理解就是一个通道,或者是一座桥梁.在静态内存到静态内存,或者外设到静态内存间的一个通讯的通道.建立这个通道的好处 ...
- spring-aop学习
SpringAOP学习 author:luojie 1. AOP中的基本概念 AOP的通用术语,并非spring java所特有.很遗憾AOP的术语不是特别的直观.但如果让Spring java来 ...
- 【转】测试LibreOffice SDK 开发环境配置(Windows)
原文:http://www.aqcoder.com/blog/detail/id/7441186b-93fd-482c-b4d7-0facd1ee498d 下载与安装 LibreOffice 主页:h ...
- php安装libiconv-1.14.tar.gz遇到的问题
遇到的Error code In file included from progname.c:26:0: ./stdio.h:1010:1: error: ‘gets‘ undeclared here ...
- Linux配置网络YUM源
配置网络yum源 RHEL6.5 [root@xuegod163 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun ...
- 可以编辑R代码的eclipse插件
说到强大的IDE,eclipse肯定是首先会被想到的几个之一,幸运地是,R也能使用它.在http://www.walware.de/goto/statet上有个StatET的插件,专门为R而做,从此R ...
- RabbitMQ 记录
RabbitMQ 中文文档 : http://rabbitmq.mr-ping.com/description.html 官方教程译文: 一 http://blog.csdn.net/xiaoxian ...
- 转行IT行业的心路历程2
2011/07-2016/12 11年毕业之后阴差阳错的到了宁波慈星股份,学习了针织机械.当初的想法很简单从沈阳到南方,因为南方小厂多机会多,因为我的目标就是当老板(呵呵,大部分的人的目标都是吧,现在 ...