txt2musicxml


Nametxt2musicxml JSON
Version 0.1.12 PyPI version JSON
download
home_pagehttps://github.com/noamtamir/txt2musicxml
SummaryCLI tool to convert chords written in simple text to musicxml files that can be used with a music notation software
upload_time2025-01-12 19:12:36
maintainerNone
docs_urlNone
authornoamtamir
requires_python<4.0,>=3.9
licenseMIT
keywords musicxml music xml chords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # txt2musicxml
A simple tool to convert chords from text to musicxml. Musicxml files can be opened with most notation software (for example [MuseScore](https://musescore.org/), which is free and open source).

## Install
use [pipx](https://github.com/pypa/pipx)
```shell
pipx install txt2musicxml
```

## Usage
pipe a string of chords into the cli
```shell
echo -n 'Cmaj7 A7 | Dm9 G7b9,13 |' | txt2musicxml
```
or redirect input/output from/to a file
```shell
txt2musicxml < path/to/Thriller.crd > path/to/Thriller.musicxml
```

## Syntax Example
```crd
Aguas de Marco - Elis Regina & Tom Jobim
---

Bb/Ab | % |
Bb/Ab | Gm6 Cm7b5/Gb |
Bbmaj7/F E9b5 | Ebmaj9 Ab9 |
Bbmaj7 Bb7 | C7/E Ebm6 |
Bbmaj7/F Bb7 | C7/E Ebm6 :||
```

- More info in [SYNTAX.md](./SYNTAX.md)
- More examples: [./examples/](./examples/)

## Export to PDF (with MuseScore)
[Install MuseScore 3](https://musescore.org/en/download) and make sure to add `mscore` to your PATH. Not fully tested with v4. `%` doesn't work in v3.
```shell
TMPSUFFIX=.musicxml; mscore -o path/to/output.pdf =(txt2musicxml < path/to/input.crd)
```

## Developing Locally
### Dependencies
In order to change the grammer and regenerate lexer/parser/etc:
- [java](https://www.java.com/en/download/)
- [antlr](https://www.antlr.org/)

For other development:
- [python ^3.9](https://www.python.org/)
    - I suggest using [pyenv](https://github.com/pyenv/pyenv) to manage multiple python versions on your machine
- [poetry](https://python-poetry.org/) - to manage virtual env
- [Make](https://www.gnu.org/software/make/) - to help run useful commands

### Updating and Debugging
Grammer is defined in `txt2musicxml/grammer/Chords.g4` and `txt2musicxml/grammer/FrontMatter.g4`.
To generate antlr python classes (Lexer, Parser, Visitor, Listener) from the grammer file, run:
```bash
antlr4 -Dlanguage=Python3 txt2musicxml/grammer/Chords.g4 -visitor
antlr4 -Dlanguage=Python3 txt2musicxml/grammer/FrontMatter.g4 -visitor
```
Those classes are direct dependencies of the application, they must exist for the main program to run.

To use the built-in antlr GUI and debug your grammer, first compile those java classes, and then run the gui:
```bash
javac txt2musicxml/grammer/.antlr/Chords*.java
javac txt2musicxml/grammer/.antlr/FrontMatter*.java
cd txt2musicxml/grammer/.antlr && grun Chords sheet -gui
# or: cd txt2musicxml/grammer/.antlr && grun FrontMatter front_matter -gui
```
Then enter some text and hit `^D` (on mac) to indicate EOF, and see the parse tree get generated!
> **_NOTE:_** `Chords` and `sheet` are names unique to the program (grammer name, root element), if you change the grammer file, the commands you run should change as well.
            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/noamtamir/txt2musicxml",
    "name": "txt2musicxml",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0,>=3.9",
    "maintainer_email": null,
    "keywords": "musicxml, music, xml, chords",
    "author": "noamtamir",
    "author_email": "noam.tamir@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/6f/53/cee563552b9c58caf8505c2d7d2e6c964886937b4fcf56cc8afa47ee47c5/txt2musicxml-0.1.12.tar.gz",
    "platform": null,
    "description": "# txt2musicxml\nA simple tool to convert chords from text to musicxml. Musicxml files can be opened with most notation software (for example [MuseScore](https://musescore.org/), which is free and open source).\n\n## Install\nuse [pipx](https://github.com/pypa/pipx)\n```shell\npipx install txt2musicxml\n```\n\n## Usage\npipe a string of chords into the cli\n```shell\necho -n 'Cmaj7 A7 | Dm9 G7b9,13 |' | txt2musicxml\n```\nor redirect input/output from/to a file\n```shell\ntxt2musicxml < path/to/Thriller.crd > path/to/Thriller.musicxml\n```\n\n## Syntax Example\n```crd\nAguas de Marco - Elis Regina & Tom Jobim\n---\n\nBb/Ab | % |\nBb/Ab | Gm6 Cm7b5/Gb |\nBbmaj7/F E9b5 | Ebmaj9 Ab9 |\nBbmaj7 Bb7 | C7/E Ebm6 |\nBbmaj7/F Bb7 | C7/E Ebm6 :||\n```\n\n- More info in [SYNTAX.md](./SYNTAX.md)\n- More examples: [./examples/](./examples/)\n\n## Export to PDF (with MuseScore)\n[Install MuseScore 3](https://musescore.org/en/download) and make sure to add `mscore` to your PATH. Not fully tested with v4. `%` doesn't work in v3.\n```shell\nTMPSUFFIX=.musicxml; mscore -o path/to/output.pdf =(txt2musicxml < path/to/input.crd)\n```\n\n## Developing Locally\n### Dependencies\nIn order to change the grammer and regenerate lexer/parser/etc:\n- [java](https://www.java.com/en/download/)\n- [antlr](https://www.antlr.org/)\n\nFor other development:\n- [python ^3.9](https://www.python.org/)\n    - I suggest using [pyenv](https://github.com/pyenv/pyenv) to manage multiple python versions on your machine\n- [poetry](https://python-poetry.org/) - to manage virtual env\n- [Make](https://www.gnu.org/software/make/) - to help run useful commands\n\n### Updating and Debugging\nGrammer is defined in `txt2musicxml/grammer/Chords.g4` and `txt2musicxml/grammer/FrontMatter.g4`.\nTo generate antlr python classes (Lexer, Parser, Visitor, Listener) from the grammer file, run:\n```bash\nantlr4 -Dlanguage=Python3 txt2musicxml/grammer/Chords.g4 -visitor\nantlr4 -Dlanguage=Python3 txt2musicxml/grammer/FrontMatter.g4 -visitor\n```\nThose classes are direct dependencies of the application, they must exist for the main program to run.\n\nTo use the built-in antlr GUI and debug your grammer, first compile those java classes, and then run the gui:\n```bash\njavac txt2musicxml/grammer/.antlr/Chords*.java\njavac txt2musicxml/grammer/.antlr/FrontMatter*.java\ncd txt2musicxml/grammer/.antlr && grun Chords sheet -gui\n# or: cd txt2musicxml/grammer/.antlr && grun FrontMatter front_matter -gui\n```\nThen enter some text and hit `^D` (on mac) to indicate EOF, and see the parse tree get generated!\n> **_NOTE:_** `Chords` and `sheet` are names unique to the program (grammer name, root element), if you change the grammer file, the commands you run should change as well.",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "CLI tool to convert chords written in simple text to musicxml files that can be used with a music notation software",
    "version": "0.1.12",
    "project_urls": {
        "Homepage": "https://github.com/noamtamir/txt2musicxml",
        "Repository": "https://github.com/noamtamir/txt2musicxml"
    },
    "split_keywords": [
        "musicxml",
        " music",
        " xml",
        " chords"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "fb1a4628dde59bce0c061f12af440de091a20d595b83cfaa082085356c382313",
                "md5": "34b1f1e58d0b7a20d0b6357679477d51",
                "sha256": "97847cf6f254437043bfcbdbc6a1cfb1ab37bce9c0eca0a57329985cac0acfef"
            },
            "downloads": -1,
            "filename": "txt2musicxml-0.1.12-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "34b1f1e58d0b7a20d0b6357679477d51",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0,>=3.9",
            "size": 78491,
            "upload_time": "2025-01-12T19:12:34",
            "upload_time_iso_8601": "2025-01-12T19:12:34.616160Z",
            "url": "https://files.pythonhosted.org/packages/fb/1a/4628dde59bce0c061f12af440de091a20d595b83cfaa082085356c382313/txt2musicxml-0.1.12-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6f53cee563552b9c58caf8505c2d7d2e6c964886937b4fcf56cc8afa47ee47c5",
                "md5": "dc7ea0ab332bab25208a5b265e16abcf",
                "sha256": "3e5ba39a0d3ca8c9c64a8fe29f89f8f90b2061033e5ee70c16bbbf82262bffed"
            },
            "downloads": -1,
            "filename": "txt2musicxml-0.1.12.tar.gz",
            "has_sig": false,
            "md5_digest": "dc7ea0ab332bab25208a5b265e16abcf",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0,>=3.9",
            "size": 54914,
            "upload_time": "2025-01-12T19:12:36",
            "upload_time_iso_8601": "2025-01-12T19:12:36.483419Z",
            "url": "https://files.pythonhosted.org/packages/6f/53/cee563552b9c58caf8505c2d7d2e6c964886937b4fcf56cc8afa47ee47c5/txt2musicxml-0.1.12.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-01-12 19:12:36",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "noamtamir",
    "github_project": "txt2musicxml",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "txt2musicxml"
}
        
Elapsed time: 0.63282s