0%

在我的收藏里面,音乐是占大头的。我非常喜欢尝试各种风格的音乐,也非常喜欢日本音乐圈的多样性,因此收集了很多。在这过程中也了解到了一些音频格式的内容~我也自己做过一个benchmark,比较不同音频编码的性能区别,如果有兴趣的话可以自己尝试一下~。

我个人喜欢收藏无损音乐,目的不仅仅是因为高音质,而是无损意味着“无损”,音质与CD或者其他音源是完全一致的(当然,这个一致性音频编码本身并不能保证音源的完整性,但是如果有其他的辅助信息如EAC log,或者AccurateRip测试结果就完全可以保证了)。在这个情况下我把无损压成有损,就能保证这个有损是达到了预期的音质。如果是网上直接下载有损的话,一是很难确定这个有损有没有经过二次压缩,造成额外音质损失,二是有损也最好不要再转换格式了,同样是因为音质损失,这就造成了额外的不便。

本文就介绍一下我了解的与音频编码相关的知识,以及各种常用音频编码格式的比较。更全面的格式对比可以参考Wikipedia页面。另外需要指明的是,本文的介绍基于音乐收藏和本地播放的目的,与流媒体的需求不同,后者追求稳定的码率、低延迟甚至是低能耗。

Read more »

这篇博客也是拖了很久了,简直是蹭热度都蹭不到热的。。。去年年底有一帮数学家和喜欢数学的人(Numberphile)发起了一个Youtube系列,叫#MegaFavNumbers,也就是介绍自己最喜欢的大于一百万的数字。虽然没有要求这个数字是整数,但是Numberphile一般只关注整数(甚至仅自然数)。如果没有这个限制的话,那物理化学上就有很多常数了,例如某视频评论区有人提到阿伏伽德罗常数23333

如果让我来选的话我还真想不太出来,毕竟没学多少数学,顶多会选$2^{32}$这种程序员知道的数字,或者已知最大的质数、孪生质数云云。这个题目真的是很有意思了,很多有特殊性质的数字或者是某数列的第一个数都会比较小,很少会有一个非常大并且独一无二的数字,因此看了3Blue1Brown的视频之后我顿时就来了兴趣,准备写下这篇博客介绍以下各博主选择的数字,又了解一些平常不知道的冷知识~哈哈。我大致将这些数字分了个类,不过不是很严格。

Read more »

对于ACGN收藏来说,文件管理是一个基础任务,毕竟收藏的文件内容多种多样,例如光盘镜像、压制后的音频视频、小册子扫描、字幕甚至小游戏等。把文件按一定结构整理是必要的,我也专门为整理音乐写了一些小工具,不过整理文件的格式因人而异,也没有特别的难度,因此不需要特别描述我是怎么做的。我觉得值得一提的内容是如何对文件进行定期存档和备份,这也是我在硬盘被偷之后立马开始对收藏的文件进行的操作。备份有一个3-2-1的原则:3份备份,2份本地,1份云端,下面会介绍一些本地的备份和云端备份的方法以及我的选择。

离线备份

离线备份就是把文件资料整理并存储到另一个设备上,需要考虑的功能有加密、压缩、增量更新、去重、冗余等。如果是最基本的备份,如果只想直接备份,不考虑加密压缩等的话,著名的rsync是个不错的选择,它可以同步两个目录(可以是挂载FTP的目录),并且有算法来进行去重以减少二进制的传输。

Read more »

很久没写博客了,这次想总结一下自己在ACGN收藏这条道路上越走越远,到底都走了哪些弯路哈哈哈哈 (博客画风突变)。这一篇算是一个开篇稿吧,想写的内容有挺多的,一些比较短的内容会放在这一篇底下。

Read more »

最近买了一些新的耳机,但是买完总感觉自己被收智商税了,于是就查查查了好多资料。这篇文章介绍我理解下音频发烧友的一些词汇是什么意思,如果你不烧耳机音响,但是想了解这个群体的,这个文章也能作为一个入门参考~Hifi领域有很多词汇我也没懂的,我也写在文章里了,如果有老烧路过请指教一二。我尝试用我学过的知识来客观解释音频领域的知识,我没上过信号处理,相关课程只上过自动控制和离散控制。

发烧到底追求的是什么

刚好今天有看到一个Youtube视频讲到,为什么音乐人并不care那些高端的音频设备。视频内容本身的观点是:一方面音乐人更关注的是音乐本身能不能打动人,另一方面是音乐人很多也没有那么多闲钱哈哈哈。以及底下的评论有很多人说自己是pro musician,然后疯狂喷audiophile追求的东西是虚无飘渺的。我承认烧音频领域有很多玄学都是脑放(脑补出来的),但是做耳机解码之类的厂家也是有很多pro audo engineer,不能否认这里面也是有很多技术门道的。根据这一帮自称pro musician的发言,我估计他们也没有多牛,他们的观点也有幸存者偏差在里面,并且本身不同级别不同类型的音乐也有不同的需求,因此这些评论也就看看就好。不过有一点我是同意的,听音乐最重要的还是音乐本身,对音质的追求不应放于对音乐本身的追求之上。

再打个比方,对音质的追求和对画质的追求其实是相似的,好的(照片)画质能让我们看清楚世界更多的细节,好的音质能让我们更真切地感受到被乐器包围的感觉。音频处理和视频处理也有很多相似的地方,因为他们都经常被看作信号来处理,后文我也会经常拿画质来打比方。

Read more »

进来给实验室的服务器上装了个Minecraft服务器,给大家闲来无事上来种种菜,顺便体验一下新版本的特性。之前最高只玩过1.8,现在虽然更新到1.16了,但是听说很多Mod都还是只支持到1.12,所以就搭了1.12的服务器。基岩版的MC(Win10自带的那个)虽然性能很好,但是由于不购买就没法玩,所以考虑到大家肯定最开始都不想买,以及那个开服好像很麻烦,就还是搭了Java的服务器。

一分钟上手Minecraft开服

以前玩Minecraft的时候都觉得开服务器好麻烦,要知道各种各样的配置方法,因此很佩服服主管理这些东西。直到有一天我搜到了这个:docker-minecraft-server,瞬间感觉一键开服不是梦了!这个repo把Minecraft的服务器版本以及Bukkit/Spigot服务器端Mod框架(可以理解成服务器上的Forge)都嵌进去了,简直不要太方便。数据也是从host的硬盘里mount进去的,因此如果你的服务器要转移或者备份也很方便。有了这个,开服只需要一行命令(假设你服务器上有docker)

1
docker run -d -p 25565:25565 --name mc -e EULA=TRUE itzg/minecraft-server
Read more »

Selected notes from ROB 501 and ME 564.
$\{x_i\}^b_a$ denotes set $\{x_a, x_{a+1}, \ldots, x_b\}$
TODO: add Jordan Form

Algebraic Structures

Operation

  • Definition: an (binary, closed) operation $\ast$ on a set $S$ is a mapping of $S\times S\to S$
  • Commutative: $x\ast y=y\ast x,\;\forall x,y\in S$
  • Associative: $(x\ast y)\ast z=x\ast (y\ast z),\;\forall x,y,z\in S$

Group

  • Definition: a group is a pair $(\mathcal{S},\ast)$ with following axioms
    1. $\ast$ is associative on $\mathcal{S}$
    2. (Identity element) $\exists e\in \mathcal{S}\text{ s.t. }x\ast e=e\ast x=x,\;\forall x\in \mathcal{S}$
    3. (Inverse element) $\forall x\in \mathcal{S}, \exists x’ \in \mathcal{S}\text{ s.t. }x\ast x’=x’\ast x=e$
  • Abelian: a group is called abelian group if $\ast$ is also commutative
Read more »

  • This note combines content from ME 564 Linear Systems and ME 561 Discrete Digital Control
  • Please read the Algebra Basics notes first if you are not familiar with related concepts.
  • In this note, $f\in\mathbb{F}^\mathbb{G}$ stands for a function with domain in $\mathbb{G}$ and co-domain in $\mathbb{F}$, i.e. $f:\mathbb{F}\to\mathbb{G}$, $H(x)$ generally stands for Heaviside function (step function)

Transforms

Laplace Transform

  • Definition: $F(s)=\mathcal{L}\{f(t)\}(s)=\int^\infty_0 f(t)e^{-st}\mathrm{d}t$

    Note that the transform is not well defined for all functions in $\mathbb{C}^\mathbb{R}$. And the transform is only valid for $s$ in a region of convergence, which is usually separated by 0.

  • Laplace Transform is a linear map from $(\mathbb{C}^\mathbb{R}, \mathbb{C})$ to $(\mathbb{C}^\mathbb{C}, \mathbb{C})$ and it’s one-to-one.
  • Properties: (see Wikipedia or this page for full list)
    • Derivative: $f’(t) \xleftrightarrow{\mathcal{L}} sF(s)-f(0^-)$
    • Integration: $\int^t_0 f(\tau)d\tau \xleftrightarrow{\mathcal{L}} \frac{1}{s}F(s)$
    • Delay: $f(t-a)H(t-a) \xleftrightarrow{\mathcal{L}} e^{-as}F(s)$
    • Convolution: $\int^t_0 f(\tau)g(t-\tau)\mathrm{d}\tau \xleftrightarrow{\mathcal{L}} F(s)G(s)$
  • Stationary Value: $\lim\limits_{t\to 0} f(t) = \lim\limits_{s\to \infty} sF(s), \lim\limits_{t\to \infty} f(t) = \lim\limits_{s\to 0} sF(s)$
Read more »

之前碰到过很多终端工具可以显示非常好看的进度条,或者显示丰富的颜色,甚至还有的直接可以在终端通过字符绘制UI(a.k.a. TUI),我一直都很好奇是怎么做到的。之后又知道了curses这个Python库和它的一些高层封装(例如asciimatics),然后最终在Stack Overflow里面查到了这些都是通过特殊的终端控制符来实现的。本文就介绍这些终端控制符的使用方法,他们很适合用来写一个简单无依赖的TUI。如果需要更复杂和全面的TUI功能,还是最好使用封装好的库。

ASCII 控制符

在最开始接触编程的时候,如果你学的是C,那你一定很熟悉\n,这就是一个”换行“的转义字符,代表终端光标令起一行。有时你还会碰到\r,这是”回车“。“回车”这个名字来源于打字机时代,在使用打字机的时候,如果你需要新起一行,那么需要的操作是:转动滚筒把纸往外抽一行,再把字车(相当与打印机的打印头)移到最左端。这两个操作的名字分别是“换行”和“回车”。因此严格来说另起一行的字符串应该是\r\n,这也是Windows的标准,而在Unix中则简化成\n会自动执行回车。

Read more »

近来由于项目需要,接触了一下一直没去了解过的Python异步语法,发现和之前我熟悉的C#有很多不同。在深入Python的异步逻辑之后,由于Python在语法上保留了很多语言机制的细节(比如成员函数的self参数),我反而对C#的异步有了更深的了解。这里就来重新梳理一下各种并行方法的区别,以及他们在C#和Python上实现的区别。(这里只讨论单机的并行机制。)

总的来说,并行机制主要有进程(Process)、线程(Thread)和协程(Coroutine),其并行实现的开销依次递减,但是他们对每个任务的鲁棒性也是依次递减的。进程是操作系统资源分配的最小单元,线程则是能够被CPU并行处理的最小单元,而协程则是目前实现“并行”的最简单方法。一个进程中可以有多个线程,而一个线程中可以有多个协程。他们具体在特性上有以下区别

进程线程协程
独立内存堆××
独立处理器(可硬件并行)×
独立上下文×
独立栈、寄存器状态
Read more »