{"id":150,"date":"2023-12-06T00:10:00","date_gmt":"2023-12-06T05:10:00","guid":{"rendered":"https:\/\/radio.teledyn.com\/blog\/?p=150"},"modified":"2023-12-13T00:51:03","modified_gmt":"2023-12-13T05:51:03","slug":"hello-lilypond","status":"publish","type":"post","link":"https:\/\/radio.teledyn.com\/blog\/2023\/12\/06\/hello-lilypond\/","title":{"rendered":"Hello, Lilypond"},"content":{"rendered":"<div id=\"outline-container-org422fc8f\" class=\"outline-2\">\n<h2 id=\"org422fc8f\">Somewhere there&#8217;s Music<\/h2>\n<div id=\"text-org422fc8f\" class=\"outline-text-2\">\n<p>If I can express the <a href=\"https:\/\/radio.teledyn.com\/blog\/2023\/11\/27\/hello-buffer\/\">speed of light<\/a>, what about sound? My next quest in this adventure is leveraging <code>org-babel<\/code> to generate snippets of music notation. Like, <em>how difficult can that be?<\/em><\/p>\n<p>On my way in, I know very little. I might know a great deal about music notations, sure, but all I know of <a href=\"https:\/\/lilypond.org\/doc\/v2.24\/Documentation\/notation\/index\">Lilypond<\/a> is two decades<sup><a id=\"fnr.1\" class=\"footref\" role=\"doc-backlink\" href=\"#fn.1\">1<\/a><\/sup> old and even then I was more into <em><a href=\"https:\/\/musescore.org\/\">Musescore<\/a><\/em>. What I do know of Lilypond is it is emaculately academic about notation, and that sounds like a nice thing to have.<\/p>\n<p>From what I (dimly) recall, it retains a latex-like feel to the notation. It can&#8217;t be any worse than CSound, which is a topic in itself. For starters, though, is it <em>possible<\/em> to not only render some snip of score, but to have the process render and ready a MIDI? That&#8217;s the proof of concept <em>du jour<\/em>.<br \/>\n<!--more Adventures in Org-Babel-Lilypond--><\/p>\n<\/div>\n<\/div>\n<div id=\"outline-container-orgcdd9dfd\" class=\"outline-2\">\n<h2 id=\"orgcdd9dfd\">Adventures in <em>ob-lilypond<\/em><\/h2>\n<div id=\"text-orgcdd9dfd\" class=\"outline-text-2\">\n<p>I notice the <code>ob-lilypond<\/code> module doesn&#8217;t appear on <code>MELPA<\/code>, but perhaps that&#8217;s because it is core. I ran the following elisp as suggested <a href=\"https:\/\/github.com\/mjago\/ob-lilypond\">on their GitHub<\/a><sup><a id=\"fnr.2\" class=\"footref\" role=\"doc-backlink\" href=\"#fn.2\">2<\/a><\/sup>:<\/p>\n<div class=\"org-src-container\"><label class=\"org-src-name\"><em> I have only the foggiest notion of what this does but I am guessing it registers <code>true<\/code> for org-mode src block types it will attempt to evaluate?.<\/em><\/label><\/p>\n<pre id=\"nil\" class=\"src src-lisp\">(org-babel-do-load-languages\r\n'org-babel-load-languages\r\n'((ruby . t)\r\n  (C . t)\r\n  (emacs-lisp . t)\r\n<span style=\"color: #6abd50;\">;;  <\/span><span style=\"color: #6aaf50;\">(sh t)<\/span>\r\n  (dot t)\r\n  (clojure t)\r\n  (ditaa t)\r\n  (lilypond t)))\r\n<\/pre>\n<\/div>\n<p>That should probably go into my Emacs <code>init.el<\/code> if it wasn&#8217;t already the default. Just to clarify my context, I&#8217;m running <em>UbuntuStudio<\/em> 23.10, so KDE\/Qt based and should work fine with <em>Rosegarden<\/em> (although I haven&#8217;t visited that app in decades). So I&#8217;ll have that and <em>LilyPond<\/em> installed under 23.10.<\/p>\n<p>Given all this, the compile to PNG and upload of the media is automatic. I&#8217;m just hitting publish, then giving permission to use the local lilypond:<\/p>\n<div id=\"orgcd14f5d\" class=\"figure\">\n<p><img decoding=\"async\" src=\"https:\/\/radio.teledyn.com\/blog\/wp-content\/uploads\/2023\/12\/mixolydian-18.png\" alt=\"mixolydian.png\" \/><\/p>\n<\/div>\n<p>That&#8217;s in need of some serious cropping, but otherwise presents a nice face and easy to do. There&#8217;s a note tagged to the end of the org file that needs to be deleted to effect any future updates to this image.<\/p>\n<p>It is, however, <em>curious and odd<\/em> none of the offered examples offer any hints on <em>cropping<\/em> the image. The <code>lilypond<\/code> executable command can be set in the <code>customize-group<\/code> for org-babel, but <a href=\"https:\/\/lilypond.org\/doc\/v2.25\/Documentation\/usage\/advanced-command_002dline-options-for-lilypond\">I&#8217;m not getting the crop option<\/a>. Also suggested was adding <code>#(ly:set-option 'crop #t)<\/code> but again, added to the lilypond block has no effect on the output, although I do see a <code>mixolydian.cropped.png<\/code> created by the process, so the puzzle is really how to get that inserted instead of the full-page version. In the <a href=\"https:\/\/github.com\/mjago\/ob-lilypond\/blob\/master\/examples\/basic-mode\/html-example\/html-example.org?plain=1\">HTML example org source<\/a> I do notice they append a <code>#+results:<\/code> line followed by the <em>local<\/em> filename, although they don&#8217;t put <em>cropped<\/em> in there, and putting it in did not change the published page.<\/p>\n<p>A cursory search suggests Lilypond folks typically use <em>ImageMagick<\/em> to post-process a crop, but that seems clumsy within this Org2Blog process <em>and<\/em> none of the examples given suggest anything special to be done! Also, speaking of clumsy, every time the image is regenerated, we create and upload an <em>additional<\/em> (numbered) PNG which is then <em>added<\/em> to the Activitypub export (to the max of 3), so here again, the ActivityPub plug makes no allowances for image corrections, even on drafts.<\/p>\n<p>The lilypond src block is also ignoring my caption tag, whereas I get a nice <em>Fig. 1<\/em> when I normally include an image.<\/p>\n<p>Clearly not out of the woods on this just yet.<\/p>\n<p>The <a href=\"https:\/\/github.com\/mjago\/ob-lilypond\/blob\/master\/examples\/basic-mode\/html-example\/html-example.org?plain=1\">ob-lilypond example<\/a> had a preamble to <em>define<\/em> <code>version<\/code> and <code>paper<\/code> that should be part of a <code>#+SETUPFILE<\/code> somewhere.<\/p>\n<p>&nbsp;<\/p>\n<pre id=\"nil\" class=\"example\">#+LaTeX_HEADER: \\usepackage[paperheight=4cm,paperwidth=17cm,textwidth=15cm]{geometry}\r\n#+name: version\r\n#+begin_src emacs-lisp :exports none :results silent :eval yes\r\n\"\\\\version \\\"2.12.3\\\"\"\r\n#+end_src\r\n#+name: paper\r\n#+begin_src emacs-lisp :exports none :results silent :eval yes\r\n  \"\\\\paper {\r\n\tindent = 0\\\\mm\r\n\tline-width = 170\\\\mm\r\n    oddFooterMarkup=##f\r\n    oddHeaderMarkup=##f\r\n    bookTitleMarkup=##f\r\n    scoreTitleMarkup=##f\r\n  }\"\r\n#+end_src\r\n<\/pre>\n<p>On posting to WordPress, I&#8217;m initially asked permission to eval every block on every print; <a href=\"https:\/\/emacs.stackexchange.com\/questions\/75102\/how-can-i-permit-evaluation-of-code-blocks-in-org-mode\">this is known behaviour<\/a> and since the given fix didn&#8217;t work for me, I&#8217;ve set a global <em>accept<\/em> on babel block evaluations. <em>May the good lord have mercy on my heathen soul.<\/em><\/p>\n<\/div>\n<\/div>\n<div id=\"outline-container-org3c7d5dd\" class=\"outline-2\">\n<h2 id=\"org3c7d5dd\">What about <em>Rosegarden<\/em><\/h2>\n<div id=\"text-org3c7d5dd\" class=\"outline-text-2\">\n<p>This is <em>UbuntuStudio<\/em> so I was surprised to find it not already install, but easily fixed via <code>apt<\/code>. On install it recommends a soundfont, so I included that, but on first <em>run<\/em> I&#8217;m told there will be no sound without <em>Qsynth<\/em>. That gets added, run, presumably background? Rosegarden now has sound but it is very <em>s-l-o-w<\/em> and choppy when configured for alsa and pipewire, or <em>quasi<\/em> configured, maybe. Pipewire for a <code>jackd<\/code> app? That will be a puzzle for another day.<\/p>\n<p>As it turns out, I may be fine for my first while just coding in Lilypond directly. Like, <em>how hard could <u>that<\/u> be?<\/em><\/p>\n<\/div>\n<\/div>\n<div id=\"footnotes\">\n<h2 class=\"footnotes\">Footnotes:<\/h2>\n<div id=\"text-footnotes\">\n<div class=\"footdef\">\n<p><sup><a id=\"fn.1\" class=\"footnum\" role=\"doc-backlink\" href=\"#fnr.1\">1<\/a><\/sup><\/p>\n<div class=\"footpara\" role=\"doc-footnote\">\n<p class=\"footpara\"><em>circa y2k<\/em> a lot of my work was documented using \\(\\LaTeX\\) generated via <code>DocBook<\/code> xml files, for example <a href=\"https:\/\/kernelbook.sf.net\">the Linux Kernelbook Project<\/a> actually allowed me to begin an <em>open<\/em> textbook on kernel internals, the notion being to have a living document that could be professionally published by Macmillan, translated and all that, but fundamentally online, free and <em>current<\/em>. Unfortunately the kernel lords of the day were wont to participate.<\/p>\n<\/div>\n<\/div>\n<div class=\"footdef\">\n<p><sup><a id=\"fn.2\" class=\"footnum\" role=\"doc-backlink\" href=\"#fnr.2\">2<\/a><\/sup><\/p>\n<div class=\"footpara\" role=\"doc-footnote\">\n<p class=\"footpara\">I had to comment out the <code>sh<\/code> reference, and the <em>failure<\/em> of that run killed the Org2Blog menu. I copied the contents, quit the previous post buffer and killed this one, then started a new buffer and pasted this back in (this was before posting any drafts)<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p><span hidden class=\"__iawmlf-post-loop-links\" data-iawmlf-links=\"[{&quot;id&quot;:3,&quot;href&quot;:&quot;https:\\\/\\\/lilypond.org\\\/doc\\\/v2.24\\\/Documentation\\\/notation\\\/index&quot;,&quot;archived_href&quot;:&quot;http:\\\/\\\/web-wp.archive.org\\\/web\\\/20250525073344\\\/https:\\\/\\\/lilypond.org\\\/doc\\\/v2.24\\\/Documentation\\\/notation\\\/index&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2025-11-01 05:21:07&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2025-12-03 04:28:21&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2025-12-10 00:54:08&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-01-06 00:37:56&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-01-12 09:00:25&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-01-21 21:17:33&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-01-27 05:34:31&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-12 00:45:03&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-15 15:14:28&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-20 10:19:09&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-23 22:14:14&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-27 10:11:49&quot;,&quot;http_code&quot;:503},{&quot;date&quot;:&quot;2026-03-02 17:35:58&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-11 09:16:19&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-20 03:57:27&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-24 06:10:48&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-28 04:04:11&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-31 08:11:55&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-05 07:24:16&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-08 17:00:58&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-18 19:48:16&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-05-08 12:05:45&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-05-13 13:53:13&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-05-17 09:02:27&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-05-21 17:42:51&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-05-24 21:30:25&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-05-28 18:49:26&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-06-03 10:35:01&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-06-11 19:16:56&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-06-23 15:33:08&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-07-02 22:22:27&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-07-06 15:06:07&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-07-06 15:06:07&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:4,&quot;href&quot;:&quot;https:\\\/\\\/musescore.org&quot;,&quot;archived_href&quot;:&quot;http:\\\/\\\/web-wp.archive.org\\\/web\\\/20171024112352\\\/https:\\\/\\\/musescore.org\\\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2025-11-01 05:21:10&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2025-12-03 04:28:20&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2025-12-10 00:54:11&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-06 00:37:55&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-12 09:00:26&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-17 22:14:00&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-21 21:17:34&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-27 05:34:33&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-12 00:45:03&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-15 15:14:28&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-20 10:19:11&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-23 22:14:16&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-27 10:11:46&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-02 17:35:52&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-11 09:16:19&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-20 03:57:26&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-24 06:10:50&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-28 04:04:10&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-31 08:11:53&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-05 07:24:19&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-08 17:01:01&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-18 19:48:20&quot;,&quot;http_code&quot;:503},{&quot;date&quot;:&quot;2026-05-08 12:05:46&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-05-13 13:53:16&quot;,&quot;http_code&quot;:503},{&quot;date&quot;:&quot;2026-05-17 09:02:26&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-05-21 17:42:51&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-05-24 21:30:27&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-05-28 18:49:30&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-06-03 10:35:02&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-06-11 19:16:55&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-06-23 15:33:10&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-07-02 22:22:28&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-07-06 15:06:07&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-07-06 15:06:07&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:5,&quot;href&quot;:&quot;https:\\\/\\\/github.com\\\/mjago\\\/ob-lilypond&quot;,&quot;archived_href&quot;:&quot;http:\\\/\\\/web-wp.archive.org\\\/web\\\/20251012120933\\\/https:\\\/\\\/github.com\\\/mjago\\\/ob-lilypond&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2025-11-01 05:21:12&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2025-12-03 05:23:24&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-01-06 00:37:53&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-01-23 04:12:22&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-20 17:41:50&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-05-24 21:30:26&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-07-06 15:06:07&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-07-06 15:06:07&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:6,&quot;href&quot;:&quot;https:\\\/\\\/lilypond.org\\\/doc\\\/v2.25\\\/Documentation\\\/usage\\\/advanced-command_002dline-options-for-lilypond&quot;,&quot;archived_href&quot;:&quot;http:\\\/\\\/web-wp.archive.org\\\/web\\\/20250905154139\\\/https:\\\/\\\/lilypond.org\\\/doc\\\/v2.25\\\/Documentation\\\/usage\\\/advanced-command_002dline-options-for-lilypond&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2025-11-01 05:21:13&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-20 17:41:50&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-05-25 04:04:16&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-07-06 15:06:07&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-07-06 15:06:07&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:7,&quot;href&quot;:&quot;https:\\\/\\\/github.com\\\/mjago\\\/ob-lilypond\\\/blob\\\/master\\\/examples\\\/basic-mode\\\/html-example\\\/html-example.org?plain=1&quot;,&quot;archived_href&quot;:&quot;http:\\\/\\\/web-wp.archive.org\\\/web\\\/20251101052213\\\/https:\\\/\\\/github.com\\\/mjago\\\/ob-lilypond\\\/blob\\\/master\\\/examples\\\/basic-mode\\\/html-example\\\/html-example.org?plain=1&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-20 17:41:50&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-05-25 04:04:14&quot;,&quot;http_code&quot;:429},{&quot;date&quot;:&quot;2026-07-06 15:06:06&quot;,&quot;http_code&quot;:429}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-07-06 15:06:06&quot;,&quot;http_code&quot;:429},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:8,&quot;href&quot;:&quot;https:\\\/\\\/emacs.stackexchange.com\\\/questions\\\/75102\\\/how-can-i-permit-evaluation-of-code-blocks-in-org-mode&quot;,&quot;archived_href&quot;:&quot;http:\\\/\\\/web-wp.archive.org\\\/web\\\/20251101052214\\\/https:\\\/\\\/emacs.stackexchange.com\\\/questions\\\/75102\\\/how-can-i-permit-evaluation-of-code-blocks-in-org-mode&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:9,&quot;href&quot;:&quot;https:\\\/\\\/kernelbook.sf.net&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;http:\\\/\\\/kernelbook.sourceforge.net\\\/&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;}]\"><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Explorations in music engraving via org-mode<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":3,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":""},"categories":[15],"tags":[23],"class_list":["post-150","post","type-post","status-publish","format-standard","hentry","category-org2blog","tag-emacs-latex-org-mode-lilypond"],"_links":{"self":[{"href":"https:\/\/radio.teledyn.com\/blog\/wp-json\/wp\/v2\/posts\/150","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/radio.teledyn.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/radio.teledyn.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/radio.teledyn.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/radio.teledyn.com\/blog\/wp-json\/wp\/v2\/comments?post=150"}],"version-history":[{"count":62,"href":"https:\/\/radio.teledyn.com\/blog\/wp-json\/wp\/v2\/posts\/150\/revisions"}],"predecessor-version":[{"id":242,"href":"https:\/\/radio.teledyn.com\/blog\/wp-json\/wp\/v2\/posts\/150\/revisions\/242"}],"wp:attachment":[{"href":"https:\/\/radio.teledyn.com\/blog\/wp-json\/wp\/v2\/media?parent=150"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/radio.teledyn.com\/blog\/wp-json\/wp\/v2\/categories?post=150"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/radio.teledyn.com\/blog\/wp-json\/wp\/v2\/tags?post=150"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}