# lhee_music **Repository Path**: q568680472/lhee_music ## Basic Information - **Project Name**: lhee_music - **Description**: 电子乐谱与音乐描述格式(musicxml)、五线谱绘制及其自动播放系统 、MIDI乐器接口 音乐编程性等基础算法套件与工具。 1.midi 与 musicxml 格式的相互转换 2.电子乐谱的排版格式与即时编辑 3.乐器自动播放系统 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 19 - **Forks**: 8 - **Created**: 2021-08-01 - **Last Updated**: 2026-04-22 ## Categories & Tags **Categories**: multimedia **Tags**: None ## README # 音乐文本数据生成五线谱工具 这是一个多功能电子乐谱处理项目,支持音乐代码、数据结构、音乐文件和图像之间的转换。该项目提供了一套完整的工具,用于创建、转换、渲染和播放乐谱。 ## 运行界面 启动程序:/src/com/luhe/ui/TextUI.java ![输入图片说明](src/com/luhe/resource/a1.jpg) 目前可以生成 musicxml 格式文件,内置渲染引擎还在测试。 ## 完整流水线 完整的乐谱引擎流水线 ``` 自定义乐谱文本解析(musiccode) 转 MusicXML 标准格式 生成渲染符号树 自动计算尺寸 自动布局定位 加载乐谱符号 输出 SVG 矢量图 音频引擎与播放控制 ``` ## 文档和规范 关于 musiccode等规范请阅读:/com/luhe/document/docx ```angular2html 3 MusicCode音乐代码概述 MusicCode 是一种简化的音乐数据描述格式,采用CDEFGAB表示五线谱音名,使用+和-表示时值,使用竖线|表示小结。兼顾可读性与易解析性,适合手动编写或程序生成,核心用于快速定义乐谱规则和演奏数据。 3.1 设计原则 分层结构化:按 “乐谱元信息→声部声明→小节→音符” 的层级组织,逻辑与 MusicXml 一致;兼容性:支持与 MusicXml 互转,可编译为标准音乐数据结构,适配后续绘图和音频生成。 3.2 基本结构 MusicCode由头部的元数据和音符小节序列组成。元数据每行数据按照 token=value 格式记录。其中#开头的行是注释,比如: work=小星星 #名字 beat=4/4 # 节奏 tempo=120 # 速度,默认90 key=C # 调式,默认为C调 mode=major # 调性,默认为大调 part=piano #声部开始,默认为钢琴 staves=2 # 声部谱表数量,默认为1 clef =[G,F] # 声部的谱表,默认为G高音谱表,F低音谱表,C中音谱表 竖线开头表示一段音阶组成的小节,前面G=为谱表符号: # 乐谱名 work =音阶案例 clef=[G] #小节 G=|C4 D4 E4 F4 G4 A4 B4| 上面表示G谱表上的一段音阶。 3.3 音符表示 用一个文本表示一个音符,多个音符用空格隔开: C D E F G A B 休止符用R(est)表示: R 用s、f前缀表示升调和降调: sC fC 或 #C bC 其中 sharp 和 float,natural 表示 升,降和还原。 用n前缀表示还原记号: nC4 用阿拉伯数字后缀表示钢琴键盘对应的区域: C1 C2 C3 C4 小字1组,中央C C6 C7 C8 比如乐谱: work=小星星 |C4 C4 G4 G4 A4 A4 G4 | F4 F4 E4 E4 D4 D4 C4| 用[]表示和弦和音程,需要同时演奏: # 大三和弦 [C4 E4 G4] 用+和-延长和缩短时值,默认为四分音符时值: # 默认四分音符 C4 # 延长一倍 C4+ # 延长两倍 C4++ # 缩小一倍 C4- # 缩小两倍 C4-- 使用小数点.表示附点音符,表示时间延长一半: C4. 3.4 小节表示 用||表示小节: G=|C4 C4 D4 D4 G4| 小节的属性在前面用逗号隔开,比如临时升降调和临时速度,作用为后面所有小节: G=|key=D, tempo=120, C4 C4 D4 D4 G4| 3.5 谱表 谱表用clef表示,谱表 G高音,F低音谱表,C中音谱表。如果没有clef元数据,默认为G高音谱表。 work=测试 clef=[G,F] # G高音谱表,F低音谱表 G=|D2 D2| F=|D2 D2| G=|D2 D2| F=|D2 D2| 3.6 声部 使用part表示一个声部开始,影响到后面所有小结直到下一个part出现,单个声部及其它的谱表描述如下: part=piano clef=[G,F] 3.7 乐谱样例 # 标题 work=小星星 # 四四拍 beat=4/4 # 演奏速度(BPM) tempo=75 # C大调 key=C #钢琴声部开始 part=piano staves=2 # G高音谱表,F低音谱表 clef=[G,F] # 第一乐段 G=|C4 C4 G4 G4 |A4 A4 G4+| F4 F4 E4 E4 | D4 D4 C4+ | F=|C3 C3 G3 G3 |A3 A3 G3+| F3 F3 E3 E3 | D3 D3 C3+ | # 第二乐段 G=|G4 G4 F4 F4 | E4 E4 D4+ | E4 E4 F4 F4 | G4 G4 C5+ | F=|G3 G3 F3 F3 | E3 E3 D3+ | E3 E3 F3 F3 | G3 G3 C5+ | # 第三乐段 G=|C4 C4 G4 G4 | A4 A4 G4+ | F4 F4 E4 E4 | D4 D4 C4+ | F=|C3 C3 G3 G3 | A3 A3 G3+ | F3 F3 E3 E3 | D3 D3 C3+ | # 第四乐段 G=|D4 D4 C4 C4 | G4- G4- A4 A4 | G4 G4 F4 F4 | E4 E4 D4+ | F=|D3 D3 C3 C3 | G3- G3- A3 A3 | G3 G3 F3 F3 | E3 E3 D3+ | # 第五乐段 G=|C4++ | F=|C3++ | ``` ## 主要功能 - **音乐代码 (musiccode)**: 提供将字符串转换为音乐代码的功能。 - **音乐数据结构描述 (partwise)**: 描述音乐的结构,包括乐谱、音符、节拍等。 - **音乐数据结构转换算法 (convert)**: 实现音乐代码、MIDI文件、MusicXML之间的转换。 - **音乐数据交换格式 (musicxml)**: 支持音乐数据的XML格式表示。 - **播放器 (player)**: 提供播放音乐的功能。 - **五线谱 (staff)**: 支持五线谱的显示和处理。 - **界面 (ui)**: 提供图形用户界面,方便用户操作。 - **工具 (util)**: 包含各种实用工具类,如SVG处理、测试工具等。 ## 系统架构图 ![输入图片说明](src/com/luhe/resource/arch.png) ## 安装 1. 克隆仓库: ```bash git clone https://gitee.com/q568680472/lhee_music.git ``` 2. 进入项目目录: ```bash cd lhee_music ``` 3. 构建项目: ```bash mvn clean install ``` ## 使用 1. 运行主程序: ```bash java -cp target/classes com.luhe.Run ``` 2. 使用图形界面进行音乐代码的编辑、转换和播放。 ## 贡献 欢迎贡献代码和提出建议。请遵循以下步骤: 1. Fork 仓库。 2. 创建新分支。 3. 提交更改。 4. 发起 Pull Request。 ## 许可证 该项目遵循 MIT 许可证。详情请查看 LICENSE 文件。