Skip to content

About

一个音乐爱好者快速分享头脑中旋律的工具

Resources

Stars

5 stars

Watchers

1 watching

Forks

Repository files navigation

简谱演奏

Star History

Star History Chart

快速启动

基本功能

pip install -r requirements.txt

附加功能

1. 人声合成

如果需要使用VOCALOID功能,请在启动了docker的命令行运行:

Docker 启动:

docker pull voicevox/voicevox_engine:cpu-latest
docker run --rm -p '127.0.0.1:50021:50021' voicevox/voicevox_engine:cpu-latest

2. 导出 MP3

文件菜单中可以导出为MP3。

导出为 MP3 需要安装 ffmpeg。若未安装,程序会自动回退为 WAV 格式。

macOS(Homebrew):

brew install ffmpeg

Windows:

  • winget:winget install ffmpeg
  • Chocolatey:choco install ffmpeg
  • 或从 ffmpeg.org 下载,将 bin 目录加入 PATH

Linux:

  • Ubuntu/Debian:sudo apt install ffmpeg
  • Fedora:sudo dnf install ffmpeg
  • Arch:sudo pacman -S ffmpeg

安装后可用 ffmpeg -version 验证。

3. 打包为可执行文件(免安装)

使用 PyInstaller 打包为单文件,内含音色库与示例工作区:

pip install pyinstaller
pyinstaller ascii_choir.spec

输出在 dist/ASCII_Choir。详见 docs/PYINSTALLER_TUTORIAL.md。

记号介绍

1. [] 表示奏法记号或简谱格式记号,目前支持如下记号(同组记号之间互斥):

  1. 音量变化(首先寻找下3小节内最近的音量记号,否则音量调节的端点默认设置为当前音量到[p]/[f])
  • [‌crescendo‌] (或[c])
  • [decrescendo] (或[d])
  1. 音符长度微调
  • [~] 表示连奏
  • [·] 表示断奏
  1. 音量设置
  • [fff] 音量100%
  • [ff] 音量90%
  • [f] 音量80%
  • [mf] 音量70%
  • [mp] 音量50%
  • [p] 音量40%
  • [pp] 音量30%
  • [ppp] 音量20%
  1. 升降号技能调整
  • [deviation explicit on] 启用还原号。
  • [deviation explicit off] 关闭还原号。此时升降号只作用于单音,不持续。
  1. 八度记号
  • [8va] 高八度(ottava alta),将括号内音符整体升高一个八度
  • [8vb] 低八度(ottava bassa),将括号内音符整体降低一个八度
  • [15va] 高两个八度(quindicesima),将括号内音符整体升高两个八度
  • [15vb] 低两个八度,将括号内音符整体降低两个八度
  1. 琶音装饰[a] / [arpeggio]
  • 快速连续弹奏多个音符,从最低音开始,同时终止。无括号时只作用于右边第一个音(单音或和弦);有括号 [a](...) 则作用于括号内所有音。

有效的例子:

| [a]1/3/5 2 3 |        # 和弦 1/3/5 琶音,2、3 正常
| [arpeggio](1 2 3 4) | # 括号内四个音依次琶音
  1. 滑音 [gliss]
  • [gliss](起音 止音) 从起音滑到止音。默认占 1 拍、两个音符。可用 | 跨小节或 _ 缩短时值。

有效的例子:

| [gliss](1 5) |        # 从 1 滑到 5,1 拍
| [gliss](1_ 5) |       # 同上,时值由内容决定
| [gliss](1 5)_ |       # 0.5 拍滑音
  1. 颤音 [tr] / [tr+] / [tr-]
  • [tr](主音) 或 [tr] 主音 后续内容:主音与上方大二度快速交替。[tr+] 上颤音;[tr-] 下颤音(主音与下方大二度交替)。可用 - 和 _ 调整时值。

有效的例子:

| [tr](1) |             # 1 与上方 2 交替,1 拍
| [tr] 1 - (.5 1 2 3)_ | # 无括号时,后续内容直到 | 为颤音范围
| [tr-](1) |            # 1 与下方 7 交替
  1. 和声记号
  • [+3][-3][+5][-5] 按音名往下/上数:+3 往上三度(如 E→G),-3 往下三度(如 E→C、G→E);+5/-5 同理。不可用于含升降号(# b ^)的音符。
  1. 反复与结束记号
  • [dc] Da Capo:从此处跳回开头,再演奏至 [fine] 结束。
  • [fine]:在此处结束演奏。

有效的例子(先奏 A-B-[dc],再从头奏 A-B 至 [fine] 结束):

|1 2 3 4|
|5 6 7 1[dc]|
|1 2 3 4[fine]|

后面接圆括号,圆括号中的音符表示作用范围。 默认的音量是60%,如果不写圆括号,则表示作用范围从记号位置一直到互斥的下一个记号处或者末尾。 记号支持嵌套。

2. |表示小节号。系统自动计算每个小节的拍数是否正确。

不正确的小节会被红色高亮,将鼠标移动上去。可以关闭该功能。

有效的例子:

|1 2 5 1|

3. -写在音符右边的时候表示增加一拍,如果有多音写在最后一个音的最后,可以叠加使用。

有效的例子:

|3---|

4. _写在音符右边的时候表示调整音符的时值(除以2),如果有多音写在最后一个音的最后,可以叠加使用。括号可应用到 _ 上:(notes)_ 对括号内每一个音符均分后整体缩短一半,_ 的优先级高于 []。

有效的例子:

| 1_ 2_ 3 4 5 |
| 1 2 (3 4 5 6)_ |

5. 括号加数字表示n连音时值,即时值不能用-,_表示的时候使用,对括号内的每一个音符应用。均分(n=音符数)为默认。

有效的例子:

|(1 2 5 1 2 5 1 2 5 1 2 5)3|

6. 点·写在音符的左边表示低八度,在音符的右边表示高八度。可以叠加使用。

有效的例子:

|.3---|3---|.4---|4---|.5---| 5---|.6---| 6- 5-| 

7. 8表示重复上一个小节的内容。

&|(1 2 5 1 2 5 1 2 5 1 2 5)3|8|8|8|8|8|8|8|

8. 同时演奏与篇章

&表示一条旋律。可以在多个行头使用&,表示这些旋律同步进行,从而实现多声部演奏。 每一篇章的 & 数量相同,篇章之间用两个回车(双换行)分隔。渲染时按篇章顺序拼接。 结尾的小节号 | 可省略(会被忽略)。

有效的例子:

& [8vb](|.3---|3---|.4---|4---|) 
&|(1 2 5 1 2 5 1 2 5 1 2 5)3|8|8|8|

& [8vb](|.5---|5---|.6---|6- 5-|) 
&|8|8|8|8|

9. 0表示4分休止符。0~表示休止至小节末尾。

有效的例子:

|0 - 0 1_ 2_ | 3 0~ |

10. ~号写在音符的前面表示连音线。连音线可连到上一个小节的最后一音。输入 ~ 时自动重复上一音符(如 1 2 3 后输入 ~ 得到 1 2 3 ~3)。

有效的例子:

|0 - 0 (1 2)_ | 3 (4 5)_ 0_ 5 5_ | ~5 3 5 1. |
|5 6 7 1.|~3 2 1|

11. /表示多音同时演奏(和弦)。所有音符共享相同时值。如果要构造多个声部,请参见“同时演奏”。

有效的例子:

|0 - 0 (.6/1 .7/2)_ | 1/3 (2/4 3/5 0)_  3/5 3/5_ | ~3/~5 1/3 3/5 6/1. |

为了简记,也可以使用+3,-3,+5,-5等符号配置预制大三度/大五度上下和声。 有效的例子:

|0 - 0 [-3]((1 2)_ | 3 (4 5)_ 0_ 5 5_ | ~5 3 5 1. )|

12. # 表示升号,b表示降号,^表示还原号。[deviation explicit on]时,被升降的音名在整个小节中生效。

有效的例子:

| 1 #1 ^1 b1 |

全局设定

调性

调性输入在最前面,对所有音符应用统一半音偏移。篇章之间可用新的 \tonality、\beat、\bpm 覆盖前面的设定,实现转调、转拍、变速。

  • \tonality{X} 表示调性,对所有音符应用半音偏移。
  • 数字:直接表示上移或下移多少个半音,如 0、1、-1、+2。
  • 字母+升降号:快捷写法,C=0、D=2、#C=1、bD=1、bA=8 等。

有效的例子:

\tonality{0}
\tonality{b1}
\tonality{bA}
\tonality{bB}
\tonality{C}
\tonality{#C}
\tonality{+2}

篇章间覆盖(转调、转拍、变速):

\tonality{C}
\beat{4/4}
\bpm{60}

|1 2 3 4|5 4 3 2|1 - - -|

\tonality{D}
\bpm{120}

|1 2 3 4|5 4 3 2|1 - - -|

拍号

拍号紧接在调性之后。

  • \beat{分子/分母} 表示拍号,如 4/4、3/4、6/8。分母定义 1 拍(如 4/4 中四分音符=1拍),一小节=分子拍,便于计算。
  • \beat{c} 表示 common time(4/4),\beat{cut} 表示 cut time(2/2)

有效的例子:

\beat{4/4}
\beat{3/4}
\beat{c}

速度(bpm)

  • \bpm{数值} 表示每分钟拍数,用于设定曲目 tempo

有效的例子:

\bpm{120}
\bpm{60}

禁用小节号

由于这是一个创作类软件,很多时候小节号会给记谱带来额外负担。 使用\no_bar_check即可禁用小节号,同时beat也无效。

全局混响

\reverb{N} 对整曲施加混响,N 为 0–100,0 为无混响,100 为最大混响强度。作用于所有乐器。

\tonality{0}
\beat{4/4}
\bpm{120}
\reverb{30}

|1 2 3 4|5 6 7 1|

TTS 语音(篇章间)

\tts{文本}、\tts{文本}{语言} 或 \tts{文本}{语言}{voice_id} 用于在篇章之间插入语音朗读,仅可插入在篇章之间(双换行分隔的块)。

  • 支持语言:zh 中文、ja 日语、en 英语(默认)
  • voice_id(可选):VOICEVOX 的 style_id。若填写,则用 VOICEVOX 合成,不再使用 edge-tts;需先启动 voicevox_engine(默认 http://127.0.0.1:50021),可在 TTS 菜单 → VOICEVOX 音色选择 中查看并复制命令
  • 未填 voice_id 时:需安装 edge-tts,播放时需网络;音频解码优先用 audioread,否则需 pydub + ffmpeg

有效的例子:

\tonality{0}
\beat{4/4}
\bpm{120}

|1 2 3 4|

\tts{第一段结束}{zh}

|5 6 7 1|

\tts{Verse two}{en}

\tts{こんにちは}{ja}{1}

|1 2 3 4|5 6 7 1|

歌词(\lyrics、行内)

\lyrics{字1/字2/字3} 将斜杠分隔的每个字与一个音符对齐(连音线视为一个音符)。溢出自动添加到下一行第一个未对齐的音符。

  • \lyrics{...}{part_index}:声部索引,指定歌词追加到第几个声部(0 起)。多声部时,0=第一行旋律,1=第二行旋律,以此类推
  • \lyrics{...}{part_index}{voice_id}:voice_id 为 VOICEVOX style_id(可选)。有 voice_id 时播放会用 VOICEVOX 歌唱合成歌声,替代 WAV 音色
  • \lyrics{...}{part_index}{voice_id}{melody}:melody 为和声时旋律来源,0=第一音旋律,1=第二音旋律
  • \lyrics{...}{part_index}{voice_id}{melody}{volume}:volume 为歌声音量 0–150,默认 60,>100 可做提升
  • 行内歌词:1(啊) 2(一) 在音符后加括号(未测试!!)
\tonality{0}
\beat{4/4}
\lyrics{do/re/mi/fa}

|1 2 3 4|5 6 7 1|

多声部示例(\lyrics{音节}{part_index}{voice_id}{melody}{volume} 五个参数依次为):

  • 音节:斜杠分隔的字,与音符一一对齐
  • part_index:声部索引(0 起),0=第一行旋律,1=第二行旋律
  • voice_id:VOICEVOX 的 style_id,有则用歌唱合成;可省略
  • melody:和声时旋律来源,0=第一音旋律,1=第二音旋律
  • volume:歌声音量 0–150,默认 60,>100 可做提升
\tonality{0}
\beat{4/4}
\lyrics{啊/呀/哦}{0}{5}{0}  // 音节/声部0/音色5/第一音旋律
& 1 2 3 | 4 5 6

和弦 melody 示例(同一声部有和弦时,0 取每和弦第一音、1 取第二音):但目前只能启用一个

\tonality{0}
\beat{4/4}
\bpm{60}
\lyrics{低/低/音/音/唱/唱}{0}{5}{0}   // melody=0:取 1/3、2/4、3/5、4/6、5/7、6/1. 中的 1、2、3、4、5、6
\lyrics{高/高/音/音/唱/唱}{0}{5}{1}   // melody=1:取各和弦第二音 3、4、5、6、7、1.
& |1/3 2/4 3/5|4/6 5/7 6/1.|

音色与乐器

行首 [cello]、[guitar]、[drums] 等指定该声部乐器。鼓声部 [drums] 使用 GM 打击乐映射,鼓声库需先运行 sound_library/build_drums.py 从原始素材生成。

电吉他失真度

[distortion:N] 或 [drive:N](N 为 0–100)控制电吉他/电贝司的合成失真度。0 为原声,100 为最大失真。仅对 [guitar_electric]、[bass_electric] 生效。

& [guitar_electric][distortion:50]|1 2 3 4|   # 50% 失真
& [guitar_electric][drive:80]|5 6 7 1|        # 80% 失真

GM 鼓表([drums] 声部 MIDI 映射)

鼓声部使用与旋律一致的简谱格式(.1、.2、..#4 等),便于对齐。C 大调(\tonality{0})下示例:

MIDI 名称 简谱(tonality 0)
28 Slap(鼓棒) ...3
31 Sticks(鼓棒) ...5
35 Acoustic Bass Drum ...7
36 Bass Drum 1 ..1
37 Side Stick(鼓棒敲边) ..#1
38 Acoustic Snare ..2
39 Hand Clap ..#2
40 Electric Snare ..3
41 Low Floor Tom ..4
42 Closed Hi-Hat ..#4
43 High Floor Tom ..5
44 Pedal Hi-Hat ..#5
45 Low Tom ..6
46 Open Hi-Hat ..#6
47 Low-Mid Tom ..7
48 Hi-Mid Tom .1
49 Crash Cymbal 1 .#1
50 High Tom .2
51 Ride Cymbal 1 .#2
52 Chinese Cymbal .3
53 Ride Bell .4
55 Splash Cymbal .5
57 Crash Cymbal 2 .6
59 Ride Cymbal 2 .7

说明:鼓音使用简谱数字(含 .、..、#、b),与旋律记谱一致,便于多声部对齐。鼓声部不受 \tonality 控制,始终按 C 大调映射(如 .1=C、.6=A)。

导入文件(\import)

\import{文件名} 在播放前会被自动展开为对应文件的内容,用于模块化组织简谱。

  • 文件名相对于工作区根目录或当前文件所在目录解析
  • 支持递归导入(被导入文件中的 \import 会继续展开)
  • 检测循环导入并报错

有效的例子:

\tonality{0}
\beat{4/4}
\bpm{60}

\import{前奏.choir}

|1 2 3 4|5 6 7 1|

\import{副歌.choir}

VOICEVOX 音色选择

TTS 菜单 → VOICEVOX 音色选择 可打开音色对话框:

  • 左侧:扁平音色列表,点击即试听
  • 右侧:选中音色的全身照与利用規約
  • 复制 TTS 命令:将 \tts{こんにちは}{ja}{style_id} 复制到剪贴板
  • 复制 歌词命令:将 \lyrics{字/字}{0}{style_id}{0} 复制到剪贴板(可追加 {60} 设置音量)
  • 清唱生成:用当前选中音色将当前编辑器中的简谱合成为歌声(无 WAV 伴奏),直接播放

使用前需启动 voicevox_engine(默认 http://127.0.0.1:50021)。

歌词歌声合成:当 \lyrics{...}{part}{voice_id}{melody}{volume} 中指定了 voice_id 时,播放该篇章会用 VOICEVOX 歌唱 API 合成歌声。volume 可选,默认 60。注意:歌唱仅支持 /singers 中的角色(如波音リツ),若所选音色不支持歌唱,程序会自动使用可用的歌唱角色。

编辑器功能

导入插入

从左侧工作区文件列表拖拽文件到输入框,可在落点插入 \import{文件名},播放前会自动展开。

查找与替换

  • Ctrl+F / ⌘F:打开查找对话框,支持查找下一个/上一个、区分大小写
  • Ctrl+H / ⌘⌥F(Mac):打开替换对话框,支持替换、全部替换
  • 若有选中文本(单行),会预填到查找框

格式化

  • Ctrl+Shift+F / ⌘⇧F:自动对齐同时演奏的多个小节号。勾选「行超宽时自动换新篇章」时,超宽行会自动换新篇章。

工作区记忆

程序会记住上次打开的工作区及每个工作区的最后打开文件,下次启动时自动恢复。

括号捕获组高亮

自动使用淡色荧光高亮括号作用域。

About

一个音乐爱好者快速分享头脑中旋律的工具

Resources

Stars

5 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages