Ihopenot

Brownian motion

核心思想

首先音乐动听的原因是因为多个音之间的整体性与和谐性。某两个音之间和不和谐这个话题一听就非常主观,但是主观之下有某种共性存在。乐律实际就是探索这种共性,并且实际应用在乐器上的技术。

声学

首先定义一下声音,现在我们都知道声音是的本质是一种机械波,我们假设每一个单独的音就是某种简单的正弦波,那么决定一个音的关键因素就是频率振幅相位。由于人耳对相位不敏感,振幅可以简单理解为音量,我们这里主要讨论频率对于声音叠加的影响。

由于同种介质中声速是固定的,讨论频率实际上也是在讨论波长,两者是互为倒数的关系。

后面所有讨论都是基于波长进行的,这里假定所有讨论中的基础音波长是λ。

二倍频

定义一个八度是波长 λ 到 λ/2 间的音程,即一个音的八度音频率正好是自己的两倍
我们都知道一个音和自己的八度音是非常和谐的,比如键盘上的do和升do,因为频率正好是两倍的关系,所以波长更短的波能正好的嵌入波长的长的波中间,两者叠加之后波的频率与原本频率较低的波频率相同。或者换种说法,两种波周期的最小公倍数正好频率较低的那个波的周期,所以这两个音同时弹出来给人的听觉会非常和谐。

自然泛音

当我们按下钢琴上一个do的时候,发出的声音并不是简单的正弦波,而是由很多泛音叠加而成的声音,泛音的组成和比例不同也是造成不同乐器之前音色不同的原因。
当琴弦发出一个波长为λ的波的时候,引起的泛音中最突出的几个点是波长为λ/2,λ/3,λ/4,…这几个点,这些波的频率正好是基础音的2倍,3倍,4倍。这是泛音的倍频关系,也是自然界中发声的规律,所以叫做自然泛音。

所以可以简单理解为,当按下琴键发出基础音的时候,泛音会同时发出基础音频率整数倍的音,只不过这些音里面基础音是振幅最大的,后面的泛音振幅会一个比一个小。

自然泛音是非常和谐的声音,音律中所有理论基础都是基于自然泛音的。

律制

三分损益法

从自然泛音中不难发现,当弦振动发出波长为λ的声音时,振幅最大的泛音是波长为λ/2的波,这个音正好是基础音的高八度,所以一个音和自己的高八度是最和谐的。

继续观察第二泛音,振幅第二大的泛音是波长λ/3的波,频率是基础音的三倍。三倍已经超过了一个八度的范围,因为一个八度正好是两倍,那么在基础音的八度音程内一定有一个对应的等位音,也就是频率是第二泛音一半的音,这个音的波长正好是2λ/3。所以认为2λ/3波长的音与基础音是非常和谐的,因为基础音发声时本身就包含了2/3波长的音。

这一规律在公元前7世纪左右就被发现了,于是中国的管仲提出了三分损益法,即将一个弦等分成3分,去掉一份和添加一份发出的这两个音与原本的音是最和谐的。

去掉一份之后波长相当于变成2/3,频率也就变成了3/2倍,和之前上面的推论一致。添加一份之后波长相当于变成4/3,频率变成了3/4倍,归到同一个八度内实际上也是同一个音名。

第三泛音的频率是基础音的四倍,归到同一个八度内和基础音是同一个音名。在之后的是五倍的频率,归到同一个八度内的话实际上频率是基础音的5/4,也就是波长是4λ/5。从第三泛音往上走的泛音实际上对于声音本身影响已经比较小了,所以到这个阶段人们都在考虑2/3波长的最和谐音,不过之后的纯律把4/5这个比例也纳入了考虑。

五度相生法

基于2/3这个倍数,我们可以推导一个音阶内的所有音,因为2/3正好是基础音和其纯五度音的倍数关系,所以这种推法叫做五度相生法。

既然波长为2λ/3的音是与波长为λ的音最和谐的音,那么可以继续去找和波长为2λ/3的音最和谐的音,也就是波长为4λ/9的音,这个音波长已经小于λ/2了,所以已经是下一个八度中的音了,把它重新调整回基础音所在的八度会得到波长为8λ/9的音。

一直重复上面这个操作,如果我们进行到某一次操作之后得到的音和基础音能够在同一个八度内重合,那么我们可以认为遍历完了一个八度内所有的音阶。

理想是美好的,上面的问题可以等价为(2/3)^x == (1/2)^y,其中x和y为正整数,求解这个方程。这个是无解的,所以上面的过程可以一直重复下去,也就是我们按照这样的想法无法遍历所有的音阶。

既然这样算不清楚那就取个近似吧,于是古人找到了(2/3)^5≈0.1317和(1/2)^3=0.1250,这两个数很近似,于是就推五次吧。

最后各个音波长的结果是λ,2λ/3,8λ/9,16λ/27,64λ/81。最后第五次128λ/243和λ/2已经非常接近了。这个方法得出的五个音就是中国传统五声音调的宫 商 角 徵 羽。

西方的七声音阶就是在上面5个音的基础上加入了128λ/243和3λ/4。因为基础音是3λ/4的音的2/3波长的和谐音,所以也可以看作是从3λ/4往后推7次得到的七声音阶,依赖的近似等式是(2/3)^7≈0.0585和(1/2)^4=0.0652。最后结果是λ、8λ/9、64λ/81、3λ/4、2λ/3、16λ/27、128λ/243。不难发现相邻俩个音之间的比值只有两种,8/9和243/256,前者也叫全音,后者也叫半音。

纯律

纯律出现一个原因是五度相生得到的七个音阶比例过于复杂了,而且每一个音只保证和前一个音和谐而不是和主音和谐,所以如果弹奏跨度特别大的音会有不和谐。所以有人提出了纯律,使七声音阶中的每一个音尽量与主音和谐,也就是和主音的比例关系变得尽量简单。

所以纯律中把4/5波长的和谐音引入了整个音阶中。最后得出的七个音阶的波长分别是
λ、8/9λ、4/5λ、3/4λ、2/3λ、3/5λ、8/15λ。(这里有一个问题,为什么一定要保持7度,感觉破坏了对称性,还是说纯律本身其实是不止七度的?)

纯律引入了4/5之后,同一个八度内的音确实更和谐了,但是带来了别的问题,原本同一个音阶里比例只有两种,现在变得更多了。而且每个音与主音是和谐了,但是两两之间又会出现不和谐。

五度相生法

继续回到五度相生法,既然之前说的有误差,那就继续推,五次不够加到七次,七次不够加到十二次。

因为发现(2/3)^12≈0.0077073,和(1/2)^7=0.0078125,所以又继续推导出12声音阶,波长分别是λ、2048/2187λ、8/9λ、16384/19683λ、64/81λ、3/4λ、512/729λ、2/3λ、4096/6561λ、16/27λ、32768/59049λ、128/243λ。

原来七声音阶中的音都还在,只是新插进去了五个音在中间,这个时候再看下比例,现在比例也是两种,243:256(就是原来的“半音”,也叫作“自然半音”),2048:2187(这被叫作“变化半音”)。

这个时候得到的音阶已经几乎是一个等比数列了,但是最后一级总是会有一点误差。

之后还有人继续沿着五度相生法卷出来60律,360律,实际意义已经不大了。

说回误差,这十二阶中的误差看起来不大,但其实也不小。(2048:2187)/(243:256)≈0.9865,好像差不多,但其实自然半音本身就是243:256≈0.9492了。

并且有误差存在的话会导致转调,合奏出现很多问题,下面这个图是纯律,但是五度相生也有一样的问题,就是C调转D调,总有几个音的音程由于误差对不上,导致后面的音全部错位,这样就会导致旋律听起来不同,合奏的时候也会不和谐。而且因为有的乐器本身不是C调的,如果和C调乐器一起合奏就烂完了。

而且由于五度相生法和纯律推出来的音阶都是基于基础音的。五度相生只保证链式的和谐,即我上一个音和我下一个音跟我是和谐的,但是如果两个音相距过远会导致这种和谐减弱。纯律只保证所有音和基础音的和谐度,除了基础音之外的两两之间可能出现相当不和谐的情况,比如历史上的狼音五度2,6。谱面上是纯五度,但是实际调律出来的音色相当不和谐。这样会导致2,无法和5,6同时和谐。因为有这种情况,甚至有人提出键盘上放两个2,弹2,5的时候用一个,弹2,6的时候用另一个。

因为这些乐律上的缺陷,所以古代作曲有很多制约,哪些音又不能一起用了,啥和弦又不能弹了,本质是由于乐律的缺陷导致的。很多人一直致力解决这个问题,试图找到一种方法解决误差的同时,又保证纯四度和纯五度不被破坏。

一直到文艺复兴之前,西方音乐界通行的律法叫“平均音调律”(Meantone temperament),就是在保证纯五度和纯四度尽量不受影响的前提下,把(2/3)^12和(1/2)^7之间的差距尽量分配到12个音上去。这只是一种无可奈何的妥协,大家其实都在等待新的音律出现。

十二平均律

后来就出现了十二平均律,直接将2开12次方,真正把12音阶变成等比数列。这个乐律直接解决了转调问题,任何一个音都可以复制到另一个调上。

十二平均律的提出看起来想法很简单,但是实践起来要解决的问题是徒手开12次方的难题。现在普遍认为明朝的朱载堉是真正实现十二平均律的第一人,使用算珠开12次方,并且结果相当准确。

有了十二平均律,所有音之间的音程都是固定的半音,100音分,转调合奏问题统统解决了,有了这个音律,作曲家,乐器制造者都获得了极大的便利和自由。但是还是有一点不好,因为十二平均律破坏了最自然的纯五度和纯四度,甚至大三度,这些自然泛音和现在钢琴上弹出来的音总是有小小的误差,虽然基本上是可以接受的。

现在主流乐律还是十二平均律,但是包括印度,阿拉伯等特色乐律也不一定非要是十二平均律,十二平均律最核心还是三分损益法中提出的2/3的和谐音,如果基于别的和谐可以派生出不同的乐律。

日程

Day5

今天去了高松,预计在这边的行程是男女木岛,直岛和小豆岛。主要的游玩地是在直岛上面的,有大量的summer pockets朝圣点,男木岛要少些,女木岛朝圣点最少,因为今天还要从大阪赶到高松,所以今天的目标只有女木岛。

坐jr一路做到高松,到酒店已经中午了,东西放好就在附近找了一家乌冬面吃,好像高松附近乌冬面特别有名。

IMG20230730123943

那个金黄色的我一开始以为是丸子啥的,结果完了发现是鹌鹑蛋,他这个乌冬的面里的牛肉还挺好吃的,但是我点的这个没汤,吃到最后又干又没味,最后也没吃完。。。

Read more »

日程

Day3

早上起来,决定去大阪城。

大阪城那里是个很大的像公园的地方,中间是大阪城,周围有很多配套设施,有些像音乐馆的地方,那个时候好像还在办什么活动,全是人,而且都拿着小团扇靠着墙不知道在拍什么东西。

往里稍微走一走就到大阪城周边了,应该说大阪城分三个部分,一个是最中心最高的天守阁,一个是周围护城河和墙围起来的日本风的环境,再外面是像现代公园的一个环境。进大阪城要过一个城门一样的东西。

Read more »

同学告诉今年GeenCon要开了,看了下感觉东西还行,正好本科同学也要上去做presentation,就想过去玩玩,顺便聚一下。

工作日抽时间去,所以火车定的比较紧,前一天晚上才到,后一天早上就走。在去的火车上发现正好明日方舟这几天在摆一个线下展,在美罗城那边,正好可以去看看。

Read more »

前言

两年多前搞了个一加9的手机,就是冲着可以解锁oem刷机去的,然后到手就给刷了氧os+magisk,当时理解比较粗浅,不知道咋更新系统,以为每次更新都要重刷magisk太麻烦了就很久没更新。

后来想着一直不更新也不是个事,然后开始研究怎么更新系统同时保留magisk,这里总结一下流程和坑。

TLDR:只是OnePlus的流程,别的厂商的手机过程可能略有不同。

  1. 如果没有解锁bootloader,跳转到google搜索如何解锁bootloader
  2. 如果有对应系统的boot.img,通常在全量包中可以找到,跳转到3。
  3. 如果没有boot.img,搜索如何刷入全量包,并刷入一个网上现有的全量包,同时从全量包中提取boot.img。
  4. 将boot.img上传到手机内。
  5. 如果有magisk app,跳转到6。
  6. 如果没有magisk app,安装一个,安装包在github下载。
  7. 使用magisk app,安装,选择并修补一个文件,选择之前上传的boot.img。
  8. 将magisk修补完成的文件拷贝到电脑上。
  9. 使用adb reboot bootloader进入fastboot。
  10. 使用fastboot boot magisk_patch_xxxxx_xxxxx.img进入临时的magisk环境。
  11. 在magisk app里,安装,直接安装,重启。
  12. 成功。

下面是小故事。

Read more »

日程

Day1

早上起床,桌子上是昨晚买的伊右卫门茶,和九点整的闹钟,然后拍了一张。

IMG20230726090103

今天起床就开始在看京都有啥玩的,大致决定的路线如下。

image-20230920112400707

先去罗森搞点早饭,拿了一个饭团一个饭卷,去找服务员加热,然后把饭团加热了,告诉我饭卷是寿司,不用加热。然后在店门口吃了,日本罗森店里很多都没有座位的,也不知道该在哪吃,边走边吃好像也不太好,就站在店门口吃完走了。

Read more »

前言

不想把QQ运行在自己的物理机上+数据迁移和备份方便,基于这些需求,一直想把QQ跑在虚拟机里,正好实验室的pve现在也没啥负载,直接丢到pve的虚拟机里去。但是这样QQ接收消息推送又有问题,如果我一直用电脑的话可能经常不知道QQ收到消息了,而且如果用远程桌面的话会常态占用我一块屏幕。感觉挺不方便的,想着Windows有没有RemoteApp之类的轻量的远程连接,一搜还真有,然后开始折腾。

RemoteAppTool

windows的remoteApp也是用的mstsc连接,但是rdp配置不太一样。

有个工具RemoteAppTool可以方便的生成rdp文件。

Read more »

前言

挺早就想去日本了,被二次元吸引,但是苦于没有时间+缺人,一直没去。正好今年暑假前和群友聊天,发现有小团体,准备去日本summer pockets朝圣旅游,直接加入群聊。之后虽然实际上去的时间都是分散的,见面时间也不长,但是有个靠谱室友,所以总的这次赴日还是很成功的。

原本这种东西应该赴日途中一边旅游一边写的,但是实际上每天急行军,基本白天全在走路,到晚上躺床上就想摸了。所以只有现在摸出来一些空闲时间写下游记。而且还有一堆视频影像资料没剪……

这里稍微记录一下这次日本的旅行,还有一些去之前没了解到的东西,如果可能帮后人少走点弯路。

Read more »

前言

去年就买了几个墨水屏,本来打算玩的,但是一直抽不出时间(懒)。最近稍微闲下来点,来研究下墨水屏。

一开始捡的闲鱼2.13寸的黑白屏,7块钱一个。但是这个不支持蓝牙,玩了一下又入了一批支持蓝牙的版本,无线刷图还是要舒服一些的。

第一批墨水屏

这批墨水屏是Stellar-M型号的,一开始看了很多资料,感觉可搞才入的,但是后来到手才发现屏和主流的Stellar-M不太一样。

拆解和烧录程序参考这篇文章,这篇文章写的挺好,整个的操作基本是按照这篇文章走的。

汉朔的电池都是类似的拆法,拿螺丝刀抵住后面的卡扣往上翘就行,很容易拆下来。前面板是胶封的,得拿小刀从旁边小心的撬。

拆下来看,板子的主控是MSP430G2553,屏是WF0213T5PBZ08230H。

这个屏型号具体信息网上也搜不到,这个仓库里有类似型号的信息,但也不多,应该是WF-Tech无锡威峰的屏。

板子拆出来之后用串口怼上去,我用的CH340G,接线方法参考上面那篇文章。理想情况是可以只拆电池然后接调试口刷的,但是用串口刷的话要从pcb前面飞线,所以一定得把板子拆下来。

Read more »

前言

挺早就在ctf里见到有关lambda表达式来出题,当时啥也不懂,就xjb调一调,弄一弄,猜一猜还真给做出来了。大概之后又过了几个月又见到lambda的题了,那次好好研究了一下,最后做出来了,也感受到了函数式编程的妙,以及了解了邱奇数和邱奇布尔值的一些知识,当时很自信,感觉会了。然后再xctf上就被lambda revenge暴打了,看了一天没做出来,赛后放源码看了看,发现自己还是太naive,这里稍微做些总结,免得下次再有lambda的题到处去搜表达式。

因为lambda表达式有很多种写法,这里统一使用python代码作为表示形式,感觉比较工程。

函数式编程

在函数式编程的世界里,函数被视为一等公民。这一概念在许多地方都能看到,所以不再赘述。从我自己的感受来说,函数式编程中的所有事物都可以看作是一个过程,或者也可以称之为函数。只有当我们向这个函数传入具体的参数时,这个过程才会产生一个结果。

在函数式编程中,一个函数的输入和输出都可能是另一个函数。这使得复杂的过程可以被拆分成简单函数的组合。换句话说,一个复杂的功能函数可以被拆分成许多底层的简单函数。整个过程在传入具体值之前可能没有实际意义,又或者根据传入的函数不同会有不同的功能。这种拆分和组合为函数式编程带来了强大的表达能力和灵活性。

Read more »
0%