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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ApolloTab
3
- Version: 0.2.0
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 | Description | Return Value |
234
- |----------|-------------|--------------|
235
- | `parse_gtp(path)` | Parse GTP file | `GTPSong` |
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 | Description |
243
- |-------|-------------|
244
- | `GTPSong` | Song object (title/artist/BPM/tracks list) |
245
- | `GTPTrack` | Track object (name/tuning/measures list) |
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` | Beat object (duration/dot/notes list) |
248
- | `GTPNote` | Note object (fret/string/MIDI pitch/techniques) |
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 | Description |
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 | Description |
267
- |-------|-------------|
268
- | `TabRenderer` | Tablature rendering engine |
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 | Description |
282
- |-------|-------------|
283
- | `MidiConverter` | GTP data to MIDI event converter |
284
- | `SynthEngine` | FluidSynth audio synthesis engine |
285
- | `MidiEvent` | Single MIDI event data model |
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 | Description |
304
- |------------------|-------------|
305
- | `RenderConfig` | Rendering parameter configuration (all adjustable) |
306
- | `TechniqueType` | Technique type enum (18 types) |
307
- | `StandardTunings` | Standard tuning definitions |
308
- | `NoteDuration` | Duration enum |
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 | Abbreviation | Symbol Type |
354
- |-----------|-------------|-------------|
355
- | Hammer-On | H | Text label |
356
- | Pull-Off | P | Text label |
357
- | Slide Up | s/S | Line + arrow |
358
- | Slide Down | S | Line + arrow |
359
- | Bend | B | Arc + arrow + degree |
360
- | Vibrato | ~ | Wavy line |
361
- | Palm Mute | P.M. | Dashed extension |
362
- | Staccato | . | Dot mark |
363
- | Let Ring | Dashed extension | |
364
- | Natural Harmonic N.H. | Diamond mark | |
365
- | Artificial Harmonic A.H. | Diamond + text | |
366
- | Tremolo Picking Trem.Pick. | Diagonal underline | |
367
- | Trill | "tr" text | |
368
- | Grace Note | Small note | |
369
- | Accentuated | > | Symbol |
370
- | Ghost Note | Parentheses | |
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 | Version | Purpose | License |
437
- |---------|---------|---------|---------|
438
- | [pyguitarpro](https://github.com/ozono/guitarpro) | >=0.11 | Guitar Pro file parsing | LGPL-2.1 |
439
- | [PyQt5](https://www.riverbankcomputing.com/software/pyqt/) | >=5.15 | GUI rendering framework | GPL v3 |
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 | Purpose |
445
- |-------|---------|---------|
446
- | dev | pytest, black, isort, mypy | Development and testing tools |
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 [MIT License](LICENSE).
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)` | 解析GTP文件 | `GTPSong` |
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` | 歌曲对象(标题/艺术家/BPM/音轨列表) |
694
- | `GTPTrack` | 音轨对象(名称/调弦/小节列表) |
695
- | `GTPMeasure` | 小节对象(拍号/重复记号/拍列表) |
696
- | `GTPBeat` | 拍对象(时值/附点/音符列表) |
697
- | `GTPNote` | 音符对象(品格/弦/MIDI音高/技巧) |
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` | FluidSynth音频合成引擎 |
734
- | `MidiEvent` | 单个MIDI事件数据模型 |
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` | 技巧类型枚举(18种) |
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 | H | 文字标签 |
805
- | 勾弦 Pull-Off | P | 文字标签 |
806
- | 上滑音 Slide Up | s/S | 连线+箭头 |
807
- | 下滑音 Slide Down | S | 连线+箭头 |
808
- | 推弦 Bend | B | 弧线+箭头+度数 |
809
- | 颤音 Vibrato | ~ | 波浪线 |
810
- | 闷音 Palm Mute | P.M. | 虚线延长线 |
811
- | 断奏 Staccato | . | 点标记 |
812
- | 延音 Let Ring | 虚线延长线 | |
813
- | 自然泛音 N.H. | 菱形标记 | |
814
- | 人工泛音 A.H. | 菱形+文字 | |
815
- | 震音拨弦 Trem.Pick. | 斜线下划线 | |
816
- | 颤音 Trill | "tr"文字 | |
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) | >=0.11 | Guitar Pro文件解析 | LGPL-2.1 |
901
- | [PyQt5](https://www.riverbankcomputing.com/software/pyqt/) | >=5.15 | GUI渲染框架 | GPL v3 |
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
- 本项目采用 [MIT License](LICENSE) 开源协议。
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.0
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 | Description | Return Value |
234
- |----------|-------------|--------------|
235
- | `parse_gtp(path)` | Parse GTP file | `GTPSong` |
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 | Description |
243
- |-------|-------------|
244
- | `GTPSong` | Song object (title/artist/BPM/tracks list) |
245
- | `GTPTrack` | Track object (name/tuning/measures list) |
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` | Beat object (duration/dot/notes list) |
248
- | `GTPNote` | Note object (fret/string/MIDI pitch/techniques) |
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 | Description |
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 | Description |
267
- |-------|-------------|
268
- | `TabRenderer` | Tablature rendering engine |
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 | Description |
282
- |-------|-------------|
283
- | `MidiConverter` | GTP data to MIDI event converter |
284
- | `SynthEngine` | FluidSynth audio synthesis engine |
285
- | `MidiEvent` | Single MIDI event data model |
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 | Description |
304
- |------------------|-------------|
305
- | `RenderConfig` | Rendering parameter configuration (all adjustable) |
306
- | `TechniqueType` | Technique type enum (18 types) |
307
- | `StandardTunings` | Standard tuning definitions |
308
- | `NoteDuration` | Duration enum |
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 | Abbreviation | Symbol Type |
354
- |-----------|-------------|-------------|
355
- | Hammer-On | H | Text label |
356
- | Pull-Off | P | Text label |
357
- | Slide Up | s/S | Line + arrow |
358
- | Slide Down | S | Line + arrow |
359
- | Bend | B | Arc + arrow + degree |
360
- | Vibrato | ~ | Wavy line |
361
- | Palm Mute | P.M. | Dashed extension |
362
- | Staccato | . | Dot mark |
363
- | Let Ring | Dashed extension | |
364
- | Natural Harmonic N.H. | Diamond mark | |
365
- | Artificial Harmonic A.H. | Diamond + text | |
366
- | Tremolo Picking Trem.Pick. | Diagonal underline | |
367
- | Trill | "tr" text | |
368
- | Grace Note | Small note | |
369
- | Accentuated | > | Symbol |
370
- | Ghost Note | Parentheses | |
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 | Version | Purpose | License |
437
- |---------|---------|---------|---------|
438
- | [pyguitarpro](https://github.com/ozono/guitarpro) | >=0.11 | Guitar Pro file parsing | LGPL-2.1 |
439
- | [PyQt5](https://www.riverbankcomputing.com/software/pyqt/) | >=5.15 | GUI rendering framework | GPL v3 |
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 | Purpose |
445
- |-------|---------|---------|
446
- | dev | pytest, black, isort, mypy | Development and testing tools |
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 [MIT License](LICENSE).
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)` | 解析GTP文件 | `GTPSong` |
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` | 歌曲对象(标题/艺术家/BPM/音轨列表) |
694
- | `GTPTrack` | 音轨对象(名称/调弦/小节列表) |
695
- | `GTPMeasure` | 小节对象(拍号/重复记号/拍列表) |
696
- | `GTPBeat` | 拍对象(时值/附点/音符列表) |
697
- | `GTPNote` | 音符对象(品格/弦/MIDI音高/技巧) |
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` | FluidSynth音频合成引擎 |
734
- | `MidiEvent` | 单个MIDI事件数据模型 |
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` | 技巧类型枚举(18种) |
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 | H | 文字标签 |
805
- | 勾弦 Pull-Off | P | 文字标签 |
806
- | 上滑音 Slide Up | s/S | 连线+箭头 |
807
- | 下滑音 Slide Down | S | 连线+箭头 |
808
- | 推弦 Bend | B | 弧线+箭头+度数 |
809
- | 颤音 Vibrato | ~ | 波浪线 |
810
- | 闷音 Palm Mute | P.M. | 虚线延长线 |
811
- | 断奏 Staccato | . | 点标记 |
812
- | 延音 Let Ring | 虚线延长线 | |
813
- | 自然泛音 N.H. | 菱形标记 | |
814
- | 人工泛音 A.H. | 菱形+文字 | |
815
- | 震音拨弦 Trem.Pick. | 斜线下划线 | |
816
- | 颤音 Trill | "tr"文字 | |
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) | >=0.11 | Guitar Pro文件解析 | LGPL-2.1 |
901
- | [PyQt5](https://www.riverbankcomputing.com/software/pyqt/) | >=5.15 | GUI渲染框架 | GPL v3 |
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
- 本项目采用 [MIT License](LICENSE) 开源协议。
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 | Description | Return Value |
190
- |----------|-------------|--------------|
191
- | `parse_gtp(path)` | Parse GTP file | `GTPSong` |
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 | Description |
199
- |-------|-------------|
200
- | `GTPSong` | Song object (title/artist/BPM/tracks list) |
201
- | `GTPTrack` | Track object (name/tuning/measures list) |
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` | Beat object (duration/dot/notes list) |
204
- | `GTPNote` | Note object (fret/string/MIDI pitch/techniques) |
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 | Description |
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 | Description |
223
- |-------|-------------|
224
- | `TabRenderer` | Tablature rendering engine |
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 | Description |
238
- |-------|-------------|
239
- | `MidiConverter` | GTP data to MIDI event converter |
240
- | `SynthEngine` | FluidSynth audio synthesis engine |
241
- | `MidiEvent` | Single MIDI event data model |
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 | Description |
260
- |------------------|-------------|
261
- | `RenderConfig` | Rendering parameter configuration (all adjustable) |
262
- | `TechniqueType` | Technique type enum (18 types) |
263
- | `StandardTunings` | Standard tuning definitions |
264
- | `NoteDuration` | Duration enum |
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 | Abbreviation | Symbol Type |
310
- |-----------|-------------|-------------|
311
- | Hammer-On | H | Text label |
312
- | Pull-Off | P | Text label |
313
- | Slide Up | s/S | Line + arrow |
314
- | Slide Down | S | Line + arrow |
315
- | Bend | B | Arc + arrow + degree |
316
- | Vibrato | ~ | Wavy line |
317
- | Palm Mute | P.M. | Dashed extension |
318
- | Staccato | . | Dot mark |
319
- | Let Ring | Dashed extension | |
320
- | Natural Harmonic N.H. | Diamond mark | |
321
- | Artificial Harmonic A.H. | Diamond + text | |
322
- | Tremolo Picking Trem.Pick. | Diagonal underline | |
323
- | Trill | "tr" text | |
324
- | Grace Note | Small note | |
325
- | Accentuated | > | Symbol |
326
- | Ghost Note | Parentheses | |
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 | Version | Purpose | License |
393
- |---------|---------|---------|---------|
394
- | [pyguitarpro](https://github.com/ozono/guitarpro) | >=0.11 | Guitar Pro file parsing | LGPL-2.1 |
395
- | [PyQt5](https://www.riverbankcomputing.com/software/pyqt/) | >=5.15 | GUI rendering framework | GPL v3 |
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 | Purpose |
401
- |-------|---------|---------|
402
- | dev | pytest, black, isort, mypy | Development and testing tools |
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 [MIT License](LICENSE).
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)` | 解析GTP文件 | `GTPSong` |
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` | 歌曲对象(标题/艺术家/BPM/音轨列表) |
650
- | `GTPTrack` | 音轨对象(名称/调弦/小节列表) |
651
- | `GTPMeasure` | 小节对象(拍号/重复记号/拍列表) |
652
- | `GTPBeat` | 拍对象(时值/附点/音符列表) |
653
- | `GTPNote` | 音符对象(品格/弦/MIDI音高/技巧) |
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` | FluidSynth音频合成引擎 |
690
- | `MidiEvent` | 单个MIDI事件数据模型 |
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` | 技巧类型枚举(18种) |
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 | H | 文字标签 |
761
- | 勾弦 Pull-Off | P | 文字标签 |
762
- | 上滑音 Slide Up | s/S | 连线+箭头 |
763
- | 下滑音 Slide Down | S | 连线+箭头 |
764
- | 推弦 Bend | B | 弧线+箭头+度数 |
765
- | 颤音 Vibrato | ~ | 波浪线 |
766
- | 闷音 Palm Mute | P.M. | 虚线延长线 |
767
- | 断奏 Staccato | . | 点标记 |
768
- | 延音 Let Ring | 虚线延长线 | |
769
- | 自然泛音 N.H. | 菱形标记 | |
770
- | 人工泛音 A.H. | 菱形+文字 | |
771
- | 震音拨弦 Trem.Pick. | 斜线下划线 | |
772
- | 颤音 Trill | "tr"文字 | |
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) | >=0.11 | Guitar Pro文件解析 | LGPL-2.1 |
857
- | [PyQt5](https://www.riverbankcomputing.com/software/pyqt/) | >=5.15 | GUI渲染框架 | GPL v3 |
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
- 本项目采用 [MIT License](LICENSE) 开源协议。
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
@@ -13,7 +13,7 @@ build-backend = "setuptools.build_meta"
13
13
 
14
14
  [project]
15
15
  name = "ApolloTab"
16
- version = "0.2.0"
16
+ version = "0.2.1"
17
17
  description = "Guitar Pro file parsing, rendering, and audio playback engine library"
18
18
  readme = "README.md"
19
19
  license = "MPL-2.0"
File without changes
File without changes
File without changes
File without changes
File without changes