8bit音乐的一些相关知识

8bit音乐的一些相关知识xilinx 暑期学校的时候有个 8bit 声卡的题目很感兴趣

xilinx暑期学校的时候有个8bit声卡的题目很感兴趣。当时没有做,现在来研究研究。
首先先来看看8bit音乐是什么吧

文章目录


8bit的产生和历史

bit顾名思义就是位的意思。我们都学过一个n位二进制数可以有 2 n 2^n 2n中可能的表示。
8bit是指声音的每一个采样由8bit组成,也就是每个采样值有256种可能。

小时候老爸带我玩过一些游戏,比如我最喜欢的魂斗罗、赤色要塞(KONAMI牛逼!!!)

魂斗罗

赤色要塞

一个经典电子音下载站

这些听起来十分带感的游戏正是8bit音乐。
传统意义上讲,8-bit音乐是一种芯片音乐。
由于
早期的游戏机发声单有限,难以存储产生丰富和旋的乐音,芯片通常用方波、三角波、白噪声等基本波形组合出了层次丰富的音乐作品。
于是带着镣铐跳舞的艺术家们创造了一种Lo-Fi(Hi-Fi震怒)的新的音乐风格。
工程师和艺术家们将基本的声音合成引擎植入到硬件当中,使其在运行游戏时实时合成,故得名芯片音乐。

七十年代时,电脑等电子设备往往没有 声卡,只有蜂鸣器通过改变频率来表示一定的频率。
在1983年,FC在日本发行,(1985年NES在美国发行),设备有了五个声道,声音也渐渐变的丰富了起来。1


8bit音乐原理

音效芯片

任天堂的音效芯片是由RICOH公司制造的2A03E芯片2
在这里插入图片描述
共有5个声道,分别是2声道方波,1声道三角波,1声道噪音,1声道采样。3(后面一些波形图等也来自于这个视频)

方波

方波占两个声道,因为有不同的比例的波形,可以产生不同音调的声音,可以类比为电声乐队的两把吉他。
在这里插入图片描述
在2A03E中共有四种波形可以选择
在这里插入图片描述
除此之外还有75%的波,其听上去和25%几乎相同,从波形上讲相当于是加了反相。

三角波

三角波,顾名思义,就是波峰波谷全为三角形,可以类比为电声乐队的贝司
在这里插入图片描述
通常被用作低声部使用。

噪声

噪音占一声道,在FC游戏的音乐和音效中是最常见的,爆炸声、脚步声、碰撞声以及音乐的节奏点等等都是用噪音制作的。

比起制造音效,更重要的作用的打节奏。因为噪音比起方波三角波更有辨识度,能够营造比较好的节奏感,可以类比为电声乐队的鼓。

采样


音名频率表
在这里插入图片描述

在上述基本波形中,矩形脉冲波可以调节占空比来调节音色,其音色明亮,适用于旋律线;三角波的高频分量更低,适合用于低声部;锯齿波介于二者之间。短时白噪声常用于节奏。

用python来进行一些声音生成4

要生成方波或者三角波,我们可以定义函数,其将t时刻对应的离散波形值输出。

def triangleWave(fre,amp = 0.4): '''对连续三角波函数离散取样''' wave_length = sample_rate//fre  波长 = 采样率/频率 def sampler(t): saw_wave = t / wave_length - floor(t / wave_length + 0.5)  锯齿波 tri_wave = 2 * abs(2*saw_wave) - 1  通过绝对值反折 return amp * tri_wave return sampler 

同理可有方波

def SquareWave(fre,amp=0.4,dutyCycle = 0.25): '''对方波进行离散取样''' wave_length = sample_rate//fre  波长 = 采样率/频率 high = wave_length*dutyCycle def sampler(t): cur = t%wave_length if cur<high: return amp else: return 0 return sampler 

接下来可以将其编码,并将某段时长的内容写入到本地文件中,然后听听效果。

def encode(x): '''将-1到1的浮点数编码进两个字节(放大到-16384~16384,范围为32768),https://docs.python.org/3/library/struct.html''' i = int(16384 * x) return Struct('h').pack(i) def writeWave(sampler,name='wave.wav',seconds = 2): out = open(name,'wb') out.setnchannels(1) out.setsampwidth(2) out.setframerate(sample_rate) t = 0 while t < seconds *sample_rate: sample = sampler(t) out.writeframes(encode(sample)) t += 1 out.close() 

参考资料


  1. 知乎 上和弦 如何制作8-bit音乐? ↩︎
  2. Nice Chord 好和弦附带练习乐谱下载 流行歌編曲教學 第101p ↩︎
  3. 无门槛利用web技术创作8bit音乐(实践篇) ↩︎
  4. Python 输出声音 ↩︎
今天的文章 8bit音乐的一些相关知识分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2024-12-17 20:11
下一篇 2024-12-17 20:06

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/88706.html