2021SC@SDUSC
一、前言
1.说明
audio 说明文档地址
audio package - github.com/hajimehoshi/ebiten/v2/audio - pkg.go.dev
本文中所有截图和代码均来自说明文档或 ebiten 源文件
笔者负责 audio 音频相关的代码分析
2.梗概
解析 examples 包下的 piano 中的例子。
手动生成钢琴音色。
二、界面以及音乐效果
界面包含A - L 9个白键,音调递增,还有7个黑键。
右上角是帧数。
按压键盘对应按键,会有钢琴声音播放。
三、实现
1.画面实现
一个 main 方法前可以有多个 init 初始化方法,这个初始化方法是用来限制文字大小和格式。
这里规定了窗口大小、采样频率、基频。
这里创建一张和窗口大小相当的图片,然后构造这个静态图片。
展示。
2.钢琴声音生成**
钢琴的声音是手动模拟生成的。
首先是三个变量,分别是钢琴按键与音频流对应关系、状态码、通讯队列。
然后键盘值。
和上面 pianoNoteSamples 一一对应。
pianoAt 生成给定频率的第 i 个钢琴音频样本。
用多个正弦波模拟钢琴的波。
toBytes 返回具有给定左/右序列的 2ch 小端16位字节序列。
初始化钢琴数据。
通过上述几个方法,填充 pianoNoteSamples。
3.game
4.出声逻辑
首先初始化数据,然后循环检测按键,在 pianoNoteSamples 中索引对应音频。
然后根据字节流创建播放器播放。
playNote 以给定的频率播放钢琴声音。
5.main
没有变化。