Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

简谱渲染是一个基于TypeScript开发的简单音乐渲染库,可以让用户使用简单的文本配置来渲染简谱。

License

Notifications You must be signed in to change notification settings

Encaik/simple-notation

Repository files navigation

banner

简谱渲染

介绍

这是一个基于 TypeScript 开发的动态简谱渲染库,用户仅需文本输入,即可在网页上生成优美的简谱。

简谱应用:https://simple-notation.vercel.app/

国内访问:https://www.s-n.xyz (但加载速度可能仍然较慢)

vercel deploy codecov Netlify Status

界面展示

preview

使用方法

npm version

1. 引入方式

浏览器直接引入

  1. ESM方式

dist/simple-notation.jsdist/style.css 拷贝到你的项目,并在 HTML 中引入:

<body>
 <div id="container"></div>
 <script type="module">
 import { SimpleNotation } from './simple-notation.js';
 import './style.css';
 const container = document.getElementById('container');
 const sn = new SimpleNotation(app, {
 resize: true,
 debug: true,
 });
 sn.loadData(...);
 </script>
</body>
  1. UMD方式

dist/simple-notation.umd.jsdist/style.css 拷贝到你的项目,并在 HTML 中引入:

<head>
 <link rel="stylesheet" href="./style.css" />
</head>
<body>
 <div id="container"></div>
 <script src="./simple-notation.umd.js"></script>
 <script>
 const container = document.getElementById('container');
 const sn = new SN.SimpleNotation(container, {
 })
 sn.loadData(...);
 </script>
</body>

npm 包引入

npm install simple-notation
  1. ESM方式
import { SimpleNotation } from 'simple-notation';
import 'simple-notation/dist/style.css';
const container = document.getElementById('container');
const sn = new SimpleNotation(container, { debug: true });
sn.loadData(...);
  1. UMD方式
const SN = require('simple-notation');
import'simple-notation/dist/style.css';
const container = document.getElementById('container');
const sn = new SN.SimpleNotation(container, { debug: true });
sn.loadData(...);

2. 加载数据

sn.loadData({
 info: {
 title: '小星星',
 composer: 'Mozart, W.A.',
 lyricist: '佚名',
 time: '4',
 tempo: '88',
 key: 'C',
 beat: '4',
 },
 score: `1,1,5,5|6,6,5,-|4,4,3,3
2,2,1,-|5,5,4,4|3,3,2,-
5,5,4,4|3,3,2,-|1,1,5,5
6,6,5,-|4,4,3,3|2,2,1,-`,
 lyric: `一闪一闪亮晶晶-
满天都是小星星-
挂在天空放光明-
好像千颗小眼睛-
一闪一闪亮晶晶-
满天都是小星星`,
});

3. 播放控制

simple-notation 提供了独立的播放器类 SNPlayer,可用于简谱的自动播放、暂停、继续、停止等操作,并支持光标联动。

import { SNPlayer } from 'simple-notation';
// 需在 sn.loadData 后创建播放器实例
const player = new SNPlayer();
// 播放
player.play();
// 暂停
player.pause();
// 继续
player.resume();
// 停止
player.stop();
// 播放结束回调
player.onEnd(() => {
 console.log('播放结束');
});
// 实际发声回调(非'-'音符)
player.onNotePlay((note, duration) => {
 // 可在此处集成 WebAudio 或 MIDI 播放
 console.log('播放音符', note, '时长', duration);
});
// 光标移动回调(每个音符都会触发,包括'-')
player.onPointerMove((note) => {
 // 可用于自定义高亮
 console.log('光标移动到', note);
});

4. 光标层控制

播放器会自动联动光标层(高亮当前播放音符)。如需手动控制光标,可使用 SNPointerLayer:

import { SNPointerLayer } from 'simple-notation';
// 显示/移动光标到指定音符
SNPointerLayer.showPointer('note-1', sn.el);
// 隐藏光标
SNPointerLayer.clearPointer();

注: note-1 为 SVG 元素的 sn-tag 属性值,通常可通过回调参数中的 note.tag 获取。

5. 其他说明

  • 支持自动响应容器大小变化(resize: true)。
  • 支持调试模式(debug: true),会输出详细日志。
  • 支持 ABC 记谱法(开发中)。

如需更详细的 API 说明和高级用法,请参考源码中的 JSDoc 注释和 examples/ 目录下的实际用例。

乐器采样支持

本项目的乐器音源来自 nbrosowsky/tonejs-instruments 仓库,根据 CC BY 3.0 许可证授权使用。

名字解释

  • simple notation : 简谱
  • score : 整个乐谱
  • stave : 一行乐谱,可包含多个小节
  • measure : 小节

更具体的可以参考此链接:音乐术语中英对照

About

简谱渲染是一个基于TypeScript开发的简单音乐渲染库,可以让用户使用简单的文本配置来渲染简谱。

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

AltStyle によって変換されたページ (->オリジナル) /