老夫原本已经忘光光了,现在借着 AI 的强大力量捡回来。
Q:在 PC 时代早期,Turbo Basic 语言可以使用 play 语句驱动扬声器发出音乐,年头太久了,你能帮我把简谱转成程序的完整规则说一下吗?
A:Turbo Basic(以及早期的 QBASIC、GW-BASIC)确实可以通过 PLAY
语句驱动 PC 扬声器播放音乐。它的语法类似于一种简单的音乐标记语言,可以将简谱转换成代码。以下是完整的转换规则和示例:
1. PLAY 语句基础语法
- 音乐字符串由音符、音长、节奏控制符组成,不区分大小写。
2. 简谱 → PLAY 语句转换规则
(1) 音符(音高)
简谱符号 | PLAY 代码 | 说明 |
---|---|---|
1 (Do) | C |
中央 C(默认八度) |
2 (Re) | D |
|
3 (Mi) | E |
|
4 (Fa) | F |
|
5 (Sol) | G |
|
6 (La) | A |
|
7 (Si) | B |
|
0 (休止) | P |
停顿 |
升降号处理:
#
(升号):在音符后加+
,如C+
表示C#
。b
(降号):在音符后加-
,如B-
表示Bb
。
(2) 音长(节拍)
简谱符号 | PLAY 代码 | 实际时长(以 4 分音符为基准) |
---|---|---|
全音符 | L1 |
4 拍 |
2 分音符 | L2 |
2 拍 |
4 分音符 | L4 |
1 拍(默认值) |
8 分音符 | L8 |
0.5 拍 |
16 分音符 | L16 |
0.25 拍 |
附点音符:在音长代码后加 .
,如 L4.
= 附点 4 分音符(1.5 拍)。
(3) 八度控制
O<n>
:设置当前八度(n
> 范围 1~7,默认O4
,中央 C 在O4
)。>
:升高一个八度。<
:降低一个八度。
(4) 节奏(速度)
T<n>
:设置每分钟拍数(BPM),如T120
表示 120 BPM(默认T120
)。
(5) 其他控制
代码 | 功能 |
---|---|
MN |
标准音长(音符间短暂停顿) |
ML |
连奏(音符间无停顿) |
MF |
前台播放(等待播放完毕) |
MB |
后台播放(异步播放) |
3. 示例转换
示例 1:《欢乐颂》片段(简谱:3345 5432 1123 322)
O4
:第 4 八度。L4
:默认 4 分音符。- 最后一个
D
是 2 分音符(L2
)。
示例 2:《小星星》带附点(简谱:1155 665 4433 221)
4. 高级技巧
(1) 和弦(多音同时播放)
Turbo Basic 不支持真正的和弦,但可以通过 MB
后台播放模拟:
(2) 自定义音色(有限支持)
N<n>
:直接指定频率值(n
范围 0~84,0=休止)。- 例如
N60
对应中央 C。
(3) 循环播放
5. 完整示例程序
注意事项
- 硬件依赖:
PLAY
语句依赖 PC 主板上的压电扬声器(蜂鸣器),现代电脑可能无此硬件。 - 音色限制:只能生成简单方波,无音色控制。
- 替代方案:现代编程语言(如 Python 的
winsound
或pygame
)可更灵活地播放音乐。