struct 音符 {
  int nPai; // 拍子数。nPai * per_pai_millisec得到毫秒。
  int volume; // 音量
  int note; // 音符,比220 Hz复杂,多组正弦波
};
音符 music[];

music分成小节。像一个很长的函数,若干组语句用空行分隔,每组语句完成一个子任务。拍号是一个分数,分母表示拍子的基本时值,也就是说以几分音符做为一拍,分子表示每小节中有几拍。如1/4拍是4分音符为一拍,每小节1拍;4/4拍:4/4拍是4分音符为一拍,每小节4拍,可以有4个4分音符。音量强、弱、次强、弱。4分音符等于多少毫秒是不固定的,同一首歌可以有常速版和慢速版。速度要follow内心的节奏。进行曲0.5秒一拍。音符可以用符号修饰,表示增加或减少时长。

MIDI的行话把volume叫做velocity. Musical Instrument Digital Interface是198x为解决电声乐器之间的通信问题而提出的。MIDI是作曲界最广泛的音乐标准格式,可称为"计算机能理解的乐谱"。

音叉出来的是单纯的一个正弦波。乐器出来的是一组正弦波叠加的结果,傅里叶变换:-)。同样是C/1,声音不一样,但还是相像的,DCT之后DC分量可能相等。To 误入的音乐人:好像我们不会拽名词似的。:-)

简谱是1234567,钢琴白键CDEFGAB,它们之间的黑键是半音:CbDbEFbGbAbB。把八度分成12个均等部分的音律叫十二平均律。黄钟大吕啥的,中国人也早就发明了。音符可以用符号修饰来表示升降半音。例如#C读作C sharp. sharp么,声音更尖,所以#代表升半音。赞一下,比咱们的network/host byte order强。但用十六进制不好吗?0123456789ABCDEF. C#谦虚: C++是C+1,它是C+0.5. ++C是把C给加了1,C++是C不变,返回C+1。

CDEFGAB/1234567叫八度,我赞成。Python里的range(8)是[0..7]或[0, 8). Pascal里数组下标从1开始,改写Pascal代码为C代码时要留意。我觉得LISP和Pascal一点都不高档,不如学C/C++/Python. 算法+数据结构=程序,Niklaus Wirth说的。面试官让你写个找x和n个y中的x的算法,你说我先撸个哈希表,该函数根本不用哈希表好口+伐?学算法就用Python的list, set和dict,学数据结构就用C,哪家数据库用Pascal写的?图论里的和操作红黑树的都是算法,都很复杂,但似乎味道不同。

异或找唯一整数的程序是错的! - Fun_with_Words - 博客园 (cnblogs.com)

88键钢琴有多组八度,频率从低向高排列。大钢琴能发出A2到C3的音,男高音A-A1。这个我习惯了。P(B|A)是A发生后B发生的概率,第2组的A叫A2有啥不对的,523+*,逆波兰式啊。重要的是A2和B2,A1和B1之间的相对,1和2是八度整体搬家。

延音线表示连贯,如管乐器不换气,弦乐器不换弓,唱要圆滑。

只要采样频率够高,每个sample的位数够多,就能完美还原声音。CD是44KHz, 32 bits. 无损音乐只是没有去压缩它而已,又不是88KHz之类。所有的耳机都有频率响应曲线,例如220Hz的放大2倍,220*sqrt(2)Hz的放大1.9倍等,只能画图,写不出简明的数学式子。线似断非断,再贵的耳机也不完美了,不如断了拉倒。2^(0.5*10)=2^5.

在网上找到个小程序,下载来看了下,C#写的,挺短挺好懂。转发在这里了: https://files.cnblogs.com/files/blogs/714801/MMI.zip

  

 

 

 

 

  

posted on 2021-12-07 09:40  华容道专家  阅读(152)  评论(0)    收藏  举报