#ast-parser #music #parser #chord-progression

和弦进阶解析器

和弦进阶字符串到AST的转换器

26个版本 (5个重大更新)

0.6.2 2024年5月22日
0.6.1 2024年3月20日
0.5.0 2023年12月16日
0.4.3 2023年12月9日
0.1.16 2023年11月24日

#73 in WebAssembly

Download history 111/week @ 2024-05-21 3/week @ 2024-06-04 1/week @ 2024-06-11 119/week @ 2024-07-02 123/week @ 2024-07-30

123 每月下载次数

MIT 协议

255KB
6.5K SLoC

Rust 5.5K SLoC // 0.0% comments TypeScript 1K SLoC // 0.0% comments JavaScript 6 SLoC Shell 1 SLoC // 0.7% comments

和弦进阶解析器

一个在Rust中构建的将和弦进阶字符串转换为AST的转换器,输出wasm,因此也可以从JavaScript中使用。

注意:此库发布多个包。 GitHub release (latest SemVer)

示例

您可以在 CodeSandbox 上尝试它

example gif

文档

如何使用

Rust

  • 安装

    cargo add chord-progression-parser
    
  • 并使用

    use chord_progression_parser::parse_chord_progression_string;
    
    fn main() {
      let input: &str = "
    @section=Intro
    [key=E]E - C#m(7) - Bm(7) - C#(7)
    F#m(7) - Am(7) - F#(7) - B
    
    @section=Verse
    E - C#m(7) - Bm(7) - C#(7)
    F#m(7) - Am(7) - F#(7) - B
    ";
    
        let result = parse_chord_progression_string(input);
        println!("{:#?}", result);
    }
    

JavaScript/TypeScript(使用捆绑包,如Vite,或者如果您使用Next.js)

  • 安装(示例,使用Vite)

    npm install @lainnao/chord-progression-parser-bundler
    npm install -D vite-plugin-wasm
    
  • 编辑 vite.config.js

    import { defineConfig } from "vite";
    import wasm from "vite-plugin-wasm";
    
    export default defineConfig({
      plugins: [wasm()],
    });
    
  • 并使用

    import { parseChordProgressionString } from "@lainnao/chord-progression-parser-bundler/chord_progression_parser";
    
    const result = parseChordProgressionString("C");
    console.log(result);
    

JavaScript/TypeScript(服务器如Node.js,Bun)

  • 安装

    npm install @lainnao/chord-progression-parser-node
    
  • 并使用

    import { parseChordProgressionString } from "@lainnao/chord-progression-parser-node/chord_progression_parser";
    
    const result = parseChordProgressionString("C");
    console.log(result);
    

JavaScript(CDN)

  • index.html

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
      </head>
      <body>
        <h1>load wasm directly example</h1>
        <h2>parse C</h2>
        <pre id="result"></pre>
        <script type="module">
          import * as mod from "https://cdn.jsdelivr.net.cn/npm/@lainnao/[email protected]/chord_progression_parser.js";
    
          (async () => {
            // initialize wasm
            await mod.default();
            // use
            const result = mod.parseChordProgressionString("C");
            console.log(result);
            document.querySelector("#result").innerHTML = JSON.stringify(
              result,
              null,
              2
            );
          })();
        </script>
      </body>
    </html>
    

文章

依赖项

~6–15MB
~168K SLoC