ebiten 学习(13)-piano, 9白键7黑键

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

没有变化。
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值