Help
RSS
API
Feed
Maltego
Contact
Domain > notenentwickler.com
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2026-03-01
95.143.172.147
(
ClassC
)
Port 80
HTTP/1.1 301 Moved PermanentlyServer: nginxDate: Sun, 01 Mar 2026 15:23:35 GMTContent-Type: text/htmlContent-Length: 162Connection: keep-aliveLocation: https://notenentwickler.com/ html>head>title>301 Moved Permanently/title>/head>body>center>h1>301 Moved Permanently/h1>/center>hr>center>nginx/center>/body>/html>
Port 443
HTTP/1.1 200 OKDate: Sun, 01 Mar 2026 15:23:36 GMTContent-Type: text/html; charsetUTF-8Content-Length: 29483Connection: keep-aliveVary: Accept-EncodingServer: nginxLast-Modified: Tue, 25 Nov 2025 16:17:16 GMTETag: 732b-6446d9cfd5f59Accept-Ranges: bytesX-Xss-Protection: 1; modeblockX-Frame-Options: SAMEORIGINStrict-Transport-Security: max-age31536000X-Content-Type-Options: nosniffReferrer-Policy: strict-origin-when-cross-origin !DOCTYPE html>html langen> head>meta charsetUTF-8>meta namedescription contentAnalyze harmonies in music - New theory of musical harmony>meta http-equivX-UA-Compatible contentIEedge>meta nameviewport contentwidthdevice-width>link relicon href/images/Logo.png>script srchttps://cdn.jsdelivr.net/pyodide/v0.24.1/full/pyodide.js>/script>link href./abcjs-audio.css mediaall relstylesheet typetext/css>link href>script src./abcjs-basic-min.js typetext/javascript>/script>title>Music Harmony Analysis Tool/title>link relstylesheet href/_astro/how-it-works.D1RIp69b.css>/head> body classbg-stone-50> header classsticky top-0 z-50 border-b border-stone-200 bg-white shadow-sm> nav classmx-auto flex max-w-7xl flex-col gap-4 px-6 py-4 sm:flex-row sm:items-center sm:justify-between> a href/ classflex items-center gap-2 no-underline transition hover:opacity-80> img src/images/Logo.png altMusic Harmony Analysis classh-8 w-8> span classtext-lg font-semibold text-stone-900>Music Harmony Analysis/span> /a> div classflex flex-wrap items-center gap-4 sm:gap-6> a href/ classtext-sm font-medium text-stone-700 transition hover:text-sky-700>Home/a> a href/modulations classtext-sm font-medium text-stone-700 transition hover:text-sky-700>Modulations/a> a href/how-it-works classtext-sm font-medium text-stone-700 transition hover:text-sky-700>How It Works/a> a href/impressum classtext-sm font-medium text-stone-700 transition hover:text-sky-700>Impressum/a> /div> /nav> /header> section classhero relative min-h-screen w-full overflow-hidden> div classw-full grid grid-cols-6 pt-16 px-8 mb-8 gap-x-8 lg:mx-auto lg:max-w-screen-md lg:px-8 lg:grid-cols-12 lg:px-0 xl:max-w-screen-lg xl:pt-0 xl:h-screen xl:mb-0 2xl:max-w-screen-xl 2xl:mt-0 2xl:justify-center> div classtext min-h-full h-full flex flex-col justify-center content-center col-start-1 col-span-6> h1 classfont-display text-3xl text-zinc-800 mt-8 mb-4 font-bold sm:text-2xl md:text-4xl md:pt-8 md:mb-8 md:mt-16 lg:text-neutral-darkest lg:mt-8 xl:text-5xl xl:mt-8 2xl:text-4xl 2xl:mt-8>Find interesting modulations,br/> with confidence./h1> h2 classfont-body text-lg text-zinc-800 2xl:text-2xl md:text-xl>Use fitting and interesting modulations in your music with our innovative analytics of harmonics./h2> div classctas flex flex-col gap-3 sm:flex-row mt-6> a classinline-flex items-center justify-center rounded-lg bg-sky-600 px-5 py-2 text-sm font-semibold text-white shadow transition hover:bg-sky-700 href/modulations>Browse Modulations/a> a classinline-flex items-center justify-center rounded-lg border border-sky-600 px-5 py-2 text-sm font-semibold text-sky-700 transition hover:bg-sky-50 href/how-it-works>Learn More/a> /div> /div> div classflex h-full items-center col-span-6> img src/_astro/pexels-pavel-danilyuk-7521287.BZSibcjn_27f448.webp srcset/_astro/pexels-pavel-danilyuk-7521287.BZSibcjn_21Bisq.webp 320w, /_astro/pexels-pavel-danilyuk-7521287.BZSibcjn_27f448.webp 640w alt{ title } Hero Bild loadinglazy decodingasync fetchpriorityauto width640 height959 classimage rounded-2xl aspect-auto w-full> /div> /div> /section> section classpy-12 w-full px-8 md:max-w-screen-sm md:px-0 md:mx-auto lg:max-w-screen-md xl:max-w-screen-lg 2xl:max-w-screen-xl prose> h2>Analyse the harmonic structure of music/h2> p>My bachelor thesis, which explains the music theory this program is based on, can be found here: a hrefbachelor-thesis.pdf downloadLouis-Krüger-Bachelor-Thesis.pdf>Download pdf/a>/p> br> textarea nameabc idabc cols80 rows15 classborder border-stone-500 p-4 bg-white text-stone-950 font-mono whitespace-pre w-full>X: 1T: Tristan PreludeL:1/8M:6/8Q:1/8100%%staves (S A) BK:AmV:S trebleV:A trebleV:B bass octave-2V:S z | z6 | (^G3-G2 A | ^A B2-B) zz |V:A (A, | F3-F2 E | ^D6 | D3-)D zz |V:B z | z6 | (fb6 | e^g3-)e^g zz | /textarea> p>A good overview about the abc music notation standard can be found using the help button here: a hrefhttps://editor.drawthedots.com/>https://editor.drawthedots.com//a>.br>The full documentation is available here: a hrefhttps://abcnotation.com/wiki/abc:standard:v2.1>https://abcnotation.com/wiki/abc:standard:v2.1/a> /p> br> label forstart_harmonic_state>Start Keyset/label> br> input idstart_harmonic_state typetext placeholderAll valueAll classborder border-stone-50 text-stone-950 text-sm rounded-lg focus:ring-blue-950 focus:border-blue-950 block w-full p-2.5 placeholder-stone-100 dark:bg-stone-950 dark:border-stone-950 dark:placeholder-stone-100 dark:text-stone-50 dark:focus:ring-stone-50 dark:focus:border-stone-50> br> button idrenderButton classpy-2 px-8 border-stone-300 border bg-white rounded-lg hover:shadow my-4 mr-4>Render/button> button idanalyzeButton classpy-2 px-8 border-stone-300 border bg-white rounded-lg hover:shadow my-4 mr-4>Analyze/button> br> hr> div idaudio>/div> div idwarnings>/div> div classw-full> div idpaper0 classbg-stone-50 text-stone-950 min-w-fit>/div> /div> div idselection>/div> div idinformations classbg-sky-50>/div> div idplay>/div> div idanalysisabc>/div> div idinput classbg-green-300>/div> br> button typebutton ida classpy-2 px-8 border-stone-300 border bg-white rounded-lg hover:shadow my-4 mr-4>/button> label fora> Analysis/label>br> button typebutton idhs classpy-2 px-8 border-stone-300 border bg-white rounded-lg hover:shadow my-4 mr-4>/button> label forhs> Keysets/label>br> button typebutton idsf classpy-2 px-8 border-stone-300 border bg-white rounded-lg hover:shadow my-4 mr-4>/button> label forsf> Sauterian Formula/label>br> button typebutton iddod classpy-2 px-8 border-stone-300 border bg-white rounded-lg hover:shadow my-4 mr-4>/button> label fordod> Degree of Dissonance/label>br> br> p classtext-stone-950>Examples:/p> button idSingleVoiceTemplateButton classpy-2 px-8 border-stone-300 border bg-white rounded-lg hover:shadow my-4 mr-4>Single Voice Template/button> button idChoirTemplateButton classpy-2 px-8 border-stone-300 border bg-white rounded-lg hover:shadow my-4 mr-4>Choir Template/button> br> button idexampleTristanChordButton classpy-2 px-8 border-stone-300 border bg-white rounded-lg hover:shadow my-4 mr-4>Tristan Chord/button> button idexampleSimpleMelodyButton classpy-2 px-8 border-stone-300 border bg-white rounded-lg hover:shadow my-4 mr-4>Simple Melody/button> button idexampleChoirButton classpy-2 px-8 border-stone-300 border bg-white rounded-lg hover:shadow my-4 mr-4>Choir/button> br> br> div classbg-stone-50 text-stone-950> p>The analysis line shows the resulting harmonies of the individual voices, all notes arranged in one octave./p> /div> div classmy-12 border-t-2 border-stone-300>/div> section classspace-y-8> header classspace-y-4> h2 classtext-4xl font-semibold text-stone-900>How to Use/h2> p classtext-lg text-stone-600>Learn how the Music Harmony Analysis Tool helps you explore modulations in music./p> /header> article classspace-y-8 text-stone-700 leading-relaxed> div classrounded-lg border border-stone-200 bg-white p-6 shadow-sm> h3 classtext-2xl font-semibold text-stone-900 mb-3>1. Select or Enter Music/h3> p>Start in the editor on the homepage by entering music in ABC notation or by choosing one of the provided templates. The instant preview renders your score so you can confirm pitches and rhythms./p> /div> div classrounded-lg border border-stone-200 bg-white p-6 shadow-sm> h3 classtext-2xl font-semibold text-stone-900 mb-3>2. Render the Score/h3> p>Click span classfont-semibold text-sky-700>Render/span> to generate a clean engraving of your music using ABCJS. The playback controls allow you to hear the selection before analyzing./p> /div> div classrounded-lg border border-stone-200 bg-white p-6 shadow-sm> h3 classtext-2xl font-semibold text-stone-900 mb-3>3. Run the Analysis/h3> p>Press span classfont-semibold text-sky-700>Analyze/span> to calculate keysets, the Sauterian formula, and degrees of dissonance. Toggle the individual layers to focus on the details that matter most for your study./p> /div> div classrounded-lg border border-stone-200 bg-white p-6 shadow-sm> h3 classtext-2xl font-semibold text-stone-900 mb-3>4. Interpret the Results/h3> p>The analysis overlays appear directly beneath your score. Use them to identify modulation pathways, inspect ambiguous keys, and compare atonal segments. Reference the glossary below for a quick refresher on terminology./p> /div> /article> /section> div classmy-12 border-t-2 border-stone-300>/div> section classspace-y-8> header classspace-y-4> h2 classtext-4xl font-semibold text-stone-900>How It Works/h2> p classtext-lg text-stone-600>Some of the theoretical concepts behind the analysis tool. a classtext-sky-700 hover:underline href/how-it-works>Learn more/a> /p> /header> article classspace-y-8 text-stone-700 leading-relaxed> div classrounded-lg border border-stone-200 bg-white p-6 shadow-sm> h3 classtext-2xl font-semibold text-stone-900 mb-4>Keysets/h3> p classmb-4>A strong>Keyset/strong> is an extension of the concept of a key in music. Typically, a key represents the single, clear tonal center that a listener perceives. A keyset, however, allows for situations where multiple keys coexist. This creates ambiguity about the current key. Thus, keysets always relate to the perception of one or more simultaneous keys./p> /div> div classrounded-lg border border-stone-200 bg-white p-6 shadow-sm> h3 classtext-2xl font-semibold text-stone-900 mb-4>The Sauterian Formula/h3> p classmb-4>The strong>Sauterian Formula/strong> is a way to describe the chords and notes used in a keyset. Heres how it works:/p> div classspace-y-4> div> h4 classtext-lg font-semibold text-stone-800 mb-2>Basic Structure/h4> ul classlist-disc list-inside space-y-2 ml-2> li>The formula shows which notes are taken from the chords of the strong>Tonic (T)/strong>, strong>Subdominant (S)/strong>, and strong>Dominant (D)/strong> within a key./li> li>For example: code classbg-stone-100 px-1.5 py-0.5 rounded text-sm>T35D13S1/code> means the harmony includes the 3rd and 5th of the tonic, the 1st and 3rd of the dominant, and the 1st of the subdominant./li> /ul> /div> div> h4 classtext-lg font-semibold text-stone-800 mb-2>Special Cases/h4> ul classlist-disc list-inside space-y-2 ml-2> li>strong>Rests:/strong> A rest (silence) in the music is represented by code classbg-stone-100 px-1.5 py-0.5 rounded text-sm>//code>./li> li>strong>Ambiguous Keys:/strong> If the keyset involves multiple keys, we writecode classbg-stone-100 px-1.5 py-0.5 rounded text-sm>ind./code> (short for indeterminate)./li> li>strong>Atonal Notes:/strong> Notes that do not belong to the tonic, subdominant, or dominant chords are called em>atonal tones/em>. These are listed as pitch classes after an code classbg-stone-100 px-1.5 py-0.5 rounded text-sm>A/code>. For example, code classbg-stone-100 px-1.5 py-0.5 rounded text-sm>T35A14/code> means the harmony includes the 3rd and 5th of the tonic, plus two atonal notes at pitch classes 1 and 4. A and B are used for pitch classes 10 and 11./li> /ul> /div> div> h4 classtext-lg font-semibold text-stone-800 mb-2>Simplification Rule/h4> p>If a note belongs to more than one chord (e.g., it is part of both the tonic and the dominant), we simplify the formula by only listing it with the chord that creates the strong>least dissonance/strong> (see below). For instance, code classbg-stone-100 px-1.5 py-0.5 rounded text-sm>T135/code> is used instead of code classbg-stone-100 px-1.5 py-0.5 rounded text-sm>T135D1S5/code>./p> /div> /div> /div> div classrounded-lg border border-stone-200 bg-white p-6 shadow-sm> h3 classtext-2xl font-semibold text-stone-900 mb-4>Degrees of Dissonance/h3> p classmb-4>In this system, strong>dissonance/strong> is categorized into levels based on how many chords (tonic, subdominant, dominant) the notes come from - or, for atonal harmonies, based on the number of atonal notes present in the harmony. The levels progress continuously from least dissonant to most dissonant:/p> ul classlist-disc list-inside space-y-3 ml-2> li>strong>Consonance (code classbg-stone-100 px-1.5 py-0.5 rounded text-sm>con/code>):/strong> All notes belong to a single chord (either tonic, subdominant, or dominant)./li> li>strong>False Consonance (code classbg-stone-100 px-1.5 py-0.5 rounded text-sm>fcon/code>, Scheinkonsonanz):/strong> A harmony that sounds consonant but only fits as such in a different key. For example, the chord a-minor (code classbg-stone-100 px-1.5 py-0.5 rounded text-sm>T13S3/code>) in the key of C major creates a false consonance./li> li>strong>Low Dissonance (code classbg-stone-100 px-1.5 py-0.5 rounded text-sm>low/code>):/strong> Notes come from two chords: either tonic and subdominant or tonic and dominant. This is a mild dissonance./li> li>strong>Medium Dissonance (code classbg-stone-100 px-1.5 py-0.5 rounded text-sm>med/code>):/strong> Notes come from the subdominant and dominant chords. This is more dissonant than low./li> li>strong>High Dissonance (code classbg-stone-100 px-1.5 py-0.5 rounded text-sm>high/code>):/strong> Notes come from all three chords (tonic, subdominant, and dominant). This is the most complex type of tonal dissonance./li> li>strong>Atonality (code classbg-stone-100 px-1.5 py-0.5 rounded text-sm>A1/code>, code classbg-stone-100 px-1.5 py-0.5 rounded text-sm>A2/code>, ...):/strong> If the harmony includes notes that do not belong to any of the tonic, subdominant, or dominant chords, it is em>atonal/em>. Atonal harmonies are even more dissonant than high dissonance. For example:ul classlist-disc list-inside space-y-1 ml-4 mt-2> li>code classbg-stone-100 px-1.5 py-0.5 rounded text-sm>A1/code>: Atonal harmony with one atonal pitch class./li> li>code classbg-stone-100 px-1.5 py-0.5 rounded text-sm>A5/code>: Atonal harmony with five atonal pitch classes, representing the highest degree of dissonance. Only the harmony with all 12 pitch classes is of this level./li> /ul> /li> /ul> p classmt-4>As the levels of dissonance rise from code classbg-stone-100 px-1.5 py-0.5 rounded text-sm>con/code> (consonance) to code classbg-stone-100 px-1.5 py-0.5 rounded text-sm>A5/code> (most dissonant), the harmony becomes progressively more complex and tense./p> /div> div classrounded-lg border border-stone-200 bg-white p-6 shadow-sm> h3 classtext-2xl font-semibold text-stone-900 mb-4>Summary of Notation/h3> ul classlist-disc list-inside space-y-2 ml-2> li>code classbg-stone-100 px-1.5 py-0.5 rounded text-sm>//code>: A rest (silence)./li> li>code classbg-stone-100 px-1.5 py-0.5 rounded text-sm>ind./code>: An indeterminate keyset (multiple keys coexist)./li> li>code classbg-stone-100 px-1.5 py-0.5 rounded text-sm>con/code> to code classbg-stone-100 px-1.5 py-0.5 rounded text-sm>high/code>: Degrees of tonal dissonance (from stable to complex)./li> li>code classbg-stone-100 px-1.5 py-0.5 rounded text-sm>A1/code>, code classbg-stone-100 px-1.5 py-0.5 rounded text-sm>A2/code>, ...: Atonal harmonies, where increasing numbers indicate higher dissonance./li> /ul> /div> /article> /section> /section> script typetext/javascript> var a true; var hs true; var sf true; var dod true; document.getElementById(a).onclick () > { a !a; if (a) { document.getElementById(a).style.background rgb(163 230 53); if (hs) { document.getElementById(hs).style.background rgb(163 230 53); } if (sf) { document.getElementById(sf).style.background rgb(163 230 53); } if (dod) { document.getElementById(dod).style.background rgb(163 230 53); } } else { document.getElementById(a).style.background rgb(251 113 133); document.getElementById(hs).style.background rgb(251 113 133); document.getElementById(sf).style.background rgb(251 113 133); document.getElementById(dod).style.background rgb(251 113 133); } render(true); }; document.getElementById(hs).onclick () > { hs !hs; if (hs && a) { document.getElementById(hs).style.background rgb(163 230 53); } else { document.getElementById(hs).style.background rgb(251 113 133); } render(true); }; document.getElementById(sf).onclick () > { sf !sf; if (sf && a) { document.getElementById(sf).style.background rgb(163 230 53); } else { document.getElementById(sf).style.background rgb(251 113 133); } render(true); }; document.getElementById(dod).onclick () > { dod !dod; if (dod && a) { document.getElementById(dod).style.background rgb(163 230 53); } else { document.getElementById(dod).style.background rgb(251 113 133); } render(true); }; var start_harmonic_state; var visualObj; var lines; var abcString; var analysis_abc_string; if (ABCJS.synth.supportsAudio()) { console.log(Audio is supported.); } else { console.log(Audio is not supported.); } var audioParams {chordsOff: true}; var renderParams { responsive: resize, viewportHorizontal: true, scrollHorizontal: true, staffwidth: document.getElementById(paper0).clientWidth - 100, paddingleft: 50, paddingright: 50, scale: 0.9, }; var synthControl new ABCJS.synth.SynthController(); synthControl.load(#audio, {}, { displayLoop: false, displayRestart: true, displayPlay: true, displayProgress: true, displayWarp: true } ); var createSynth new ABCJS.synth.CreateSynth(); function truncate_lines(lines) { for (var i 0; i lines.length; i++) { //console.log(linesi); //delete linesi.staffGroup; for (var j 0; j linesi.staff.length; j++) { //console.log(linesi.staffj); if (meter in linesi.staffj) { delete linesi.staffj.meter.abselem; } delete linesi.staffj.clef.abselem; delete linesi.staffj.clef.clefPos; delete linesi.staffj.clef.verticalPos; delete linesi.staffj.key.abselem; for (var k 0; k linesi.staffj.voices.length; k++) { //console.log(linesi.staffj.voicesk); for (var l 0; l linesi.staffj.voicesk.length; l++) { //console.log(linesi.staffj.voiceskl); delete linesi.staffj.voiceskl.abselem; delete linesi.staffj.voiceskl.endChar; delete linesi.staffj.voiceskl.startChar; } } } } return lines; } //analyze is a boolean, true if you want to analyze function render(analyze) { abcString document.getElementById(abc).value; //console.log(abcString); visualObj ABCJS.renderAbc(paper0, abcString, renderParams); console.log(visualObj); synthControl.pause(); synthControl.restart(); synthControl.disable(); createSynth.stop(); synthControl new ABCJS.synth.SynthController(); synthControl.load(#audio, {}, { displayLoop: false, displayRestart: true, displayPlay: true, displayProgress: true, displayWarp: true } ); createSynth new ABCJS.synth.CreateSynth(); createSynth.init({visualObj: visualObj0}).then(function () { synthControl.setTune(visualObj0, false, audioParams).then(function () { console.log(Audio successfully loaded.) }).catch(function (error) { console.warn(Audio problem:, error); }).then(function () { if (analyze) { linesWithStaffGroup visualObj0.lines; //console.log(linesWithStaffGroup); truncate_lines(linesWithStaffGroup); lines ; for (var i 0; i linesWithStaffGroup.length; i++) { lines.push({staff: linesWithStaffGroupi.staff}); } console.log(lines); start_harmonic_state document.getElementById(start_harmonic_state).value if (start_harmonic_state ) { start_harmonic_state All } console.log(start_harmonic_state) main().then(() > { console.log(pyodide done); console.log(analysis_abc_string); const lines abcString.split(\n).filter(line > line.trim() ! ); const abcStringWithoutEmptyLines lines.join(\n); const a abcStringWithoutEmptyLines + analysis_abc_string; ABCJS.renderAbc(paper0, a, renderParams); }); } }); }).catch(function (error) { console.warn(Audio problem:, error); }); } function renderSingleVoiceTemplate() { document.getElementById(abc).value `X: 1T: SingleVoiceTemplateL:1/4M:4/4Q:1/490K:C% 1x4|x4|x4|x4|% 5x4|x4|x4|x4|` render(); } function renderChoirTemplate() { document.getElementById(abc).value `X: 1T: ChoirTemplateL:1/4M:4/4Q:1/490%%score (S A) (T B)V:S nameSopran snmS octave-1V:A nameAlt snmA octave-1V:T clefbass nameTenor snmT octave-2V:B clefbass nameBass snmB octave-2K:C% 1V:S x4 | x4 | x4 | x4 |V:A x4 | x4 | x4 | x4 |V:T x4 | x4 | x4 | x4 |V:B x4 | x4 | x4 | x4 |% 5V:S x4 | x4 | x4 | x4 |V:A x4 | x4 | x4 | x4 |V:T x4 | x4 | x4 | x4 |V:B x4 | x4 | x4 | x4 |` render(); } function renderTristanChord() { document.getElementById(abc).value `X: 1T: Tristan PreludeL:1/8M:6/8Q:1/8100%%staves (S A) BK:AmV:S trebleV:A trebleV:B bass octave-2V:S z | z6 | (^G3-G2 A | ^A B2-B) zz |V:A (A, | F3-F2 E | ^D6 | D3-)D zz |V:B z | z6 | (fb6 | e^g3-)e^g zz |` render(); } function renderSimpleMelody() { document.getElementById(abc).value `X: 5T: Bach Minuet 1C: J. S. Bach 1685-1750M: 3/4L: 1/8K: GV:1 G.d2 .d2 .d2 | B2 AB G2 |DA2 (.d2.c2) |GB4 DA2 |\ G d2 cBAG |Ce2 cBAG |DF2 ED F2 |GG6 :||: \Em B2 e4 |A^c2 Bc A2 |D d2 e2 f2 |Aed^cB A2 |\ D a2 gfed |G b2 gfed |A^c2 A2 c2 |Dd6 | G d2 cBA2 | B2 DAB GG2 |C c4 cB |DA6 ^I|\ G d2 cBAG |C e2 cBAG |D F2 ED F2 |GG6 :|` render(); } function renderChoir() { document.getElementById(abc).value `X:1 T:Zocharti Loch C:Louis Lewandowski (1821-1894) M:CQ:1/476%%score (T1 T2) (B1 B2)V:T1 cleftreble-8 nameTenore I snmT.IV:T2 cleftreble-8 nameTenore II snmT.IIV:B1 middled clefbass nameBasso I snmB.I octave-2V:B2 middled clefbass nameBasso II snmB.II octave-2K:Gm% End of header, start of tune body:% 1V:T1 (B2c2 d2g2) | f6e2 | (d2c2 d2)e2 | d4 c2z2 |V:T2 (G2A2 B2e2) | d6c2 | (B2A2 B2)c2 | B4 A2z2 |V:B1 z8 | z2f2 g2a2 | b2z2 z2 e2 | f4 f2z2 |V:B2 x8 | x8 | x8 | x8 |% 5V:T1 (B2c2 d2g2) | f8 | d3c (d2fe) | H d6 ||V:T2 z8 | z8 | B3A (B2c2) | H A6 ||V:B1 (d2f2 b2e2) | d8 | g3g g4 | H^f6 ||V:B2 x8 | z2B2 c2d2 | e3e (d2c2) | H d6 ||` render(); } document.getElementById(renderButton).onclick () > { render(false); }; document.getElementById(SingleVoiceTemplateButton).onclick renderSingleVoiceTemplate; document.getElementById(ChoirTemplateButton).onclick renderChoirTemplate; document.getElementById(exampleTristanChordButton).onclick renderTristanChord; document.getElementById(exampleSimpleMelodyButton).onclick renderSimpleMelody; document.getElementById(exampleChoirButton).onclick renderChoir; //------------- Analyze ----------------- let initPyodide loadPyodide(); async function main() { let python_code `import jsimport micropipawait micropip.install(music-harmony-analysis)from abcjs_interface import get_analyzed_abc_stringsdef analysis_strings_to_string(analysis_abc_strings, a, hs, sf, dod): Input: - analysis_abc_strings: Dictionary with the following fields: - header: String. The header of the abc analysis: \nL:1\n. - events: List of strings. Format: V: Analysis CE^^G1/4 C_EGB1/4\n. (V: Analysis nameAnalysis snmA. for the first line) Each string represents the harmonies of one line of music. - harmonic_states: List of strings (keysets). Format: w: C,Cis,Dm C,Cis,Dm\n. Each string corresponds to the events of one line. - sauterian_formula: List of strings. Format: w: T15D15S3 D35S1A3,11\n. Each string corresponds to the events of one line. - degree_of_dissonance_or_atonal: List of strings. Format: w: / low\n. Each string corresponds to the events of one line. if not a: return analysis_abc_string analysis_abc_stringsheader for i in range(len(analysis_abc_stringsevents)): analysis_abc_string + analysis_abc_stringseventsi if hs: analysis_abc_string + analysis_abc_stringsharmonic_statesi if sf: analysis_abc_string + analysis_abc_stringssauterian_formulai if dod: analysis_abc_string + analysis_abc_stringsdegree_of_dissonance_or_atonali return analysis_abc_stringinput js.lines.to_py()start_harmonic_state js.start_harmonic_stateanalysis_abc_strings, informations, error get_analyzed_abc_strings(input, start_harmonic_state)js.analysis_abc_string analysis_strings_to_string(analysis_abc_strings, js.a, js.hs, js.sf, js.dod)if error: js.document.getElementById(informations).style.background #EE8A9E js.document.getElementById(informations).innerHTML errorelse: js.document.getElementById(informations).style.background #F0F9FF js.document.getElementById(informations).innerHTML informations`; let pyodide await initPyodide; await pyodide.loadPackage(micropip); await pyodide.runPythonAsync(python_code); }; document.getElementById(analyzeButton).onclick () > { render(true); }; /script> /body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]