Skip to content

RogerDTZ/EGO1-Piano

Repository files navigation

1. 简介

本项目是一位verilog初学者所作,实现方式或许较暴力(?轻喷

系统内置63个钢琴音符的单段波形,精度为8bit。通过反复播放同一波形并辅以ADSR音量包络,较好地还原了钢琴/电钢琴的效果 钢琴支持多个音符同时播放,且附带自动演奏功能

需要接入键盘和耳机使用。键盘zsxdcvgbhnjm,对应C4八度,q2w3er5t6y7ui对应C5八度。七段数码管会显示最后按下的音符名 按下]开始自动弹奏泪水之城(city of tears),按下[停止播放

由于实现上的经验不足,键盘的多键存在很大的冲突问题且时不时会卡bug,待解决

2. 工作流程

2.1. 音色处理和导入

  1. 用FL Studios的FL Keys弹奏63个音符,导出为notes/piano_note_samples.wav,再手动取各音符单段波形,保存为notes/xxx.wav
  2. 运行wav_to_pwm.py将各音符波形转化为PWM信号,导出为data/xxx.txt(pwm信号)和info/xxx.info(音符波形长度)
  3. 运行code_gen.py自动生成所有音符的例化代码与音符输出合成代码,结果存在code_gen_output.txt中,将所有代码拷贝至设计文件instrument.v的对应部分
  4. data目录下的所有PWM信号文件拷贝至verilog项目的设计文件夹下,与note.v等文件处于同一位置

2.2. 曲谱的录入

  1. 用FL Studios敲谱,输出MIDI文件
  2. 运行midi_reader.py,将MIDI文件转化为所有按键关于时间的按下状态。泪城的节奏及其丰富,有大量旋律穿插,直接输出的MIDI存在许多某些音符还未松开就再次按下的情况。为了不被吞音,我选择在每两个原帧之间插入一个新帧,用于加入额外的松键指令。这样note模块就能模拟出真实弹奏时的效果
  3. 将2.生成的曲谱city of tears.txt拷贝至verilog项目的设计文件夹下,与player.v等文件处于同一位置

3. 设计结构

4. 彩蛋

项目内置了to be continue的波形文件,试着用note模块魔改或直接实现一个PWM播放器把经典片段播放出来吧 XD

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published