ApolloTab 0.2.0__tar.gz → 0.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {apollotab-0.2.0 → apollotab-0.2.1}/ApolloTab.egg-info/PKG-INFO +115 -109
- {apollotab-0.2.0 → apollotab-0.2.1}/PKG-INFO +115 -109
- {apollotab-0.2.0 → apollotab-0.2.1}/README.md +114 -108
- {apollotab-0.2.0 → apollotab-0.2.1}/pyproject.toml +1 -1
- {apollotab-0.2.0 → apollotab-0.2.1}/ApolloTab/__init__.py +0 -0
- {apollotab-0.2.0 → apollotab-0.2.1}/ApolloTab/player.py +0 -0
- {apollotab-0.2.0 → apollotab-0.2.1}/ApolloTab/py.typed +0 -0
- {apollotab-0.2.0 → apollotab-0.2.1}/ApolloTab.egg-info/SOURCES.txt +0 -0
- {apollotab-0.2.0 → apollotab-0.2.1}/ApolloTab.egg-info/dependency_links.txt +0 -0
- {apollotab-0.2.0 → apollotab-0.2.1}/ApolloTab.egg-info/requires.txt +0 -0
- {apollotab-0.2.0 → apollotab-0.2.1}/ApolloTab.egg-info/top_level.txt +0 -0
- {apollotab-0.2.0 → apollotab-0.2.1}/LICENSE +0 -0
- {apollotab-0.2.0 → apollotab-0.2.1}/MANIFEST.in +0 -0
- {apollotab-0.2.0 → apollotab-0.2.1}/examples/audio_playback.py +0 -0
- {apollotab-0.2.0 → apollotab-0.2.1}/examples/basic_parse.py +0 -0
- {apollotab-0.2.0 → apollotab-0.2.1}/examples/render_tab.py +0 -0
- {apollotab-0.2.0 → apollotab-0.2.1}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ApolloTab
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: Guitar Pro file parsing, rendering, and audio playback engine library
|
|
5
5
|
Author: ZhuWenqian
|
|
6
6
|
Maintainer: ZhuWenqian
|
|
@@ -230,30 +230,31 @@ if __name__ == "__main__":
|
|
|
230
230
|
|
|
231
231
|
### Core Functions
|
|
232
232
|
|
|
233
|
-
| Function
|
|
234
|
-
|
|
235
|
-
| `parse_gtp(path)`
|
|
233
|
+
| Function | Description | Return Value |
|
|
234
|
+
| ------------------------------- | ------------------------- | --------------- |
|
|
235
|
+
| `parse_gtp(path)` | Parse GTP file | `GTPSong` |
|
|
236
236
|
| `render_gtp(path, track_index)` | One-click render GTP file | `List[QPixmap]` |
|
|
237
237
|
|
|
238
238
|
### Main Classes
|
|
239
239
|
|
|
240
240
|
#### Data Models (`ApolloTab.models`)
|
|
241
241
|
|
|
242
|
-
| Class
|
|
243
|
-
|
|
244
|
-
| `GTPSong`
|
|
245
|
-
| `GTPTrack`
|
|
242
|
+
| Class | Description |
|
|
243
|
+
| ------------ | ------------------------------------------------------- |
|
|
244
|
+
| `GTPSong` | Song object (title/artist/BPM/tracks list) |
|
|
245
|
+
| `GTPTrack` | Track object (name/tuning/measures list) |
|
|
246
246
|
| `GTPMeasure` | Measure object (time signature/repeat marks/beats list) |
|
|
247
|
-
| `GTPBeat`
|
|
248
|
-
| `GTPNote`
|
|
247
|
+
| `GTPBeat` | Beat object (duration/dot/notes list) |
|
|
248
|
+
| `GTPNote` | Note object (fret/string/MIDI pitch/techniques) |
|
|
249
249
|
|
|
250
250
|
#### Parser (`ApolloTab.parser`)
|
|
251
251
|
|
|
252
|
-
| Class
|
|
253
|
-
|
|
252
|
+
| Class | Description |
|
|
253
|
+
| ----------- | --------------------- |
|
|
254
254
|
| `GTPParser` | GTP file parser class |
|
|
255
255
|
|
|
256
256
|
**Usage**:
|
|
257
|
+
|
|
257
258
|
```python
|
|
258
259
|
from ApolloTab.parser import GTPParser
|
|
259
260
|
|
|
@@ -263,12 +264,13 @@ song = parser.parse("song.gp5")
|
|
|
263
264
|
|
|
264
265
|
#### Renderer (`ApolloTab.renderer`)
|
|
265
266
|
|
|
266
|
-
| Class
|
|
267
|
-
|
|
268
|
-
| `TabRenderer`
|
|
269
|
-
| `TabLayoutEngine` | Layout calculation engine
|
|
267
|
+
| Class | Description |
|
|
268
|
+
| ----------------- | -------------------------- |
|
|
269
|
+
| `TabRenderer` | Tablature rendering engine |
|
|
270
|
+
| `TabLayoutEngine` | Layout calculation engine |
|
|
270
271
|
|
|
271
272
|
**Usage**:
|
|
273
|
+
|
|
272
274
|
```python
|
|
273
275
|
from ApolloTab.renderer import TabRenderer, RenderConfig
|
|
274
276
|
|
|
@@ -278,13 +280,14 @@ pages = renderer.render(song, track_index=0)
|
|
|
278
280
|
|
|
279
281
|
#### Audio Engine (`ApolloTab.audio`)
|
|
280
282
|
|
|
281
|
-
| Class
|
|
282
|
-
|
|
283
|
-
| `MidiConverter` | GTP data to MIDI event converter
|
|
284
|
-
| `SynthEngine`
|
|
285
|
-
| `MidiEvent`
|
|
283
|
+
| Class | Description |
|
|
284
|
+
| --------------- | --------------------------------- |
|
|
285
|
+
| `MidiConverter` | GTP data to MIDI event converter |
|
|
286
|
+
| `SynthEngine` | FluidSynth audio synthesis engine |
|
|
287
|
+
| `MidiEvent` | Single MIDI event data model |
|
|
286
288
|
|
|
287
289
|
**Usage**:
|
|
290
|
+
|
|
288
291
|
```python
|
|
289
292
|
from ApolloTab.audio import MidiConverter, SynthEngine
|
|
290
293
|
|
|
@@ -300,12 +303,12 @@ engine.play()
|
|
|
300
303
|
|
|
301
304
|
#### Utilities (`ApolloTab.utils`)
|
|
302
305
|
|
|
303
|
-
| Class / Constant
|
|
304
|
-
|
|
305
|
-
| `RenderConfig`
|
|
306
|
-
| `TechniqueType`
|
|
307
|
-
| `StandardTunings` | Standard tuning definitions
|
|
308
|
-
| `NoteDuration`
|
|
306
|
+
| Class / Constant | Description |
|
|
307
|
+
| ----------------- | -------------------------------------------------- |
|
|
308
|
+
| `RenderConfig` | Rendering parameter configuration (all adjustable) |
|
|
309
|
+
| `TechniqueType` | Technique type enum (18 types) |
|
|
310
|
+
| `StandardTunings` | Standard tuning definitions |
|
|
311
|
+
| `NoteDuration` | Duration enum |
|
|
309
312
|
|
|
310
313
|
## Configuration
|
|
311
314
|
|
|
@@ -350,24 +353,24 @@ engine = SynthEngine(
|
|
|
350
353
|
|
|
351
354
|
## Supported Techniques
|
|
352
355
|
|
|
353
|
-
| Technique
|
|
354
|
-
|
|
355
|
-
| Hammer-On
|
|
356
|
-
| Pull-Off
|
|
357
|
-
| Slide Up
|
|
358
|
-
| Slide Down
|
|
359
|
-
| Bend
|
|
360
|
-
| Vibrato
|
|
361
|
-
| Palm Mute
|
|
362
|
-
| Staccato
|
|
363
|
-
| Let Ring
|
|
364
|
-
| Natural Harmonic N.H.
|
|
365
|
-
| Artificial Harmonic A.H.
|
|
366
|
-
| Tremolo Picking Trem.Pick. | Diagonal underline | |
|
|
367
|
-
| Trill
|
|
368
|
-
| Grace Note
|
|
369
|
-
| Accentuated
|
|
370
|
-
| Ghost Note
|
|
356
|
+
| Technique | Abbreviation | Symbol Type |
|
|
357
|
+
| -------------------------- | ------------------ | -------------------- |
|
|
358
|
+
| Hammer-On | H | Text label |
|
|
359
|
+
| Pull-Off | P | Text label |
|
|
360
|
+
| Slide Up | s/S | Line + arrow |
|
|
361
|
+
| Slide Down | S | Line + arrow |
|
|
362
|
+
| Bend | B | Arc + arrow + degree |
|
|
363
|
+
| Vibrato | \~ | Wavy line |
|
|
364
|
+
| Palm Mute | P.M. | Dashed extension |
|
|
365
|
+
| Staccato | . | Dot mark |
|
|
366
|
+
| Let Ring | Dashed extension | <br /> |
|
|
367
|
+
| Natural Harmonic N.H. | Diamond mark | <br /> |
|
|
368
|
+
| Artificial Harmonic A.H. | Diamond + text | <br /> |
|
|
369
|
+
| Tremolo Picking Trem.Pick. | Diagonal underline | <br /> |
|
|
370
|
+
| Trill | "tr" text | <br /> |
|
|
371
|
+
| Grace Note | Small note | <br /> |
|
|
372
|
+
| Accentuated | > | Symbol |
|
|
373
|
+
| Ghost Note | Parentheses | <br /> |
|
|
371
374
|
|
|
372
375
|
## Development Guide
|
|
373
376
|
|
|
@@ -433,21 +436,21 @@ twine upload dist/*
|
|
|
433
436
|
|
|
434
437
|
### Required Dependencies
|
|
435
438
|
|
|
436
|
-
| Package
|
|
437
|
-
|
|
438
|
-
| [pyguitarpro](https://github.com/ozono/guitarpro)
|
|
439
|
-
| [PyQt5](https://www.riverbankcomputing.com/software/pyqt/) | >=5.15
|
|
439
|
+
| Package | Version | Purpose | License |
|
|
440
|
+
| ---------------------------------------------------------- | ------- | ------------------------- | -------- |
|
|
441
|
+
| [pyguitarpro](https://github.com/ozono/guitarpro) | >=0.11 | Guitar Pro file parsing | LGPL-2.1 |
|
|
442
|
+
| [PyQt5](https://www.riverbankcomputing.com/software/pyqt/) | >=5.15 | GUI rendering framework | GPL v3 |
|
|
440
443
|
| [pyfluidsynth](https://github.com/nwhitehead/pyfluidsynth) | >=1.4.0 | FluidSynth Python binding | LGPL-2.1 |
|
|
441
444
|
|
|
442
445
|
### Optional Dependencies
|
|
443
446
|
|
|
444
|
-
| Group | Package
|
|
445
|
-
|
|
446
|
-
| dev
|
|
447
|
+
| Group | Package | Purpose |
|
|
448
|
+
| ----- | -------------------------- | ----------------------------- |
|
|
449
|
+
| dev | pytest, black, isort, mypy | Development and testing tools |
|
|
447
450
|
|
|
448
451
|
## License
|
|
449
452
|
|
|
450
|
-
This project is licensed under the [
|
|
453
|
+
This project is licensed under the [MPL 2.0](LICENSE).
|
|
451
454
|
|
|
452
455
|
## Contributing
|
|
453
456
|
|
|
@@ -465,15 +468,15 @@ Issues and Pull Requests are welcome!
|
|
|
465
468
|
- **[pyguitarpro](https://github.com/ozono/guitarpro)** - Underlying library for Guitar Pro file parsing
|
|
466
469
|
- **[FluidSynth](https://github.com/FluidSynth/fluidsynth)** - Real-time MIDI synthesis engine
|
|
467
470
|
|
|
468
|
-
|
|
471
|
+
***
|
|
469
472
|
|
|
470
473
|
**Version**: v0.2.0
|
|
471
474
|
**Last Updated**: 2026-06-12
|
|
472
475
|
**Compatibility**: Windows / Linux / macOS (Python 3.8+)
|
|
473
476
|
|
|
474
|
-
|
|
477
|
+
***
|
|
475
478
|
|
|
476
|
-
|
|
479
|
+
***
|
|
477
480
|
|
|
478
481
|
# ApolloTab(中文)
|
|
479
482
|
|
|
@@ -679,30 +682,31 @@ if __name__ == "__main__":
|
|
|
679
682
|
|
|
680
683
|
### 核心函数
|
|
681
684
|
|
|
682
|
-
| 函数
|
|
683
|
-
|
|
684
|
-
| `parse_gtp(path)`
|
|
685
|
+
| 函数 | 说明 | 返回值 |
|
|
686
|
+
| ------------------------------- | --------- | --------------- |
|
|
687
|
+
| `parse_gtp(path)` | 解析GTP文件 | `GTPSong` |
|
|
685
688
|
| `render_gtp(path, track_index)` | 一键渲染GTP文件 | `List[QPixmap]` |
|
|
686
689
|
|
|
687
690
|
### 主要类
|
|
688
691
|
|
|
689
692
|
#### 数据模型 (`ApolloTab.models`)
|
|
690
693
|
|
|
691
|
-
| 类名
|
|
692
|
-
|
|
693
|
-
| `GTPSong`
|
|
694
|
-
| `GTPTrack`
|
|
695
|
-
| `GTPMeasure` | 小节对象(拍号/重复记号/拍列表)
|
|
696
|
-
| `GTPBeat`
|
|
697
|
-
| `GTPNote`
|
|
694
|
+
| 类名 | 说明 |
|
|
695
|
+
| ------------ | --------------------- |
|
|
696
|
+
| `GTPSong` | 歌曲对象(标题/艺术家/BPM/音轨列表) |
|
|
697
|
+
| `GTPTrack` | 音轨对象(名称/调弦/小节列表) |
|
|
698
|
+
| `GTPMeasure` | 小节对象(拍号/重复记号/拍列表) |
|
|
699
|
+
| `GTPBeat` | 拍对象(时值/附点/音符列表) |
|
|
700
|
+
| `GTPNote` | 音符对象(品格/弦/MIDI音高/技巧) |
|
|
698
701
|
|
|
699
702
|
#### 解析器 (`ApolloTab.parser`)
|
|
700
703
|
|
|
701
|
-
| 类名
|
|
702
|
-
|
|
704
|
+
| 类名 | 说明 |
|
|
705
|
+
| ----------- | --------- |
|
|
703
706
|
| `GTPParser` | GTP文件解析器类 |
|
|
704
707
|
|
|
705
708
|
**用法**:
|
|
709
|
+
|
|
706
710
|
```python
|
|
707
711
|
from ApolloTab.parser import GTPParser
|
|
708
712
|
|
|
@@ -712,12 +716,13 @@ song = parser.parse("song.gp5")
|
|
|
712
716
|
|
|
713
717
|
#### 渲染器 (`ApolloTab.renderer`)
|
|
714
718
|
|
|
715
|
-
| 类名
|
|
716
|
-
|
|
717
|
-
| `TabRenderer`
|
|
718
|
-
| `TabLayoutEngine` | 布局计算引擎
|
|
719
|
+
| 类名 | 说明 |
|
|
720
|
+
| ----------------- | ------- |
|
|
721
|
+
| `TabRenderer` | 六线谱渲染引擎 |
|
|
722
|
+
| `TabLayoutEngine` | 布局计算引擎 |
|
|
719
723
|
|
|
720
724
|
**用法**:
|
|
725
|
+
|
|
721
726
|
```python
|
|
722
727
|
from ApolloTab.renderer import TabRenderer, RenderConfig
|
|
723
728
|
|
|
@@ -727,13 +732,14 @@ pages = renderer.render(song, track_index=0)
|
|
|
727
732
|
|
|
728
733
|
#### 音频引擎 (`ApolloTab.audio`)
|
|
729
734
|
|
|
730
|
-
| 类名
|
|
731
|
-
|
|
732
|
-
| `MidiConverter` | GTP数据→MIDI事件转换器
|
|
733
|
-
| `SynthEngine`
|
|
734
|
-
| `MidiEvent`
|
|
735
|
+
| 类名 | 说明 |
|
|
736
|
+
| --------------- | ---------------- |
|
|
737
|
+
| `MidiConverter` | GTP数据→MIDI事件转换器 |
|
|
738
|
+
| `SynthEngine` | FluidSynth音频合成引擎 |
|
|
739
|
+
| `MidiEvent` | 单个MIDI事件数据模型 |
|
|
735
740
|
|
|
736
741
|
**用法**:
|
|
742
|
+
|
|
737
743
|
```python
|
|
738
744
|
from ApolloTab.audio import MidiConverter, SynthEngine
|
|
739
745
|
|
|
@@ -749,12 +755,12 @@ engine.play()
|
|
|
749
755
|
|
|
750
756
|
#### 工具 (`ApolloTab.utils`)
|
|
751
757
|
|
|
752
|
-
| 类/常量
|
|
753
|
-
|
|
754
|
-
| `RenderConfig`
|
|
755
|
-
| `TechniqueType`
|
|
756
|
-
| `StandardTunings` | 标准调弦定义
|
|
757
|
-
| `NoteDuration`
|
|
758
|
+
| 类/常量 | 说明 |
|
|
759
|
+
| ----------------- | ------------ |
|
|
760
|
+
| `RenderConfig` | 渲染参数配置(全部可调) |
|
|
761
|
+
| `TechniqueType` | 技巧类型枚举(18种) |
|
|
762
|
+
| `StandardTunings` | 标准调弦定义 |
|
|
763
|
+
| `NoteDuration` | 时值枚举 |
|
|
758
764
|
|
|
759
765
|
## 配置说明
|
|
760
766
|
|
|
@@ -799,24 +805,24 @@ engine = SynthEngine(
|
|
|
799
805
|
|
|
800
806
|
## 支持的演奏技巧
|
|
801
807
|
|
|
802
|
-
| 技巧
|
|
803
|
-
|
|
804
|
-
| 击弦 Hammer-On
|
|
805
|
-
| 勾弦 Pull-Off
|
|
806
|
-
| 上滑音 Slide Up
|
|
807
|
-
| 下滑音 Slide Down
|
|
808
|
-
| 推弦 Bend
|
|
809
|
-
| 颤音 Vibrato
|
|
810
|
-
| 闷音 Palm Mute
|
|
811
|
-
| 断奏 Staccato
|
|
812
|
-
| 延音 Let Ring
|
|
813
|
-
| 自然泛音 N.H.
|
|
814
|
-
| 人工泛音 A.H.
|
|
815
|
-
| 震音拨弦 Trem.Pick. | 斜线下划线
|
|
816
|
-
| 颤音 Trill
|
|
817
|
-
| 装饰音 Grace Note
|
|
818
|
-
| 重音 Accentuated
|
|
819
|
-
| 幽灵音 Ghost Note
|
|
808
|
+
| 技巧 | 缩写 | 符号类型 |
|
|
809
|
+
| --------------- | ------ | -------- |
|
|
810
|
+
| 击弦 Hammer-On | H | 文字标签 |
|
|
811
|
+
| 勾弦 Pull-Off | P | 文字标签 |
|
|
812
|
+
| 上滑音 Slide Up | s/S | 连线+箭头 |
|
|
813
|
+
| 下滑音 Slide Down | S | 连线+箭头 |
|
|
814
|
+
| 推弦 Bend | B | 弧线+箭头+度数 |
|
|
815
|
+
| 颤音 Vibrato | \~ | 波浪线 |
|
|
816
|
+
| 闷音 Palm Mute | P.M. | 虚线延长线 |
|
|
817
|
+
| 断奏 Staccato | . | 点标记 |
|
|
818
|
+
| 延音 Let Ring | 虚线延长线 | <br /> |
|
|
819
|
+
| 自然泛音 N.H. | 菱形标记 | <br /> |
|
|
820
|
+
| 人工泛音 A.H. | 菱形+文字 | <br /> |
|
|
821
|
+
| 震音拨弦 Trem.Pick. | 斜线下划线 | <br /> |
|
|
822
|
+
| 颤音 Trill | "tr"文字 | <br /> |
|
|
823
|
+
| 装饰音 Grace Note | 小音符 | <br /> |
|
|
824
|
+
| 重音 Accentuated | > | 符号 |
|
|
825
|
+
| 幽灵音 Ghost Note | 括号包裹 | <br /> |
|
|
820
826
|
|
|
821
827
|
## 开发指南
|
|
822
828
|
|
|
@@ -895,21 +901,21 @@ twine upload dist/*
|
|
|
895
901
|
|
|
896
902
|
### 必需依赖
|
|
897
903
|
|
|
898
|
-
| 包名
|
|
899
|
-
|
|
900
|
-
| [pyguitarpro](https://github.com/ozono/guitarpro)
|
|
901
|
-
| [PyQt5](https://www.riverbankcomputing.com/software/pyqt/) | >=5.15
|
|
904
|
+
| 包名 | 版本 | 用途 | 许可证 |
|
|
905
|
+
| ---------------------------------------------------------- | ------- | ------------------- | -------- |
|
|
906
|
+
| [pyguitarpro](https://github.com/ozono/guitarpro) | >=0.11 | Guitar Pro文件解析 | LGPL-2.1 |
|
|
907
|
+
| [PyQt5](https://www.riverbankcomputing.com/software/pyqt/) | >=5.15 | GUI渲染框架 | GPL v3 |
|
|
902
908
|
| [pyfluidsynth](https://github.com/nwhitehead/pyfluidsynth) | >=1.4.0 | FluidSynth Python绑定 | LGPL-2.1 |
|
|
903
909
|
|
|
904
910
|
### 可选依赖
|
|
905
911
|
|
|
906
|
-
| 组名
|
|
907
|
-
|
|
912
|
+
| 组名 | 包名 | 用途 |
|
|
913
|
+
| --- | -------------------------- | ------- |
|
|
908
914
|
| dev | pytest, black, isort, mypy | 开发和测试工具 |
|
|
909
915
|
|
|
910
916
|
## 许可证
|
|
911
917
|
|
|
912
|
-
本项目采用 [
|
|
918
|
+
本项目采用 [MPL 2.0](LICENSE) 开源协议。
|
|
913
919
|
|
|
914
920
|
## 贡献
|
|
915
921
|
|
|
@@ -927,7 +933,7 @@ twine upload dist/*
|
|
|
927
933
|
- **[pyguitarpro](https://github.com/ozono/guitarpro)** - Guitar Pro 文件解析底层库
|
|
928
934
|
- **[FluidSynth](https://github.com/FluidSynth/fluidsynth)** - 实时 MIDI 合成引擎
|
|
929
935
|
|
|
930
|
-
|
|
936
|
+
***
|
|
931
937
|
|
|
932
938
|
**版本**: v0.2.0
|
|
933
939
|
**最后更新**: 2026-06-12
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ApolloTab
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: Guitar Pro file parsing, rendering, and audio playback engine library
|
|
5
5
|
Author: ZhuWenqian
|
|
6
6
|
Maintainer: ZhuWenqian
|
|
@@ -230,30 +230,31 @@ if __name__ == "__main__":
|
|
|
230
230
|
|
|
231
231
|
### Core Functions
|
|
232
232
|
|
|
233
|
-
| Function
|
|
234
|
-
|
|
235
|
-
| `parse_gtp(path)`
|
|
233
|
+
| Function | Description | Return Value |
|
|
234
|
+
| ------------------------------- | ------------------------- | --------------- |
|
|
235
|
+
| `parse_gtp(path)` | Parse GTP file | `GTPSong` |
|
|
236
236
|
| `render_gtp(path, track_index)` | One-click render GTP file | `List[QPixmap]` |
|
|
237
237
|
|
|
238
238
|
### Main Classes
|
|
239
239
|
|
|
240
240
|
#### Data Models (`ApolloTab.models`)
|
|
241
241
|
|
|
242
|
-
| Class
|
|
243
|
-
|
|
244
|
-
| `GTPSong`
|
|
245
|
-
| `GTPTrack`
|
|
242
|
+
| Class | Description |
|
|
243
|
+
| ------------ | ------------------------------------------------------- |
|
|
244
|
+
| `GTPSong` | Song object (title/artist/BPM/tracks list) |
|
|
245
|
+
| `GTPTrack` | Track object (name/tuning/measures list) |
|
|
246
246
|
| `GTPMeasure` | Measure object (time signature/repeat marks/beats list) |
|
|
247
|
-
| `GTPBeat`
|
|
248
|
-
| `GTPNote`
|
|
247
|
+
| `GTPBeat` | Beat object (duration/dot/notes list) |
|
|
248
|
+
| `GTPNote` | Note object (fret/string/MIDI pitch/techniques) |
|
|
249
249
|
|
|
250
250
|
#### Parser (`ApolloTab.parser`)
|
|
251
251
|
|
|
252
|
-
| Class
|
|
253
|
-
|
|
252
|
+
| Class | Description |
|
|
253
|
+
| ----------- | --------------------- |
|
|
254
254
|
| `GTPParser` | GTP file parser class |
|
|
255
255
|
|
|
256
256
|
**Usage**:
|
|
257
|
+
|
|
257
258
|
```python
|
|
258
259
|
from ApolloTab.parser import GTPParser
|
|
259
260
|
|
|
@@ -263,12 +264,13 @@ song = parser.parse("song.gp5")
|
|
|
263
264
|
|
|
264
265
|
#### Renderer (`ApolloTab.renderer`)
|
|
265
266
|
|
|
266
|
-
| Class
|
|
267
|
-
|
|
268
|
-
| `TabRenderer`
|
|
269
|
-
| `TabLayoutEngine` | Layout calculation engine
|
|
267
|
+
| Class | Description |
|
|
268
|
+
| ----------------- | -------------------------- |
|
|
269
|
+
| `TabRenderer` | Tablature rendering engine |
|
|
270
|
+
| `TabLayoutEngine` | Layout calculation engine |
|
|
270
271
|
|
|
271
272
|
**Usage**:
|
|
273
|
+
|
|
272
274
|
```python
|
|
273
275
|
from ApolloTab.renderer import TabRenderer, RenderConfig
|
|
274
276
|
|
|
@@ -278,13 +280,14 @@ pages = renderer.render(song, track_index=0)
|
|
|
278
280
|
|
|
279
281
|
#### Audio Engine (`ApolloTab.audio`)
|
|
280
282
|
|
|
281
|
-
| Class
|
|
282
|
-
|
|
283
|
-
| `MidiConverter` | GTP data to MIDI event converter
|
|
284
|
-
| `SynthEngine`
|
|
285
|
-
| `MidiEvent`
|
|
283
|
+
| Class | Description |
|
|
284
|
+
| --------------- | --------------------------------- |
|
|
285
|
+
| `MidiConverter` | GTP data to MIDI event converter |
|
|
286
|
+
| `SynthEngine` | FluidSynth audio synthesis engine |
|
|
287
|
+
| `MidiEvent` | Single MIDI event data model |
|
|
286
288
|
|
|
287
289
|
**Usage**:
|
|
290
|
+
|
|
288
291
|
```python
|
|
289
292
|
from ApolloTab.audio import MidiConverter, SynthEngine
|
|
290
293
|
|
|
@@ -300,12 +303,12 @@ engine.play()
|
|
|
300
303
|
|
|
301
304
|
#### Utilities (`ApolloTab.utils`)
|
|
302
305
|
|
|
303
|
-
| Class / Constant
|
|
304
|
-
|
|
305
|
-
| `RenderConfig`
|
|
306
|
-
| `TechniqueType`
|
|
307
|
-
| `StandardTunings` | Standard tuning definitions
|
|
308
|
-
| `NoteDuration`
|
|
306
|
+
| Class / Constant | Description |
|
|
307
|
+
| ----------------- | -------------------------------------------------- |
|
|
308
|
+
| `RenderConfig` | Rendering parameter configuration (all adjustable) |
|
|
309
|
+
| `TechniqueType` | Technique type enum (18 types) |
|
|
310
|
+
| `StandardTunings` | Standard tuning definitions |
|
|
311
|
+
| `NoteDuration` | Duration enum |
|
|
309
312
|
|
|
310
313
|
## Configuration
|
|
311
314
|
|
|
@@ -350,24 +353,24 @@ engine = SynthEngine(
|
|
|
350
353
|
|
|
351
354
|
## Supported Techniques
|
|
352
355
|
|
|
353
|
-
| Technique
|
|
354
|
-
|
|
355
|
-
| Hammer-On
|
|
356
|
-
| Pull-Off
|
|
357
|
-
| Slide Up
|
|
358
|
-
| Slide Down
|
|
359
|
-
| Bend
|
|
360
|
-
| Vibrato
|
|
361
|
-
| Palm Mute
|
|
362
|
-
| Staccato
|
|
363
|
-
| Let Ring
|
|
364
|
-
| Natural Harmonic N.H.
|
|
365
|
-
| Artificial Harmonic A.H.
|
|
366
|
-
| Tremolo Picking Trem.Pick. | Diagonal underline | |
|
|
367
|
-
| Trill
|
|
368
|
-
| Grace Note
|
|
369
|
-
| Accentuated
|
|
370
|
-
| Ghost Note
|
|
356
|
+
| Technique | Abbreviation | Symbol Type |
|
|
357
|
+
| -------------------------- | ------------------ | -------------------- |
|
|
358
|
+
| Hammer-On | H | Text label |
|
|
359
|
+
| Pull-Off | P | Text label |
|
|
360
|
+
| Slide Up | s/S | Line + arrow |
|
|
361
|
+
| Slide Down | S | Line + arrow |
|
|
362
|
+
| Bend | B | Arc + arrow + degree |
|
|
363
|
+
| Vibrato | \~ | Wavy line |
|
|
364
|
+
| Palm Mute | P.M. | Dashed extension |
|
|
365
|
+
| Staccato | . | Dot mark |
|
|
366
|
+
| Let Ring | Dashed extension | <br /> |
|
|
367
|
+
| Natural Harmonic N.H. | Diamond mark | <br /> |
|
|
368
|
+
| Artificial Harmonic A.H. | Diamond + text | <br /> |
|
|
369
|
+
| Tremolo Picking Trem.Pick. | Diagonal underline | <br /> |
|
|
370
|
+
| Trill | "tr" text | <br /> |
|
|
371
|
+
| Grace Note | Small note | <br /> |
|
|
372
|
+
| Accentuated | > | Symbol |
|
|
373
|
+
| Ghost Note | Parentheses | <br /> |
|
|
371
374
|
|
|
372
375
|
## Development Guide
|
|
373
376
|
|
|
@@ -433,21 +436,21 @@ twine upload dist/*
|
|
|
433
436
|
|
|
434
437
|
### Required Dependencies
|
|
435
438
|
|
|
436
|
-
| Package
|
|
437
|
-
|
|
438
|
-
| [pyguitarpro](https://github.com/ozono/guitarpro)
|
|
439
|
-
| [PyQt5](https://www.riverbankcomputing.com/software/pyqt/) | >=5.15
|
|
439
|
+
| Package | Version | Purpose | License |
|
|
440
|
+
| ---------------------------------------------------------- | ------- | ------------------------- | -------- |
|
|
441
|
+
| [pyguitarpro](https://github.com/ozono/guitarpro) | >=0.11 | Guitar Pro file parsing | LGPL-2.1 |
|
|
442
|
+
| [PyQt5](https://www.riverbankcomputing.com/software/pyqt/) | >=5.15 | GUI rendering framework | GPL v3 |
|
|
440
443
|
| [pyfluidsynth](https://github.com/nwhitehead/pyfluidsynth) | >=1.4.0 | FluidSynth Python binding | LGPL-2.1 |
|
|
441
444
|
|
|
442
445
|
### Optional Dependencies
|
|
443
446
|
|
|
444
|
-
| Group | Package
|
|
445
|
-
|
|
446
|
-
| dev
|
|
447
|
+
| Group | Package | Purpose |
|
|
448
|
+
| ----- | -------------------------- | ----------------------------- |
|
|
449
|
+
| dev | pytest, black, isort, mypy | Development and testing tools |
|
|
447
450
|
|
|
448
451
|
## License
|
|
449
452
|
|
|
450
|
-
This project is licensed under the [
|
|
453
|
+
This project is licensed under the [MPL 2.0](LICENSE).
|
|
451
454
|
|
|
452
455
|
## Contributing
|
|
453
456
|
|
|
@@ -465,15 +468,15 @@ Issues and Pull Requests are welcome!
|
|
|
465
468
|
- **[pyguitarpro](https://github.com/ozono/guitarpro)** - Underlying library for Guitar Pro file parsing
|
|
466
469
|
- **[FluidSynth](https://github.com/FluidSynth/fluidsynth)** - Real-time MIDI synthesis engine
|
|
467
470
|
|
|
468
|
-
|
|
471
|
+
***
|
|
469
472
|
|
|
470
473
|
**Version**: v0.2.0
|
|
471
474
|
**Last Updated**: 2026-06-12
|
|
472
475
|
**Compatibility**: Windows / Linux / macOS (Python 3.8+)
|
|
473
476
|
|
|
474
|
-
|
|
477
|
+
***
|
|
475
478
|
|
|
476
|
-
|
|
479
|
+
***
|
|
477
480
|
|
|
478
481
|
# ApolloTab(中文)
|
|
479
482
|
|
|
@@ -679,30 +682,31 @@ if __name__ == "__main__":
|
|
|
679
682
|
|
|
680
683
|
### 核心函数
|
|
681
684
|
|
|
682
|
-
| 函数
|
|
683
|
-
|
|
684
|
-
| `parse_gtp(path)`
|
|
685
|
+
| 函数 | 说明 | 返回值 |
|
|
686
|
+
| ------------------------------- | --------- | --------------- |
|
|
687
|
+
| `parse_gtp(path)` | 解析GTP文件 | `GTPSong` |
|
|
685
688
|
| `render_gtp(path, track_index)` | 一键渲染GTP文件 | `List[QPixmap]` |
|
|
686
689
|
|
|
687
690
|
### 主要类
|
|
688
691
|
|
|
689
692
|
#### 数据模型 (`ApolloTab.models`)
|
|
690
693
|
|
|
691
|
-
| 类名
|
|
692
|
-
|
|
693
|
-
| `GTPSong`
|
|
694
|
-
| `GTPTrack`
|
|
695
|
-
| `GTPMeasure` | 小节对象(拍号/重复记号/拍列表)
|
|
696
|
-
| `GTPBeat`
|
|
697
|
-
| `GTPNote`
|
|
694
|
+
| 类名 | 说明 |
|
|
695
|
+
| ------------ | --------------------- |
|
|
696
|
+
| `GTPSong` | 歌曲对象(标题/艺术家/BPM/音轨列表) |
|
|
697
|
+
| `GTPTrack` | 音轨对象(名称/调弦/小节列表) |
|
|
698
|
+
| `GTPMeasure` | 小节对象(拍号/重复记号/拍列表) |
|
|
699
|
+
| `GTPBeat` | 拍对象(时值/附点/音符列表) |
|
|
700
|
+
| `GTPNote` | 音符对象(品格/弦/MIDI音高/技巧) |
|
|
698
701
|
|
|
699
702
|
#### 解析器 (`ApolloTab.parser`)
|
|
700
703
|
|
|
701
|
-
| 类名
|
|
702
|
-
|
|
704
|
+
| 类名 | 说明 |
|
|
705
|
+
| ----------- | --------- |
|
|
703
706
|
| `GTPParser` | GTP文件解析器类 |
|
|
704
707
|
|
|
705
708
|
**用法**:
|
|
709
|
+
|
|
706
710
|
```python
|
|
707
711
|
from ApolloTab.parser import GTPParser
|
|
708
712
|
|
|
@@ -712,12 +716,13 @@ song = parser.parse("song.gp5")
|
|
|
712
716
|
|
|
713
717
|
#### 渲染器 (`ApolloTab.renderer`)
|
|
714
718
|
|
|
715
|
-
| 类名
|
|
716
|
-
|
|
717
|
-
| `TabRenderer`
|
|
718
|
-
| `TabLayoutEngine` | 布局计算引擎
|
|
719
|
+
| 类名 | 说明 |
|
|
720
|
+
| ----------------- | ------- |
|
|
721
|
+
| `TabRenderer` | 六线谱渲染引擎 |
|
|
722
|
+
| `TabLayoutEngine` | 布局计算引擎 |
|
|
719
723
|
|
|
720
724
|
**用法**:
|
|
725
|
+
|
|
721
726
|
```python
|
|
722
727
|
from ApolloTab.renderer import TabRenderer, RenderConfig
|
|
723
728
|
|
|
@@ -727,13 +732,14 @@ pages = renderer.render(song, track_index=0)
|
|
|
727
732
|
|
|
728
733
|
#### 音频引擎 (`ApolloTab.audio`)
|
|
729
734
|
|
|
730
|
-
| 类名
|
|
731
|
-
|
|
732
|
-
| `MidiConverter` | GTP数据→MIDI事件转换器
|
|
733
|
-
| `SynthEngine`
|
|
734
|
-
| `MidiEvent`
|
|
735
|
+
| 类名 | 说明 |
|
|
736
|
+
| --------------- | ---------------- |
|
|
737
|
+
| `MidiConverter` | GTP数据→MIDI事件转换器 |
|
|
738
|
+
| `SynthEngine` | FluidSynth音频合成引擎 |
|
|
739
|
+
| `MidiEvent` | 单个MIDI事件数据模型 |
|
|
735
740
|
|
|
736
741
|
**用法**:
|
|
742
|
+
|
|
737
743
|
```python
|
|
738
744
|
from ApolloTab.audio import MidiConverter, SynthEngine
|
|
739
745
|
|
|
@@ -749,12 +755,12 @@ engine.play()
|
|
|
749
755
|
|
|
750
756
|
#### 工具 (`ApolloTab.utils`)
|
|
751
757
|
|
|
752
|
-
| 类/常量
|
|
753
|
-
|
|
754
|
-
| `RenderConfig`
|
|
755
|
-
| `TechniqueType`
|
|
756
|
-
| `StandardTunings` | 标准调弦定义
|
|
757
|
-
| `NoteDuration`
|
|
758
|
+
| 类/常量 | 说明 |
|
|
759
|
+
| ----------------- | ------------ |
|
|
760
|
+
| `RenderConfig` | 渲染参数配置(全部可调) |
|
|
761
|
+
| `TechniqueType` | 技巧类型枚举(18种) |
|
|
762
|
+
| `StandardTunings` | 标准调弦定义 |
|
|
763
|
+
| `NoteDuration` | 时值枚举 |
|
|
758
764
|
|
|
759
765
|
## 配置说明
|
|
760
766
|
|
|
@@ -799,24 +805,24 @@ engine = SynthEngine(
|
|
|
799
805
|
|
|
800
806
|
## 支持的演奏技巧
|
|
801
807
|
|
|
802
|
-
| 技巧
|
|
803
|
-
|
|
804
|
-
| 击弦 Hammer-On
|
|
805
|
-
| 勾弦 Pull-Off
|
|
806
|
-
| 上滑音 Slide Up
|
|
807
|
-
| 下滑音 Slide Down
|
|
808
|
-
| 推弦 Bend
|
|
809
|
-
| 颤音 Vibrato
|
|
810
|
-
| 闷音 Palm Mute
|
|
811
|
-
| 断奏 Staccato
|
|
812
|
-
| 延音 Let Ring
|
|
813
|
-
| 自然泛音 N.H.
|
|
814
|
-
| 人工泛音 A.H.
|
|
815
|
-
| 震音拨弦 Trem.Pick. | 斜线下划线
|
|
816
|
-
| 颤音 Trill
|
|
817
|
-
| 装饰音 Grace Note
|
|
818
|
-
| 重音 Accentuated
|
|
819
|
-
| 幽灵音 Ghost Note
|
|
808
|
+
| 技巧 | 缩写 | 符号类型 |
|
|
809
|
+
| --------------- | ------ | -------- |
|
|
810
|
+
| 击弦 Hammer-On | H | 文字标签 |
|
|
811
|
+
| 勾弦 Pull-Off | P | 文字标签 |
|
|
812
|
+
| 上滑音 Slide Up | s/S | 连线+箭头 |
|
|
813
|
+
| 下滑音 Slide Down | S | 连线+箭头 |
|
|
814
|
+
| 推弦 Bend | B | 弧线+箭头+度数 |
|
|
815
|
+
| 颤音 Vibrato | \~ | 波浪线 |
|
|
816
|
+
| 闷音 Palm Mute | P.M. | 虚线延长线 |
|
|
817
|
+
| 断奏 Staccato | . | 点标记 |
|
|
818
|
+
| 延音 Let Ring | 虚线延长线 | <br /> |
|
|
819
|
+
| 自然泛音 N.H. | 菱形标记 | <br /> |
|
|
820
|
+
| 人工泛音 A.H. | 菱形+文字 | <br /> |
|
|
821
|
+
| 震音拨弦 Trem.Pick. | 斜线下划线 | <br /> |
|
|
822
|
+
| 颤音 Trill | "tr"文字 | <br /> |
|
|
823
|
+
| 装饰音 Grace Note | 小音符 | <br /> |
|
|
824
|
+
| 重音 Accentuated | > | 符号 |
|
|
825
|
+
| 幽灵音 Ghost Note | 括号包裹 | <br /> |
|
|
820
826
|
|
|
821
827
|
## 开发指南
|
|
822
828
|
|
|
@@ -895,21 +901,21 @@ twine upload dist/*
|
|
|
895
901
|
|
|
896
902
|
### 必需依赖
|
|
897
903
|
|
|
898
|
-
| 包名
|
|
899
|
-
|
|
900
|
-
| [pyguitarpro](https://github.com/ozono/guitarpro)
|
|
901
|
-
| [PyQt5](https://www.riverbankcomputing.com/software/pyqt/) | >=5.15
|
|
904
|
+
| 包名 | 版本 | 用途 | 许可证 |
|
|
905
|
+
| ---------------------------------------------------------- | ------- | ------------------- | -------- |
|
|
906
|
+
| [pyguitarpro](https://github.com/ozono/guitarpro) | >=0.11 | Guitar Pro文件解析 | LGPL-2.1 |
|
|
907
|
+
| [PyQt5](https://www.riverbankcomputing.com/software/pyqt/) | >=5.15 | GUI渲染框架 | GPL v3 |
|
|
902
908
|
| [pyfluidsynth](https://github.com/nwhitehead/pyfluidsynth) | >=1.4.0 | FluidSynth Python绑定 | LGPL-2.1 |
|
|
903
909
|
|
|
904
910
|
### 可选依赖
|
|
905
911
|
|
|
906
|
-
| 组名
|
|
907
|
-
|
|
912
|
+
| 组名 | 包名 | 用途 |
|
|
913
|
+
| --- | -------------------------- | ------- |
|
|
908
914
|
| dev | pytest, black, isort, mypy | 开发和测试工具 |
|
|
909
915
|
|
|
910
916
|
## 许可证
|
|
911
917
|
|
|
912
|
-
本项目采用 [
|
|
918
|
+
本项目采用 [MPL 2.0](LICENSE) 开源协议。
|
|
913
919
|
|
|
914
920
|
## 贡献
|
|
915
921
|
|
|
@@ -927,7 +933,7 @@ twine upload dist/*
|
|
|
927
933
|
- **[pyguitarpro](https://github.com/ozono/guitarpro)** - Guitar Pro 文件解析底层库
|
|
928
934
|
- **[FluidSynth](https://github.com/FluidSynth/fluidsynth)** - 实时 MIDI 合成引擎
|
|
929
935
|
|
|
930
|
-
|
|
936
|
+
***
|
|
931
937
|
|
|
932
938
|
**版本**: v0.2.0
|
|
933
939
|
**最后更新**: 2026-06-12
|
|
@@ -186,30 +186,31 @@ if __name__ == "__main__":
|
|
|
186
186
|
|
|
187
187
|
### Core Functions
|
|
188
188
|
|
|
189
|
-
| Function
|
|
190
|
-
|
|
191
|
-
| `parse_gtp(path)`
|
|
189
|
+
| Function | Description | Return Value |
|
|
190
|
+
| ------------------------------- | ------------------------- | --------------- |
|
|
191
|
+
| `parse_gtp(path)` | Parse GTP file | `GTPSong` |
|
|
192
192
|
| `render_gtp(path, track_index)` | One-click render GTP file | `List[QPixmap]` |
|
|
193
193
|
|
|
194
194
|
### Main Classes
|
|
195
195
|
|
|
196
196
|
#### Data Models (`ApolloTab.models`)
|
|
197
197
|
|
|
198
|
-
| Class
|
|
199
|
-
|
|
200
|
-
| `GTPSong`
|
|
201
|
-
| `GTPTrack`
|
|
198
|
+
| Class | Description |
|
|
199
|
+
| ------------ | ------------------------------------------------------- |
|
|
200
|
+
| `GTPSong` | Song object (title/artist/BPM/tracks list) |
|
|
201
|
+
| `GTPTrack` | Track object (name/tuning/measures list) |
|
|
202
202
|
| `GTPMeasure` | Measure object (time signature/repeat marks/beats list) |
|
|
203
|
-
| `GTPBeat`
|
|
204
|
-
| `GTPNote`
|
|
203
|
+
| `GTPBeat` | Beat object (duration/dot/notes list) |
|
|
204
|
+
| `GTPNote` | Note object (fret/string/MIDI pitch/techniques) |
|
|
205
205
|
|
|
206
206
|
#### Parser (`ApolloTab.parser`)
|
|
207
207
|
|
|
208
|
-
| Class
|
|
209
|
-
|
|
208
|
+
| Class | Description |
|
|
209
|
+
| ----------- | --------------------- |
|
|
210
210
|
| `GTPParser` | GTP file parser class |
|
|
211
211
|
|
|
212
212
|
**Usage**:
|
|
213
|
+
|
|
213
214
|
```python
|
|
214
215
|
from ApolloTab.parser import GTPParser
|
|
215
216
|
|
|
@@ -219,12 +220,13 @@ song = parser.parse("song.gp5")
|
|
|
219
220
|
|
|
220
221
|
#### Renderer (`ApolloTab.renderer`)
|
|
221
222
|
|
|
222
|
-
| Class
|
|
223
|
-
|
|
224
|
-
| `TabRenderer`
|
|
225
|
-
| `TabLayoutEngine` | Layout calculation engine
|
|
223
|
+
| Class | Description |
|
|
224
|
+
| ----------------- | -------------------------- |
|
|
225
|
+
| `TabRenderer` | Tablature rendering engine |
|
|
226
|
+
| `TabLayoutEngine` | Layout calculation engine |
|
|
226
227
|
|
|
227
228
|
**Usage**:
|
|
229
|
+
|
|
228
230
|
```python
|
|
229
231
|
from ApolloTab.renderer import TabRenderer, RenderConfig
|
|
230
232
|
|
|
@@ -234,13 +236,14 @@ pages = renderer.render(song, track_index=0)
|
|
|
234
236
|
|
|
235
237
|
#### Audio Engine (`ApolloTab.audio`)
|
|
236
238
|
|
|
237
|
-
| Class
|
|
238
|
-
|
|
239
|
-
| `MidiConverter` | GTP data to MIDI event converter
|
|
240
|
-
| `SynthEngine`
|
|
241
|
-
| `MidiEvent`
|
|
239
|
+
| Class | Description |
|
|
240
|
+
| --------------- | --------------------------------- |
|
|
241
|
+
| `MidiConverter` | GTP data to MIDI event converter |
|
|
242
|
+
| `SynthEngine` | FluidSynth audio synthesis engine |
|
|
243
|
+
| `MidiEvent` | Single MIDI event data model |
|
|
242
244
|
|
|
243
245
|
**Usage**:
|
|
246
|
+
|
|
244
247
|
```python
|
|
245
248
|
from ApolloTab.audio import MidiConverter, SynthEngine
|
|
246
249
|
|
|
@@ -256,12 +259,12 @@ engine.play()
|
|
|
256
259
|
|
|
257
260
|
#### Utilities (`ApolloTab.utils`)
|
|
258
261
|
|
|
259
|
-
| Class / Constant
|
|
260
|
-
|
|
261
|
-
| `RenderConfig`
|
|
262
|
-
| `TechniqueType`
|
|
263
|
-
| `StandardTunings` | Standard tuning definitions
|
|
264
|
-
| `NoteDuration`
|
|
262
|
+
| Class / Constant | Description |
|
|
263
|
+
| ----------------- | -------------------------------------------------- |
|
|
264
|
+
| `RenderConfig` | Rendering parameter configuration (all adjustable) |
|
|
265
|
+
| `TechniqueType` | Technique type enum (18 types) |
|
|
266
|
+
| `StandardTunings` | Standard tuning definitions |
|
|
267
|
+
| `NoteDuration` | Duration enum |
|
|
265
268
|
|
|
266
269
|
## Configuration
|
|
267
270
|
|
|
@@ -306,24 +309,24 @@ engine = SynthEngine(
|
|
|
306
309
|
|
|
307
310
|
## Supported Techniques
|
|
308
311
|
|
|
309
|
-
| Technique
|
|
310
|
-
|
|
311
|
-
| Hammer-On
|
|
312
|
-
| Pull-Off
|
|
313
|
-
| Slide Up
|
|
314
|
-
| Slide Down
|
|
315
|
-
| Bend
|
|
316
|
-
| Vibrato
|
|
317
|
-
| Palm Mute
|
|
318
|
-
| Staccato
|
|
319
|
-
| Let Ring
|
|
320
|
-
| Natural Harmonic N.H.
|
|
321
|
-
| Artificial Harmonic A.H.
|
|
322
|
-
| Tremolo Picking Trem.Pick. | Diagonal underline | |
|
|
323
|
-
| Trill
|
|
324
|
-
| Grace Note
|
|
325
|
-
| Accentuated
|
|
326
|
-
| Ghost Note
|
|
312
|
+
| Technique | Abbreviation | Symbol Type |
|
|
313
|
+
| -------------------------- | ------------------ | -------------------- |
|
|
314
|
+
| Hammer-On | H | Text label |
|
|
315
|
+
| Pull-Off | P | Text label |
|
|
316
|
+
| Slide Up | s/S | Line + arrow |
|
|
317
|
+
| Slide Down | S | Line + arrow |
|
|
318
|
+
| Bend | B | Arc + arrow + degree |
|
|
319
|
+
| Vibrato | \~ | Wavy line |
|
|
320
|
+
| Palm Mute | P.M. | Dashed extension |
|
|
321
|
+
| Staccato | . | Dot mark |
|
|
322
|
+
| Let Ring | Dashed extension | <br /> |
|
|
323
|
+
| Natural Harmonic N.H. | Diamond mark | <br /> |
|
|
324
|
+
| Artificial Harmonic A.H. | Diamond + text | <br /> |
|
|
325
|
+
| Tremolo Picking Trem.Pick. | Diagonal underline | <br /> |
|
|
326
|
+
| Trill | "tr" text | <br /> |
|
|
327
|
+
| Grace Note | Small note | <br /> |
|
|
328
|
+
| Accentuated | > | Symbol |
|
|
329
|
+
| Ghost Note | Parentheses | <br /> |
|
|
327
330
|
|
|
328
331
|
## Development Guide
|
|
329
332
|
|
|
@@ -389,21 +392,21 @@ twine upload dist/*
|
|
|
389
392
|
|
|
390
393
|
### Required Dependencies
|
|
391
394
|
|
|
392
|
-
| Package
|
|
393
|
-
|
|
394
|
-
| [pyguitarpro](https://github.com/ozono/guitarpro)
|
|
395
|
-
| [PyQt5](https://www.riverbankcomputing.com/software/pyqt/) | >=5.15
|
|
395
|
+
| Package | Version | Purpose | License |
|
|
396
|
+
| ---------------------------------------------------------- | ------- | ------------------------- | -------- |
|
|
397
|
+
| [pyguitarpro](https://github.com/ozono/guitarpro) | >=0.11 | Guitar Pro file parsing | LGPL-2.1 |
|
|
398
|
+
| [PyQt5](https://www.riverbankcomputing.com/software/pyqt/) | >=5.15 | GUI rendering framework | GPL v3 |
|
|
396
399
|
| [pyfluidsynth](https://github.com/nwhitehead/pyfluidsynth) | >=1.4.0 | FluidSynth Python binding | LGPL-2.1 |
|
|
397
400
|
|
|
398
401
|
### Optional Dependencies
|
|
399
402
|
|
|
400
|
-
| Group | Package
|
|
401
|
-
|
|
402
|
-
| dev
|
|
403
|
+
| Group | Package | Purpose |
|
|
404
|
+
| ----- | -------------------------- | ----------------------------- |
|
|
405
|
+
| dev | pytest, black, isort, mypy | Development and testing tools |
|
|
403
406
|
|
|
404
407
|
## License
|
|
405
408
|
|
|
406
|
-
This project is licensed under the [
|
|
409
|
+
This project is licensed under the [MPL 2.0](LICENSE).
|
|
407
410
|
|
|
408
411
|
## Contributing
|
|
409
412
|
|
|
@@ -421,15 +424,15 @@ Issues and Pull Requests are welcome!
|
|
|
421
424
|
- **[pyguitarpro](https://github.com/ozono/guitarpro)** - Underlying library for Guitar Pro file parsing
|
|
422
425
|
- **[FluidSynth](https://github.com/FluidSynth/fluidsynth)** - Real-time MIDI synthesis engine
|
|
423
426
|
|
|
424
|
-
|
|
427
|
+
***
|
|
425
428
|
|
|
426
429
|
**Version**: v0.2.0
|
|
427
430
|
**Last Updated**: 2026-06-12
|
|
428
431
|
**Compatibility**: Windows / Linux / macOS (Python 3.8+)
|
|
429
432
|
|
|
430
|
-
|
|
433
|
+
***
|
|
431
434
|
|
|
432
|
-
|
|
435
|
+
***
|
|
433
436
|
|
|
434
437
|
# ApolloTab(中文)
|
|
435
438
|
|
|
@@ -635,30 +638,31 @@ if __name__ == "__main__":
|
|
|
635
638
|
|
|
636
639
|
### 核心函数
|
|
637
640
|
|
|
638
|
-
| 函数
|
|
639
|
-
|
|
640
|
-
| `parse_gtp(path)`
|
|
641
|
+
| 函数 | 说明 | 返回值 |
|
|
642
|
+
| ------------------------------- | --------- | --------------- |
|
|
643
|
+
| `parse_gtp(path)` | 解析GTP文件 | `GTPSong` |
|
|
641
644
|
| `render_gtp(path, track_index)` | 一键渲染GTP文件 | `List[QPixmap]` |
|
|
642
645
|
|
|
643
646
|
### 主要类
|
|
644
647
|
|
|
645
648
|
#### 数据模型 (`ApolloTab.models`)
|
|
646
649
|
|
|
647
|
-
| 类名
|
|
648
|
-
|
|
649
|
-
| `GTPSong`
|
|
650
|
-
| `GTPTrack`
|
|
651
|
-
| `GTPMeasure` | 小节对象(拍号/重复记号/拍列表)
|
|
652
|
-
| `GTPBeat`
|
|
653
|
-
| `GTPNote`
|
|
650
|
+
| 类名 | 说明 |
|
|
651
|
+
| ------------ | --------------------- |
|
|
652
|
+
| `GTPSong` | 歌曲对象(标题/艺术家/BPM/音轨列表) |
|
|
653
|
+
| `GTPTrack` | 音轨对象(名称/调弦/小节列表) |
|
|
654
|
+
| `GTPMeasure` | 小节对象(拍号/重复记号/拍列表) |
|
|
655
|
+
| `GTPBeat` | 拍对象(时值/附点/音符列表) |
|
|
656
|
+
| `GTPNote` | 音符对象(品格/弦/MIDI音高/技巧) |
|
|
654
657
|
|
|
655
658
|
#### 解析器 (`ApolloTab.parser`)
|
|
656
659
|
|
|
657
|
-
| 类名
|
|
658
|
-
|
|
660
|
+
| 类名 | 说明 |
|
|
661
|
+
| ----------- | --------- |
|
|
659
662
|
| `GTPParser` | GTP文件解析器类 |
|
|
660
663
|
|
|
661
664
|
**用法**:
|
|
665
|
+
|
|
662
666
|
```python
|
|
663
667
|
from ApolloTab.parser import GTPParser
|
|
664
668
|
|
|
@@ -668,12 +672,13 @@ song = parser.parse("song.gp5")
|
|
|
668
672
|
|
|
669
673
|
#### 渲染器 (`ApolloTab.renderer`)
|
|
670
674
|
|
|
671
|
-
| 类名
|
|
672
|
-
|
|
673
|
-
| `TabRenderer`
|
|
674
|
-
| `TabLayoutEngine` | 布局计算引擎
|
|
675
|
+
| 类名 | 说明 |
|
|
676
|
+
| ----------------- | ------- |
|
|
677
|
+
| `TabRenderer` | 六线谱渲染引擎 |
|
|
678
|
+
| `TabLayoutEngine` | 布局计算引擎 |
|
|
675
679
|
|
|
676
680
|
**用法**:
|
|
681
|
+
|
|
677
682
|
```python
|
|
678
683
|
from ApolloTab.renderer import TabRenderer, RenderConfig
|
|
679
684
|
|
|
@@ -683,13 +688,14 @@ pages = renderer.render(song, track_index=0)
|
|
|
683
688
|
|
|
684
689
|
#### 音频引擎 (`ApolloTab.audio`)
|
|
685
690
|
|
|
686
|
-
| 类名
|
|
687
|
-
|
|
688
|
-
| `MidiConverter` | GTP数据→MIDI事件转换器
|
|
689
|
-
| `SynthEngine`
|
|
690
|
-
| `MidiEvent`
|
|
691
|
+
| 类名 | 说明 |
|
|
692
|
+
| --------------- | ---------------- |
|
|
693
|
+
| `MidiConverter` | GTP数据→MIDI事件转换器 |
|
|
694
|
+
| `SynthEngine` | FluidSynth音频合成引擎 |
|
|
695
|
+
| `MidiEvent` | 单个MIDI事件数据模型 |
|
|
691
696
|
|
|
692
697
|
**用法**:
|
|
698
|
+
|
|
693
699
|
```python
|
|
694
700
|
from ApolloTab.audio import MidiConverter, SynthEngine
|
|
695
701
|
|
|
@@ -705,12 +711,12 @@ engine.play()
|
|
|
705
711
|
|
|
706
712
|
#### 工具 (`ApolloTab.utils`)
|
|
707
713
|
|
|
708
|
-
| 类/常量
|
|
709
|
-
|
|
710
|
-
| `RenderConfig`
|
|
711
|
-
| `TechniqueType`
|
|
712
|
-
| `StandardTunings` | 标准调弦定义
|
|
713
|
-
| `NoteDuration`
|
|
714
|
+
| 类/常量 | 说明 |
|
|
715
|
+
| ----------------- | ------------ |
|
|
716
|
+
| `RenderConfig` | 渲染参数配置(全部可调) |
|
|
717
|
+
| `TechniqueType` | 技巧类型枚举(18种) |
|
|
718
|
+
| `StandardTunings` | 标准调弦定义 |
|
|
719
|
+
| `NoteDuration` | 时值枚举 |
|
|
714
720
|
|
|
715
721
|
## 配置说明
|
|
716
722
|
|
|
@@ -755,24 +761,24 @@ engine = SynthEngine(
|
|
|
755
761
|
|
|
756
762
|
## 支持的演奏技巧
|
|
757
763
|
|
|
758
|
-
| 技巧
|
|
759
|
-
|
|
760
|
-
| 击弦 Hammer-On
|
|
761
|
-
| 勾弦 Pull-Off
|
|
762
|
-
| 上滑音 Slide Up
|
|
763
|
-
| 下滑音 Slide Down
|
|
764
|
-
| 推弦 Bend
|
|
765
|
-
| 颤音 Vibrato
|
|
766
|
-
| 闷音 Palm Mute
|
|
767
|
-
| 断奏 Staccato
|
|
768
|
-
| 延音 Let Ring
|
|
769
|
-
| 自然泛音 N.H.
|
|
770
|
-
| 人工泛音 A.H.
|
|
771
|
-
| 震音拨弦 Trem.Pick. | 斜线下划线
|
|
772
|
-
| 颤音 Trill
|
|
773
|
-
| 装饰音 Grace Note
|
|
774
|
-
| 重音 Accentuated
|
|
775
|
-
| 幽灵音 Ghost Note
|
|
764
|
+
| 技巧 | 缩写 | 符号类型 |
|
|
765
|
+
| --------------- | ------ | -------- |
|
|
766
|
+
| 击弦 Hammer-On | H | 文字标签 |
|
|
767
|
+
| 勾弦 Pull-Off | P | 文字标签 |
|
|
768
|
+
| 上滑音 Slide Up | s/S | 连线+箭头 |
|
|
769
|
+
| 下滑音 Slide Down | S | 连线+箭头 |
|
|
770
|
+
| 推弦 Bend | B | 弧线+箭头+度数 |
|
|
771
|
+
| 颤音 Vibrato | \~ | 波浪线 |
|
|
772
|
+
| 闷音 Palm Mute | P.M. | 虚线延长线 |
|
|
773
|
+
| 断奏 Staccato | . | 点标记 |
|
|
774
|
+
| 延音 Let Ring | 虚线延长线 | <br /> |
|
|
775
|
+
| 自然泛音 N.H. | 菱形标记 | <br /> |
|
|
776
|
+
| 人工泛音 A.H. | 菱形+文字 | <br /> |
|
|
777
|
+
| 震音拨弦 Trem.Pick. | 斜线下划线 | <br /> |
|
|
778
|
+
| 颤音 Trill | "tr"文字 | <br /> |
|
|
779
|
+
| 装饰音 Grace Note | 小音符 | <br /> |
|
|
780
|
+
| 重音 Accentuated | > | 符号 |
|
|
781
|
+
| 幽灵音 Ghost Note | 括号包裹 | <br /> |
|
|
776
782
|
|
|
777
783
|
## 开发指南
|
|
778
784
|
|
|
@@ -851,21 +857,21 @@ twine upload dist/*
|
|
|
851
857
|
|
|
852
858
|
### 必需依赖
|
|
853
859
|
|
|
854
|
-
| 包名
|
|
855
|
-
|
|
856
|
-
| [pyguitarpro](https://github.com/ozono/guitarpro)
|
|
857
|
-
| [PyQt5](https://www.riverbankcomputing.com/software/pyqt/) | >=5.15
|
|
860
|
+
| 包名 | 版本 | 用途 | 许可证 |
|
|
861
|
+
| ---------------------------------------------------------- | ------- | ------------------- | -------- |
|
|
862
|
+
| [pyguitarpro](https://github.com/ozono/guitarpro) | >=0.11 | Guitar Pro文件解析 | LGPL-2.1 |
|
|
863
|
+
| [PyQt5](https://www.riverbankcomputing.com/software/pyqt/) | >=5.15 | GUI渲染框架 | GPL v3 |
|
|
858
864
|
| [pyfluidsynth](https://github.com/nwhitehead/pyfluidsynth) | >=1.4.0 | FluidSynth Python绑定 | LGPL-2.1 |
|
|
859
865
|
|
|
860
866
|
### 可选依赖
|
|
861
867
|
|
|
862
|
-
| 组名
|
|
863
|
-
|
|
868
|
+
| 组名 | 包名 | 用途 |
|
|
869
|
+
| --- | -------------------------- | ------- |
|
|
864
870
|
| dev | pytest, black, isort, mypy | 开发和测试工具 |
|
|
865
871
|
|
|
866
872
|
## 许可证
|
|
867
873
|
|
|
868
|
-
本项目采用 [
|
|
874
|
+
本项目采用 [MPL 2.0](LICENSE) 开源协议。
|
|
869
875
|
|
|
870
876
|
## 贡献
|
|
871
877
|
|
|
@@ -883,7 +889,7 @@ twine upload dist/*
|
|
|
883
889
|
- **[pyguitarpro](https://github.com/ozono/guitarpro)** - Guitar Pro 文件解析底层库
|
|
884
890
|
- **[FluidSynth](https://github.com/FluidSynth/fluidsynth)** - 实时 MIDI 合成引擎
|
|
885
891
|
|
|
886
|
-
|
|
892
|
+
***
|
|
887
893
|
|
|
888
894
|
**版本**: v0.2.0
|
|
889
895
|
**最后更新**: 2026-06-12
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|