Can GPT convert different sheet music codes?

Hello! I have a project to write a lot of gregorian music using Caeciliae font, but the work is very slow! It take hours. I don’t want use the GABC, so I tried to teach ChatGPT to learn the Caeciliae codes to convert the GABC to it, and my work would be faster. However, I didn’t have succes, because the Chat didn’t get it. The codes are not hard to learn, and can be found here: Caeciliae Tutorial.pdf ( Please, someone can help me?

Thank you.

Br. Athanasius, monk

1 Like

I think I wasn’t clear about the conversion. In fact, I have the code of the scores in GBAC, but I think that with Caeciliae the formatting is more beautiful, so I would like to convert GBAC to Caeciliae. :grin:

Hey champ!

Welcome to the forum! Nice to have you here! I’m nominating you for the entirely fictional “best first post” award I just made up :laughing:

It’s an interesting idea and the instructions you provided in your link are really good, I’m sure someone can help you with that.

If I understand them correctly the conversion from GBAC to Caeciliae is entirely programmatic.

Have you tried having GPT write a program/script to do this for you?

Your question is now at the top of the Google results for

GBAC Caeciliae sheet music

This has been an ongoing for thing for some time now.

@logankilpatrick Important: google is scraping the community forum every few minutes. Can we please add the community forum to the robots.txt file? We’re getting swarmed and community post’s are sometimes ranked higher than the documentation and site.

Let’s continue with the sheet music problem :laughing:

Hey! Thanks fot the support @N2U the GPT said me that gregorio can convert the codes, but I am note sure (sometimes it lies to me :sweat_smile: :sweat_smile:), but I will take a look.

@logankilpatrick google is asking itself about what a monk is doing with gpt, haha. Thanks.

I find this question interesting but because of my lack of knowledge in music this is a hard topic to solve. However as a programmer with many decades of experience working with symbolic programing languages this has a lot of connectivity to many problems in my experience pool.

Here is another post of similar nature Is it possible to teach ChatGPT to write/draw knitting machine code where I assisted.

The link to the Caeciliae Tutorial is helpful but for GBAC this is what I leaned from ChatGPT.

In the context of sheet music what does GBAC mean?

In the context of sheet music notation, GBAC does not have a standard meaning or usage. It is possible that you may be referring to a specific notation or symbol used in a particular piece of sheet music, in which case more context would be needed to provide an accurate answer.

However, in the context of music theory, the acronym “G-B-A-C” may refer to the names of the notes on the lines of the treble clef staff, from bottom to top, which are G, B, D, and F respectively. This is a helpful mnemonic device to remember the notes on the treble clef staff.

Is that correct? Remember that I know symbolic programming not music.

Also it would help if you showed some conversion examples in your first post (e.g. few shot examples), you should be able to edit that post before the windows closes on editing.

Oh goodness, thank you @EricGT I wrote the name incorrectly. It is not GBAC, but GABC. Here you are:

Tell me what is GABC in music software

In music software, “GABC” refers to a notation system used for medieval and traditional music, particularly in Western European chant. GABC stands for “Gregorian Accompaniment and Choir Book” and it uses letters of the alphabet and special symbols to represent the melody, rhythm, and text of chants.

The GABC notation system is often used by scholars and musicians who specialize in early music, particularly Gregorian chant, which is the traditional music of the Roman Catholic Church. The notation is designed to be used with specialized software that can interpret and display the GABC notation, allowing musicians to study and perform the music using historically informed techniques. Some popular software programs that support GABC notation include Gregorio, Square Note, and Illuminare Score Editor.

1 Like

Thanks, nice to know senility is not visiting me.

Is this a good reference for GABC?

Also explains why your topic is at the top of a Google search, incorrect spelling makes it unique, that combined with a few other rare words might make it the only combination on the internet.

Here is what I tried, I seriously doubt that is exactly what you need but if the prompt includes few-shot examples then it should start producing what you need.

Let me know if this works or if you need further help such as how to create a few-shot example, how to get the output from ChatGPT to appear as needed, etc. Helping you will actually help me in learning more so please ask.

ChatGPT Mar 23 Version


Demonstrate converting Caeciliae (Gregorian Chant Font) to GABC, give a few examples.


Certainly! Here are a few examples of how to convert Caeciliae notation to GABC notation:

Example 1: The Caeciliae notation for the first line of the hymn “Ave Maris Stella” is:

   %%score (V1 V2)
   F4 E4 | F4 E4 F4 G4 A4 G4 | F4 E4 F4 G4 A4 G4 | F4 E4 F4 G4 A4 B4 |

To convert this to GABC, you would use the following code::

   (3efgfe3)(3efgagf)(3efgagf)(3efgab3) |

Example 2: The Caeciliae notation for the first line of the hymn “Veni Creator Spiritus” is:

   %%score (V1 V2)
   D2 E2 F2 E2 | D2 D2 D2 F2 E2 D2 |

To convert this to GABC, you would use the following code:

(D2EFG)(D4EF) |

Example 3: The Caeciliae notation for the first line of the hymn “Adoro Te Devote” is:

   %%score (V1 V2)
   D4 D4 D4 D4 | E4 G4 G4 |

To convert this to GABC, you would use the following code:

   (DDDD)(EGG) |

I hope these examples help you understand how to convert Caeciliae notation to GABC. Let me know if you have any more questions or need more examples.

As the music scores will grow long when displayed on the ChatGPT page, consider using Stylebot to increase the output width. See this which includes a demo of a wider width and instructions on how to use with ChatGPT with Chrome.

Personal notes

GregoBase - A database of Gregorian scores
This is useful because it has a lot of scores in GABC notion.
To find the GABC file

  1. In the upper right click on Scores
  2. Click on link(s) to get a score page.
  3. On the right of the score page will be
  4. Click GABC to download.

Also on the score page will be a list for two editors

Note: The editors are on the same site, the first is the legacy editor, the second is a new alpha version editor.

The score editors are nice for validating a generated GABC.

Differentiae Index | Differentiae Database

Has lots of examples of short sequences as images. Could not find sequence in GABC or Caeciliae.

ChatGPT Mar 23 Version


What is the BNF for GABC?


The BNF (Backus-Naur Form) for GABC is a formal grammar that describes the syntax of the GABC notation. Here is an example of the BNF for GABC:

<gabc> ::= <music-line> | <music-line> <gabc>
<music-line> ::= <lyrics> <music> | <music>
<lyrics> ::= <lyric> | <lyric> <lyrics>
<lyric> ::= <syllable> | <syllable> <hyphen>
<syllable> ::= <letter> | <letter> <letter> | <letter> <letter> <letter>
<letter> ::= [A-Ga-gz] | <accent> | <punctum>
<accent> ::= <acute> | <grave> | <circumflex> | <macron>
<punctum> ::= "." | "," | "<" | ">" | "^" | "_" | "'"
<acute> ::= "/"
<grave> ::= "\\"
<circumflex> ::= "="
<macron> ::= "-"
<music> ::= <element> | <element> <music>
<element> ::= <note> | <chord> | <rest> | <bar>
<note> ::= <pitch> <duration> [<ornament>]
<pitch> ::= <letter> [<octave>]
<octave> ::= "'" | ","
<duration> ::= <digit> | <digit> <duration> | <dot> | <dot> <duration>
<digit> ::= [1-9]
<dot> ::= "."
<ornament> ::= <trill> | <mordent> | <turn> | <staccato> | <portato> | <accent> | <episema> | <crescendo> | <diminuendo>
<trill> ::= "tr"
<mordent> ::= "mor"
<turn> ::= "tur"
<staccato> ::= ","
<portato> ::= "_"
<episema> ::= "'"
<crescendo> ::= "(("
<diminuendo> ::= "))"

This BNF defines the basic elements of GABC, including music lines, lyrics, notes, chords, rests, bars, pitch, duration, and ornaments. It also specifies the syntax for each of these elements, such as the use of letters to represent pitch and the various symbols used to represent ornaments.

Caeciliae codes is a bit misleading, so don’t focus on that phrase. Since Caeciliae is an OpenType font it needs to be installed. Once installed the font can be used with Windows Notepad to create the images of sheet music.

Using Windows Notepad.

  1. Select the Caeciliae font
  2. Change the size to 24
  3. Click OK

Press and hold - and watch the empty staff grow. Since the staff is really just a sequence of glyphs (think characters if that works for you) the edit cursor can be moved left and right as expected.


If the example 3pI==6p==4pi==6p==3pI from the tutorial is pasted into a blank page


Since GABC is a music notation and Caeciliae is a font, at present it seems that this can be done with several cross reference tables or term rewriting rules as was suggested by one of the completions from ChatGPT.

Now to discover the cross reference tables or term rewriting rules, obviously seeing if ChatGPT can help do some of the more mundane work.

There is also the ABC music notation. Not sure if GABC derived from ABC as I have only this mention of the two so far in a single sentence, The name gabc was given in reference to the ABC notation for modern music.

Cheat sheet for GABC which will help in doing the translations as it can be used to isolate the atomics of the grammar.

cheat_sheet [gregowiki]

Quick-Reference Guide To Key ABC Music Notation Features For Church-Musicians ABC: low-cost music notation tools for church musicians

If an OMR (Optical Music Recognition) is needed found this
GitHub - Audiveris/audiveris: Latest generation of Audiveris OMR engine

Since the goal is to convert GABC music notation to Caeciliae font, which I didn’t get upon first reading, will use Ave Maria as a starting example.
GregoBase - Ave Maria



name:Ave Maria;
book:Graduale O.P. (Suarez), 1950, p. 380;
transcriber:Andrew Hinkley;
(c4) A(f)ve,(gh) (::) Ma(h)rí(hgh)a(hf/gh) (;) (jhjg//ffd//fddc) (;) grá(d)ti(dc)a(dffv//gh/jvHG/ixhiHG) (;3) ple(f!ghGFg)na:(gf) (:) Dó(fh)mi(hg)nus(hj) te(hvGF)cum:(ixg!hih) (:) be(h)ne(hghGF)dí(f!ghg)cta(gffe) tu(d) (;) (ffd//fg//ffgd//eddc) (;) in(f) mu(d)li(ef)é(ghgh;3jh//ijHG)ri(gf/ixhiGF)bus,(f//ghffe) (:) al(f)le(fd//fg/hgh//jvHG/hvFD;fg/hgh)lú(h//jvHG/hvFD;ffgf)ia.(fv//gffv/ded) (::)

For most detail in image use online editor

ChatGPT Mar 23 Version


How to create a prompt that does a transformation using a few different transformation rules and cross-reference tables? Do not use any external code such as Python, only us a prompt.


Sure, here’s an example prompt that does a transformation using different transformation rules and cross-reference tables:

Suppose you have a dataset that contains information about customers and the products they have purchased. You want to transform this dataset by applying the following rules:

  1. Replace customer IDs with customer names using a cross-reference table.
  2. Replace product IDs with product names using a cross-reference table.
  3. Calculate the total price of each order based on the quantity and price per unit of each product.

Assume that the original dataset has the following columns: customer_id, product_id, quantity, and price_per_unit. The transformed dataset should have the following columns: customer_name, product_name, quantity, price_per_unit, and total_price.

Here’s an example prompt that achieves this transformation:

Input dataset:
customer_id | product_id | quantity | price_per_unit
1           | 101        | 2        | 10
2           | 102        | 1        | 20
1           | 103        | 3        | 15

Cross-reference tables:
customer_id | customer_name
1           | John
2           | Jane

product_id  | product_name
101         | Product A
102         | Product B
103         | Product C

Transformation steps:
1. Replace customer IDs with customer names using the cross-reference table.
2. Replace product IDs with product names using the cross-reference table.
3. Calculate the total price of each order.

Transformed dataset:
customer_name | product_name | quantity | price_per_unit | total_price
John          | Product A    | 2        | 10             | 20
Jane          | Product B    | 1        | 20             | 20
John          | Product C    | 3        | 15             | 45

To use this prompt, you would simply replace the input dataset and cross-reference tables with your own data, and then follow the transformation steps.

For those needing music theory along with some knowledge of Gregorian chant.
Basic Gregorian Chant and Sight Reading

Musical note translation table.

Wikipedia Articles

Neume - Wikipedia
Gregorio (software) - Wikipedia
Musical Symbols (Unicode block) - Wikipedia

To learn more about the Caeciliae font opened Caeciliae-Regular.ttf with FontForge

It noted the following warnings

This font contains both a 'kern' table and a 'GPOS' table.
  The 'kern' table will only be read if there is no 'kern' feature in 'GPOS'.
This font contains both a 'mor[tx]' table and a 'GSUB' table.
  FF will only read feature/settings in 'morx' which do not match features
  found in 'GSUB'.
The glyph named diamond is mapped to U+E110.
  But its name indicates it should be mapped to U+2666.

One useful source to help identify names for terms and sequences is

The abc music standard 2.1 (Dec 2011) by Chris Walshaw

There is also an unofficial later version.

The ABC Music standard 2.0 (draft IV, 14/8/2003) by Irwin Oppenheim

The more I work with GABC and reference back to ABC for ideas the more it seems that GABC was inspired by ABC but did not directly inherit from ABC. They both share many similarities because they are ASCII representation of music notation and have several translation tables that are nearly identical but converting one to the other requires more than simple lookup translations.

Humm thanks, but It is completely wrong. The GPT doesn’t know the caeciliae language. I’ve tried a lot of times. I’ve spended two hours trying to teach it, but it does not get it. The caeciliae language is very different to the GABC. I know that GABC is a modern system, but I did not like it at all. The caeciliae code is like that:
The letters means the neumes and the numbers the high of the notes, and the = symbol the square.

Was expecting that or similar for a reply, which is helpful in confirming that what I think you need is not what is currently being generated.

I am still lost on that as you also note it as font but hopefully it will all make sense in the end.

Same with me and JavaScript, don’t like all of the boilerplate for JavaScript but ChatGPT is great at converting other source code to JavaScript, so your problem is just a variation on that. For me the question is, does or can we get ChatGPT to understand the Caeciliae language? As it is a fairly simple conversion I feel hopeful.


Hopefully you see that my current goal for getting this to work is to create a few-shot prompt that works correctly. Currently there are three representations that I have to accomplish this:

  1. Caeciliae code - the only online examples I find so far are from the link given.
  2. GABC notation - Many can be found at
  3. Images of the score - image

Since I have two of the thee parts from Caeciliae

  1. Caeciliae code - 3pI==6p==4pi==6p==3pI
  2. Image - image

and can convert GABC to an image with Editor | Source & Summit I can make some progress but having your expertise would help.

The method I am using to accomplish this is to use Bootstrapping with T-Diagrams - Computerphile - Tombstone diagram

Since I have not seen this technique used/noted for prompt engineering I am going to name it “Prompt Bootstrapping”.

This ChatGPT prompt also offered up some help

Covert this Caeciliae code to GABC notation and explain both notations and how the conversion was done.



Here is the GABC notation for the Caeciliae code you provided:

C,,3 I,, G,,6 P=4 P I,, G,,6 P=3 I,,

In Caeciliae notation, each letter or symbol represents a specific note or musical notation, with different characters used to indicate different durations, pitches, and musical symbols. In the code you provided, the letters p, i, and I are used to indicate punctum, semipunctum, and episema, respectively. The numbers preceding the characters represent the pitch of the note, with higher numbers representing higher pitches.

In GABC notation, each line of music is preceded by a header that specifies information such as the title, meter, key, and tempo of the piece. The melody is then represented using a series of letters and symbols that indicate the duration and pitch of each note, with uppercase letters used for notes in the upper octave and lowercase letters used for notes in the lower octave. Symbols such as dots and dashes are used to indicate various musical ornaments and articulations.

To convert the Caeciliae code to GABC notation, I first identified the notes and musical symbols represented by each character in the code, using a chart or reference guide to interpret the notation. I then translated each note and symbol into its equivalent GABC notation, using the appropriate letter and symbol to represent the duration and pitch of the note, and adding any necessary musical ornaments or articulations. In this case, I used P to represent punctum, I to represent episema, and G to represent gamma, with commas used to indicate lower octaves.

Note: I did finally realize that my earlier example was going from Caeciliae to GABC but what you asked is to go from GABC to Caeciliae :slightly_smiling_face:, the wording threw me off, teach ChatGPT to learn the Caeciliae codes to convert the GABC to it :upside_down_face:

1 Like

@EricGT great job on gathering extra information and help! :heart:

@garcezius are you familiar with Tex? (As in LaTeX). I noted that you mentioned “movable type” in the document, Tex is really good for that (note: I use it every day, I may be biased), in the links Eric provided it is mentioned that the gabc documentation is Tex based. This could possibly be used to solve the problem.

I don’t think there’s any of us who can rival your ability to read both Caeciliae and GABC. You can help us by providing the exact same hymn in both notations, a sort of “Rosetta stone” but for music, ideally we need all possible characters to be contained within, but just really looooooong one is probably good enough :laughing:

1 Like

Have you seen/found the Detailed information on GregorioTEX page?

and related GitHub repo.

One ChatGPT prompt produced

gregorio -i --gregfont="Caeciliae" myfile.gabc

but I can not find any mention of gregfont in the documentation or source code, possible hallucination.

Also found \usepackage{fontspec} (ref)

ChatGPT Mar 23 Version


Explain this Tex line:



usepackage{fontspec} is a command used in LaTeX to load the fontspec package, which provides an interface for selecting fonts in XeLaTeX and LuaLaTeX. The package enables the use of system-installed OpenType and TrueType fonts directly in LaTeX documents.

With fontspec, one can set font families, sizes, and styles using various commands, including \setmainfont, \setsansfont, \setmonofont, and others. By using fontspec, it’s possible to customize the document’s fonts with a great deal of control.


We really need to hear more details about what your seek, PDFs, Tex and/or LaTeX or only using Caeciliae font.

I know that creating a new font can be hundreds of hours of work so one only makes the commitment after having ruled out other options, hearing those details would also help us understand some finer points.

Currently translating gabc Notation Summary into Caeciliae character sequences to gain some understanding of the different conversions needed or that are possible, wondering if there are some things GABC can do that can not be done using Caeciliae font, if you know of them please share.

If you could also create a similar document showing

  • The image created with Caeciliae font
  • The corresponding Caeciliae character sequence
  • The image created from GABC
  • The GABC sequence

it would be of great benefit

Example for scale

Note: Found footnote in tutorial For symbols below 0, use ‘A’ and ‘B’; for symbols above 9, use ‘Z’.

In reading Caeciliae tutorial it notes

Caeciliae is designed using OpenType, which is a font specification that allows for more advanced font
features and “intelligence.”

yet after downloading and installing the Caeciliae font the file type is ttf for True Type Font which is a predecessor to OTF (Open Type Font) with OTF having more capabilities.

OpenType Wikipedia

OpenType is a format for scalable computer fonts. Derived from TrueType, it retains TrueType’s basic structure but adds many intricate data structures for describing typographic behavior.

Having created a few glyphs with a font tool and adding some advanced feature I know that some font technologies are much better for your need.

Did I miss something? Is the tutorial wrong? Is the Font file, file type correct?

1 Like

Yes, although I didn’t see the GitHub, there’s some good info on there ty :heart:
I can recommend MiKTeX, for this because an installation process is automatically triggered if you have, say, \usepackage{beamer} in a document preamble without the corresponding package installed. I’m using texmaker as an editor, it already has luatex and xelatex installed just one button click away :laughing:


Have you put any more effort into this?
Since you seem to like the Tex/LaTeX option was wondering if you tried it.

I did make some progress on this by creating a Prolog DCG parser for the GABC Gregorian chant Accedite and learned quite a few interesting things. Still think it might be possible to get ChatGPT to do similar but not in any way of prompting I have seen noted but then I have not read every paper on LLMs and prompting so would not be surprised if someone has used similar.

Now that the parser can fully read one GABC file, the next step is to get it to read all of the GABC scores from GregoBase.

Hey Champ!
Unfortunately not, I’ve been very busy the last week, sorry for the late response

I did do one thing tho, and that was breaking my Tex editor just before I had to publish something :sweat_smile: