torvalds/GuitarPedal

GitHub: torvalds/GuitarPedal

一个基于 RP2354 微控制器的开源数字吉他效果器项目,集成了多种 DSP 音频效果算法、OLED 显示屏与完整的 KiCad 硬件设计文件。

Stars: 2149 | Forks: 88

## 重新启用的随机吉他效果器项目 这是我之前的吉他效果器项目的翻新版本,只不过 这次使用了屏幕和几个旋转编码器,代替了以前那种 糟糕的模拟电位器。 包含一个 'Hardware' 目录,里面有 kicad 文件。 还有一个 'Software' 目录,包含让它能正常工作的 固件。 此外还有一个 'Documentation' 目录,对于这个项目来说, 这显得相当乐观。 无论如何,随着加入了屏幕和正经的旋转编码器,更新后的 设备现在可以支持多种效果器,并拥有一个还算合理的 UI。 只不过我并不以出色的 UI 设计技能著称。所以…… ## 固件 我只在 Linux 上构建过固件,但只要你弄清楚了 平台要求,在 MacOS 或 Windows 上也*应该*完全 可以构建。该项目依赖于 `pico-sdk` 和 `tinyusb` 库,并且为两者都配置了 submodules,因此它们会 自动构建,但构建工具需要你的平台自行提供。 无论在什么平台上,你都需要以下基本工具: - git - make - python3 - cmake 以及一个 32 位 arm 交叉编译环境。在 Linux 上,那 大概会是 - arm-none-eabi-binutils-cs - arm-none-eabi-gcc-cs - arm-none-eabi-newlib 如果你满足了所有要求,执行 ``` git clone https://github.com/torvalds/GuitarPedal.git cd GuitarPedal cd Software make prep make ``` 应该就会开始构建,并且你应该会在 `build/` 子目录中找到生成的 `blink.uf2` 文件。在你将 效果器设置为编程模式(见下文)后,你可以直接将该 文件写入 USB 文件系统中。 如果你安装了带 USB 支持的 picotool(pico-sdk 构建 只构建了一个不含该功能的精简版本),你也可以直接执行 ``make flash`` 来以那种方式烧录镜像。 ## 硬件 kicad 设计文件(以及一些辅助基础设施,如 3D 打印嵌件和外壳钻孔规则)位于 ``Hardware`` 子目录中。 电路板文件可能看起来有些奇怪,因为 “核心”硬件包含两块模块化电路板:分别是 RP2354 微控制器(`Hardware/rp2354`)和 TI TAC5112 codec(`Hardware/codec`)。 然后是用于音频和 9V DC 电源插孔的电路板 (`Hardware/audio-jacks`),带有一个用于 codec 电路板的接口;以及一块 用于效果器 IO 的主板(`Hardware/pedal-board`) (用于屏幕的 i2c 接口、USB-C 编程端口、旋转编码器、用于 踩钉开关的排针),该主板随后带有用于 rp2354 微控制器电路板的接口。 我在模块化电路板上使用了不错的 HiRose BM28 系列接口。 它们绝对非常微小,这使得电路板的占位面积非常理想,但 不可否认的是,由于 0.35mm 的极小 引脚间距,也使得电路板变得稍微复杂了一些。我不喜欢 传统的排针,仅仅是因为它们让 实现紧凑的外形变得如此困难。 板间连接器是一根 12P 0.5mm FFC 线缆,用于传输电源 和数据线(用于控制的 i2c,用于音频的 i2s)。 这种模块化设计纯粹是为了让我能够尝试不同的外形 规格,如果你明确知道自己想要什么,你应该直接将 TAC5112 放在音频插孔电路板上,并将 rp2354 放在 IO 电路板上。模块化 设置会导致电路板更加复杂(例如,由于使用了连接器,核心板 两面都装有元件),但这让我能够将 更复杂、稍微更昂贵的电路板 与“我们来试试这种布局”的电路板分离开来。 ### 图像 ![Front](https://static.pigsec.cn/wp-content/uploads/repos/cas/a4/a483089d467a7d432f555669c7cc2c8e868fc4e7d4605e38ea8b56fd8eda0c36.jpg) ![Inside](https://static.pigsec.cn/wp-content/uploads/repos/cas/b3/b30d38201f05990bb37bdaac86b6433d2534f27793b0f8719cf7d308384265c0.jpg) ## 基本 UI 效果器配有 128x128 单色 OLED 屏幕和两个可以旋转的旋转编码器,它们还带有开关,你可以按下它们来执行操作。此外还有两个踩钉开关。 顶部的旋转编码器是“value(值)”旋转编码器,转动它可以改变数值,按下它时会切换到列表中的下一个值(你也可以在转动的同时*按住*它,这允许你在效果器数值列表中前后移动,但大多数 情况下,直接向前点击会更容易)。 下方的旋转编码器是“effect(效果)”旋转编码器,转动它时会按顺序遍历 各个效果器。你也可以通过按下它来启用/禁用每个 效果器。 左侧的踩钉开关 _也_ 是一个“启用/禁用当前效果器” 开关,只不过是给你的脚用的。你肯定不想用脚去踩旋转 开关。 右侧的踩钉开关是“禁用/启用整个效果器”开关。 还有两个与踩钉开关关联的状态 LED: 左侧的指示“当前选中的效果器状态”,右侧的 指示“全局状态”。 *大多数情况下*,这些状态 LED 只是表示开/关,但有些效果器 也会通过让 LED 发出更亮的光来指示它们是否处于活动状态。 例如,当信号被噪声门限流时,噪声门 LED 会变得更亮, 而压缩器效果在进行压缩时也会变得更亮。 “全局状态” LED 也可能变得更亮,但这发生在 情况糟糕的时候:如果信号在输出范围内发生硬削波。 通常你不希望发生这种情况,但是嘿,也许你真的 想要带有硬削波的疯狂增益,从而驱动放大器去发出 糟糕的声音。 最后,还有一个特殊的“复位序列”——如果你按住 *两个*旋转开关,那就是一个复位信号,如果你 通过 USB 连接到计算机,效果器将进入编程 模式。 如果效果器已通电但未通过 USB 连接(即仅使用 9V 吉他效果器电源,或仅使用充电器的 USB),复位 序列将重置所有效果器——关闭它们,并将它们恢复为 默认值。 ## 音频效果 当前的效果包括: - 噪声门 这个相当简单。取决于你的吉他 环境的噪声有多大,你可能需要也可能不需要它。 但特别是如果你非常激进地使用 boost 效果,即使你没有太多 50Hz / 60Hz 的交流声,你可能也会需要它。 默认电平是 -70dBV,这是非常安静的。 无论如何,0dBV 非常响——大多数吉他电平大约在 -20dB 范围内(0.14V 峰值,即 280mV 峰峰值电压)。 -40dB 是一种“安静的声音”(14mV 峰值电压),而 -60dB 几乎就是 静音。因此,-70dB 的噪声门*应该*是拥有良好 低噪声拾音器的一个不错的起点。 该噪声门允许将底噪一直降低到 -100dB, 这对于硬件实际能做到的程度来说已经是极其极限的边界了。 但我的环境和吉他实际上足够安静,我 *可以*降到 -85dB,并且它会明亮地发光以显示 噪声门已开启,且信号小于该值。 我实际上对此非常满意,因为这大约是一个 0.1mV 峰峰值的信号。这不仅意味着我的吉他没有从环境中拾取 大量噪声,同时也意味着效果器本身 并不 noisy。 或者,这也只是意味着我把数学计算全弄错了,它 在骗我。 还有 attack/release 值,可以调整包络线的计算方式,以及它对噪声的反应速度(以及它恢复到 门限状态的速度)。 - 压缩器 这执行的就是压缩器的功能。就像 噪声门一样,它有一个 attack/release 来调整信号包络线的追踪方式。它有一个 “boost”设置,允许它直接对信号进行整体提升,但 “level”则是它开始压缩时的电平。 “ratio”是它对超过该电平的信号进行压缩的激进程度(但 attack 也 非常相关:attack 关系到它对超过电平的信号反应有*多快*——或多慢)。 因此,“attack”基本上是说它对超过电平的信号 开始反应的速度有多快,然后 ratio 是它一旦 开始反应时的激进程度。 - Boost(带失真) 我喜欢这个。其他人可能不喜欢。 它可以仅用作纯净的 boost——但压缩器也可以做到这一点。不过 我喜欢用它做的事情是,将其设置为某个高得离谱的 boost 值(比如 +20dB),然后将 *level* 降低到相当 低的水平(比如 -20dB)。 +20dB 的信号 boost 基本上将电压电平提高了 10 倍, 但随后的“-20dB level”意味着“level”被设置为 0.14V。 而这个 boost 效果的作用是,当信号达到该电压 电平时,它会将其向下“折叠”(或者如果达到负 电平则向上折叠)。因此 +20dB 的 boost 首先会使信号大得多,但随后电平 折叠会将最终结果限制在合理的电平,而且 与其仅仅是在该电平上进行削波,信号会向下折叠,从而产生更高的 谐波。 我认为它听起来比典型的软削波或 硬削波效果更有趣。 - phaser - flanger 这些没什么特别的。它们是非常简单的效果。 - echo 这是来自 Cleveland Music Co 的 Echo King 效果,从 Hothouse 示例效果转换而来,适用于这款效果器。所有的功劳都归于 Ricky Sheaves,除非是我在转换中搞砸了,那样的话你可以 怪我。 它是 Maestro Echoplex 系列磁带延迟的 DSP 模型。 - 移频器 这个几乎肯定没什么用,但挺好玩的。它是一个移频器,但 *不是*那种聪明的“做 FFT,将频率向上或向下 移动”的类型。 相反,它基于一个延迟循环,通过以快于实时(升高音高)或慢于实时(降低 音高)的速度推进延迟来实现。然后,为了避免当你必须向后(或向前)跳跃时 产生突然的不连续性,它实际上分两个 阶段推进延迟,并乘以一个在不连续点处降为零的函数(这个函数 恰好是两个阶段的正弦/余弦,但也可以是其他形式)。 最终结果是:它确实改变了音高,但由于其工作原理,它也会产生延迟。 *并且*为了让声音听起来更复杂,它具有 feedback 功能,因此 它可以将其自身移频后的信号回馈到延迟循环中,从而 你又会得到另一次移频(并带有额外的延迟)。所以你可以 把它看作是一个带有移频的短 echo。 它通常在 +1 个八度移频时听起来最自然——尽管这也说明不了什么——但它 并不局限于完整的八度。你可以将音高移动任意的 分数比例。随便玩玩吧。 - 10 段 EQ 从实际算法的角度来看,这是最复杂的,同时 拥有最豪华的显示界面。 每个频段的增益为 +-20dB(即 0.1 .. 10 倍)。在极端情况下,它往往 会使信号失真——所有的数学运算都是以 32 位 单精度浮点数完成的,我不保证它完全稳定或平滑。 - "USB" 这不会影响声音,但会开启和关闭 USB 音频接口 逻辑,你可以选择立体声信号是全部为干声、全部为湿声,或者是“左声道湿声,右声道干声”。 这是一个进行中的工作。它能用,但并不完全可靠。
标签:Bash脚本, KiCad, Raspberry Pi Pico, 吉他效果器, 固件开发, 客户端加密, 嵌入式硬件, 物联网, 音频处理