Denne manual er bygget op i tre lag.
Det øverste lag er en beskrivelse af hvordan man bruger
Det anden lag er en lidt dybere beskrivelse af hvordan det virker
Du er nu kommet ned på det tredie lag som er fodnoter med matetmatiske beskrivelser og sjove annekdoter.
Denne manual er kun påbgyndt, der kan stadig være en del stavefejl.
(Her vil jeg skrive om de tanker jeg har om at føre systemet videre, ligesom jeg forhåbentlig vil skrive hvordan jeg har løst tingene undervejs.)
2. december 2023
Begyndt at se på hvordan man vil kunne lave systemet bedre.
29 november 2023
Havde elviolin med i Hus Forbi til onsdags-øver. ca. 40 % af noderne kun ikke findes i repertoire listen.
Ofte er det de korte melodier, der ikke lader sig findes.
25 November 2023 Testen for en uge siden på Solborgen var positiv men ikke overbevisende. Jeg brugte min El-violin og spillede med orkesteret om eftermiddagen.
Sendte lyden fra min violin trådløst til fandt mange noder, og kunne se at de fundene noder kom op i listen under mit navn ovenover "Fritspilslisten".
Det er specielt de simple noder, der er svære at finde.
Christianshavn 21/11 2023 kl 21.43.
(i hvert fald en gang i mellem, faktisk for det meste. Jeg har kun prøvet med violin.) |
Det virker på strengeinstrumenter, og blæseinstrumenter.
Det virker ikke på kirkeklokker og xylofoner. (fordi disse instrumenter har ovretoner der ikke er multiple af grundtonen. Hvis man har prøvet at lave modalanalyse kan man forstå hvorfor.
Afspilings logfiler for første stemme bliver lavet når afspilningen er lavet, færdig.
Da den samme fil kan spilles flere gange kan der ligge flere log i den samme fil.
Desværre bliver logfilen også skrivet når man trykker på "n" for næste melodi
Log filen består af tre strenge:
Disse log filer er ikke lavet, her vil man få et individuelt link, til de filer man selv laver (man skal være logget ind på spillefolk).
Det vil være et krav, at man, inden man starter loggen, finder den node man vil spille, idet 3000 søgestrengen så kan lægges ind i filen automatisk.
Måske vil jeg også gemme spektrum analysen her:
Text filer dannet fra midi-filerne
Json-filer dannet fra midi-text filerne
SVG-billeder uden repriser på alle noder (automatisk dannet fra midi-filerne)
SVG-filerne bliver anvendt på Træf-CDerne her
søgefilen udent triller
søgefilen med triller
(omvendt kronologisk )
uge 47 - 48
Spil og Find finder kun ca. 60% af noderne. Dette kan skyldes mange ting.
Når man spiller kan man se at find tælleren kun tæller op på ganske få søgestrenge, ofte tæller den op på flere melodier samtidigt, mens andre søgestrenge ikke finder noget.
Uge 45-47 Ved at kigge på logfiler så jeg, at der i slutningen af hver tone kom tilfældige noder ind, der ødelagde søgningen, derfor skal en node være reperteret i org-strengen, før den bliver lavet til skift.
Ved at se på spektraet når hele orkesteret spiller kan man se, at den harmoniske række ikke er særlig tydelig, når hele orkesteret spiller.
Dette "slogan" for applikationen hentyder til ordsproget
"Tab og vind, - med samme sind"
ordsproget hentyder til en anden - homonym - betydning af ordet at spille
Men også at det er lidt tilfældigt hvor hurtigt man finder den rigtige node med denne metode.
Når man taler om homonym er det lidt sjovt at det tyrkiske ord for at spille musik
* çalmak
også betyder, at slå og at stjæle
(dette er lidt en joke, men jeg har arbejdet i Tyrkiet, og prøvede selvfølgelig at lære sproget, og blev lidt forundret over homonymerne til det at spille musik, men det er vel fordi at man slår en del på tromme - Darbuka når man spiller tyrkisk musik.
her er en liste jeg fandt på internettet Google translated til dansk Tyrkisk er et agglutinerende sprog med mange endelser {"mak" er en infinitiv [=grundform] endelse}, så det kan være svært at finde ordet, men det starter altid med "çal" udtales tchal )
(tilbage til teknisk forklaring)
I stedet for at lære tidstabellen udenad, så kan man lære hvor ofte går toget, i dette tilfælde hvert 20. minut.
Det er meget nemmere at skrive tidstabellen. Det er det samme vi gør når vi laver frekvens analyse
Ifølge Fouriers sætninger kan enhver periodisk funktion opbygges af en kombination af sinus og cosinus.
Det er dog praktisk at opfatte sinus og cosinus, som en eksponential funktion med komplex komponent.
Fourier analyse drejer man det lille hjul til højre rundt først 1 gang så 2 gange, den energi, der bliver samlet op danner spektraet.
FFT analyse er en hurtig beregningsmetode til frekvensanalyse
Man har kendt frekensanalyse siden starte på 1800-tallet men beregningen var meget langsom. Amerikanerne havde brug for noget der var hurtigere, sådan at man med med den danske kvindelige forsker Inge Lehmanns hjælp kunne finde ud af om det var et jordskælv eller en rusisk underjordisk atomprøvesprængninger, man opfangede på seismograferne i 1960-erne
Det fortælles at, mens præsident Kennedi sad og diskuterede dette med de klogeste hoveder i landet, til et møde i Det Hvide Hus.
Fysikerne (James Cooley og John Turkey) fandt en metode som var meget hurtigere at beregne toner fra lydbølger, stadig baseret på Fouriers Teorem, de kaldte den Fast Fourier Transform eller FFT.
Den gang jeg arbejdede med at sælge FFT -analysatorer i 1980-erne kostede de mellem 100.000 og en kvart million kroner.
I dag kan enhver browser lave sådan en transformation (med passende kode).
Fourier transformet siger, at alle periodiske signaler kan opdels i en serie af Sinus og cosinus. Sinus og cosinus fås som bekendt ved at indskrive en retvinklet trekant i en cirkel. hvor det ene hjørne er i centrum af cirkelen.
Pythagoras der levede for 2500 år siden havde før han flyttede til Kroton (en græsk koloni i syditalien) været i egypten og lært noget om trekanter. (Pythagoras sætning findes nedskrevet i mesopotanien over 1000 år tidligere)
Ud over at beskæftige sig med trekanter, bekæftigede han sig med musik. Specielt var an begejstret for rene kvinter. Frem til slutningen af 1600-tallet stemte man orgler i rene kvinter. Man kalder dette for Pythagoræisk stemning.
Du stemmer stadigvæk violiner i rene kvinter.
Rent matematisk passer det ikke og man fandt en bedre måde at stemme klaver og orgler.
{Jeg vil her på et senere tidspunkt forklare Fouriertransformet med billeder}
Meningen med dette kapietel er at beskrive en sammenhæng igennem historien, om hvordan udvikling af musik, fysik og matematik går hånd i hånd. Men dette er et projekt der tager længere tid end det jeg har i forvejen.
Han mente desuden at der var en sammenhæng mellem harmonien i musiken og planeternes baner.
Ud fra Fouriers sætning kan enhver periodisk funktion opdels i sinus og cosinusfuntioner. Strenge og blæseinstrumenter producerer alle overtoner.
Når man fløjter eller bruger en stemmegaffel, producerer man en tone der ligger meget tæt på en sinus, og der er ikke overtoner. Man ser derfor kun grundfrekvensen når man laver FFT-analysen
De fleste andre instrumenter producerer harmoniske overtoner, det vil sige overtoner der er 2. 3. 4. 5. osv. gange overtonen. Med Spil og Find undersøger jeg overtnerne op til ca 15 kHz (det vil sige 15.000 Hz).
Høregrænsen for børn ligger omkring 20 kHz, den falder med alderen sådan at der er meget få 60 årige der kan høre toner over 10 kHz.
Her kan du se log-filer der bliver brugt til at se hvordan systemet finder noderne
Hvis der er noget, du ikke forstår, så spring det over !
Læs det igen på et senere tidspunkt.
Husk at:
Forsåelse består i: at vænne sig til forklaringen,
sådan er det bare.
Jeg vil ikke påtage mig at forklare hvad "Markow-modeller" er , bare at det er nemmere end AI, og at det jeg har lavet højst sandynligt er en Markow modell.
Dette er den nørdede forklaring.... Du kan nøjes med, at kigge på billederne.
Jeg ved på forhånd at en tone har en frekvens og overtoner. Disse bliver markeret med gult.
Måden jeg finder spidsen er at den er højere end den spektrum linie, der ligger på begge sider omkring.
Dog vil jeg ikke have støj med så jeg tager ikke spidser med som ligger under det grønne støj gulv. Det grønne støjgulv er lavet ved en lav-pas filtrering af spektraet.
Jeg kan huske, at ham (Carsten Andersson) der fandt ud af denne teknik hos Brüel & Kjær var meget stolt over, at det kunne man jo "bare gøre".
Så skal jeg klassificere tonerne. Jeg starter med at lave en række med 77 halvtoner fra G3 (G-strengen på en violin, og op til H9 (ca 16 kHz). (se billedet her under)
Omkring hver tone lægger jeg en max-min grænse på 45 cent. (en cent er en 1/100-dels halv tone). Så det er tilladt at spille ganske falsk, men man skal holde sig i den rigtige toneart, i forhold til kammertonen. Hvis man spiller A=440 eller A=444 spiller dog mindre rolle.
Men jeg opfordrer kraftigt at man stemmer A=440 som jo overholder den internationelle ISO standard 16:1976 (I FHS er det forbudt at medbringe en harmonika, der ikke overholder ISO-standarden.
Jeg vil jo gerne have alle overtoner med. Men de fleste instrumenter laver ikke så meget energi i det helt høje område, det er mere stød og slag-lyde (f.eks. når man klapper hænder), at man kommer derop.
Der er et forhold mellem frekvens og tid, jo nøjagtiger man vil bestemme en frekvens, jo længere tid har man brug for. Men når vi arbejder med musik, har vi ikke tid til at bruge al den tid som er nødvendig.
Derfor er spektraet kun på 512 linier. Da samplefrekvensen er 48kHz, dækker de 512 linier op til 24 kHz, det giver ca 46,9 Hz per bånd og er jo meget unøjagtigt når man skal bestemme tone-frekvenser
(For eksempel afstanden mellem G3 og G#3 er kun 207,65-196,00 = 11,65 Hz)
Der findes så et lille trick: I forvejen bruges det der hedder en vindue funktion, som man skal bruge for at lave fornuftig FFT. Vindue funtionen gør at der "lækker" lidt energi over i de bånd, der ligger til hver side, og med højden af disse bånd kan frekvensen bestemmes ganske nøjagtigt. (indenfor mindre end en Hertz)
Her under ses de toner jeg bruger til detectionen. Jeg bruger 45 cent fra centertonen (freq. til max, og lige så meget fra freq. til min. )
Her er formelen skrevet i programerings sproget Python for at finde centerfrkevensen iploc, og amplituden ipmag (Programeringssproget Python er blevet meget populært til ML, det er opkaldt efter Monty Python)
Jeg vil som udgangspunkt ikke beskrive koden her. Men jeg synes at den funktion inRange jeg fandt på Stackoverflow var så "sød" at jeg lige har taget den med her
(ligesom ovenstående Python-kode er god, da Python er mere forståeligt at læse en f.eks. JavaScript. Når jeg vil lave ML til browser vil jeg dog bruge TensorFlow for JavaScript, da dette kører direkte i browseren.
Jeg måler ikke kun frekvens men også amplitude, og når jeg går alle de "peaks" altså spidser, jeg har samlet op igennem, så lægger jeg dem sammen i den 12 toners array, og dog, jeg har lavet en trettende tone som jeg kalder "c" for ikke at kalde den 0, der jo svarer til "c"
( "Confused: You wont be after the next episode of : Ole explains his progragram" )
Denne trettende tone (programmører starter jo altid at tælle 0 med det har visse fordele. bruger jeg til når jeg ikke fandt noget).
Da jeg i nøglen kun har forskellige toner, skal jeg "kun" finde når tonen skifter. Der er dog lige når tonen holder op at der kommer lidt tilfældige toner ind i rækken, de skal så lige sorteres fra, før jeg får et brugbart resultat, og kan søge efter melodierne.
Der vil stadig være fejl i tonerækkefølgen, og jeg vil stadig kunne finde flere melodier som har de samme 7 toner i rækkefølgen, Dette gør, at man ikke altid finder den rigtige melodi med det samme.
Jeg vil ikke påtage mig at forklare hvad "Markow-modeller" er , bare at det er nemmere end AI, og at det jeg har lavet højst sandynligt er en Markow modell.
Hvor jeg først finder tonerne, med en hvis sandsynlighed for at det er den rigtige tone, når jeg så har fundet 7 toner, så søger jeg i en database af toner, som jeg har lavet. Det er ikke en rigtig database, men en tekstfil hvor hver tone har fået et tal. Da jeg har valgt, at kun søge efter 12 toner, bruger jeg Hex tallene
0,1,2,3,4,5,6,7,8,9,a,b. Hvor 0 er tonen C, 1 er C# osv. og b er tonen H. Du kan se sidste søgestreng, på billedet 9a97972. Det er ikke sikkert at denne er rigtig, men 7 toner søger jeg igen med 7 ny toner. De syv toner kan godt gå igen mange af vores sange, og du kan se tallet efter hver sang (nøgle) hvor mange gange hver sang er fundet.
På billedet herunder har jeg åbnet søgefilen og et program har skrevet tonerækkefølgend ind som tal fra 1 til 9 og så a og b. For at gøre det nemmere er gentagne toner kortet ned til en tone. Det er også nemmere at søge efter 12 toner, i stedet for alle de ca 36 toner man kunne tænke sig vi spiller. Der er også problemer med at toner i forskellige oktaver ligner hinanden, fløjter spiller oktaven over, og harmonikaen kan godt finde på, at spille oktaven under osv. osv.
Det mest sandsynlige er, at man til sidst finder den melodi man faktiskt spiller. Det er ren Markow eller måske kan man kalle det "plain vanilla JavaScript" som det hedder efter programør chargonen når man laver (client) Web-programmering uden andre hjælpemidler.
For at gøre sangene nemmere for systemet at finde smider jeg ens toner væk, i det jeg leder efter, så skal man kun finde når tonen ændrer sig. Man kunne sikkert lede efter takten, det gør jeg ikke. Husk, der kommer et nyt spektrum ca. 50 gange i sekundet. Og hver syvende tone jeg finder skal jeg lede igennem alle 3100 melodier i samlingen. Lige i øjeblikket bruger jeg en fil, der ikke indeholder reperterede toner, men har triller med. (fremover vil jeg tage trillerne væk, det kan lade sig gøre ved at tge toner som er kortere end 70.
Efter at man har lavet de første 8 unikke toner, begynder man at efter hver 4 tone lede efter de sidste 8 toner.
Det vil sige at man leder de 3000 melodier igennem ca 10 gange i sekundet.
Hvis din IPad "hakker" lidt i det er det måske på tide at ønske en ny (og hurtigere) i julegave, hvis du vel og mærke har brug for dette program. (Fremover er det nok, at der er en i gruppen der har en IPad.
Der kan godt være fejl i tonerækkefølgen
Billedet viser den "originale søgestreng" nederst, det vil sige de toner som systemet har fundet for hver spektrum måling.
Det ses at for enden hver tone (eller måske er det i begyndelsen) indsniger der sig nogle fejl, så består af tilfældige toner
Disse bliver sorteret fra. Ovenover står soegestreng, som er den filtererede søgestreng.
Øverst den søgestreng fra den pågældene melodi (den kender jeg jo godt, for jeg ved jo hvilken fil jeg spileler, men - jeg lover - jeg "snyder" ellers ikke med denne information.
Selv om der ikke er fejl i tone række følgen, finder jeg mange melodier, fordi de indeholder den samme 7 toners tonerækkefølge.
Nederst ser man så at den "rigtige node har fået "fleste points", idet den er blevet fundet 170 gange.
En cent er i musikteorien en hundrede dels halv tone. Systemet arbejder i øjeblikket med 45 cents nøjagtig hed. Det vil sige, at en tone der ligger fra 428,7 Hz til 451.6 Hz vil blive karrekteresieret som et A.
Der er 12 koder for toner 0 =C, 1= C#, 2 =D, osv.......9=A, a=Bb og b=H, koden c er en fejlkode.
Det kan virke lidt ulogisk, men det er den nemmeste måde at regne tonerne ud på denne måde.
Vi bruger melodi koder for at identfiere en melodi i samlingen. Melodikoderne er unikke. Det er titlerne ikke
De er opbygget af den 2 bokstavers kode for dansen
en= engelska, fa=fannik og sønderhoning, ha= hambo, ho=hopsa, kr=kreds og fællesdanse mg=march og gånglåt, mz=mazurka, tu=turdans, pk=polka, po=polska, ta=tango, tr=trekanter, va=vals, xx=andre danse osv.
Hvis der er danske eller svenske bogstaver i titlen bliver disse erstattet med z-er z ={æ, ä} , zz={ø,ö} og zzz=å.
Vi viser koderne dels af den melodi der spilles. (Den kender vi jo, men jeg lover, at jeg ikke fortæller resten af systemet hvad der spilles, Det ville jo være snyd, og ødelæggende for testen !!)
men ogs å de mleodier der bliver fundet.
Det er meningen at systemet en gang skal kunne bruges når hele orkesteret spiller og man tænder for IPadens mikrofon. Det kan man ikke. Der er for mange lyde fra harmonika, bas og guitar, der forstyrrer.
Det er muligt at vi med ML/AI kan lave et system en gang, der kan. Her er et system, der virker (en gang imellem) når man spiller orkester. Det består af en trådløs elektrisk violin, der sender ind i et lydkort til computer.
Det ville være godtnok, hvis man havde en Bluetooth violin, men sådane nogen findes nok ikke. For man kan ikke bruge Bluetooth live, der er for stor forsinkelse (latency). Jeg har testet dette system både til øveaften og til hytteturen i Solborgen.
Jo jeg kunne godt finde noderne, men ikke hver gang. Så der er et stykke igen. Det viser sig, at det er nemmere at finde komplicerede melodier end "nemme" melodier. Formentlig fordi de komplicerede melodier har specielle tonegange som ikke så nemt forveksles.
Jeg har mest tiltro til at virke er dette system, som består af min gamle El-violin (som jeg købte af min første Jazz-violin lærer Ole (Bas) Christiansen fra Theis Nygaards)
Forforstærker fra Stringamp (Michael Edinger). Boss WL 20 wireless system. Læg mærke til det korte kabel, som gør at Boss WL 20 ikke sender støj ind i Stringamp forforstærkeren.
(eller måske er det omvendt) Audient ID 4 lydkort som kan kobles ind til min mac. Det gode ved Stringamp systemet er, at det tager den bløde lyd fra strengene kun, ingen mikrofon, der tager andre instrumenter med.
Lone (der spiller på Cajon) kom med et forslag, som egentlig er ret interessant: Kunne man få Prikken til at vandre i noden.
Det nemmeste er selvfølgelig at downloade Musescore filen, og afspille denne i Musescore som kan downloades og installere.
Dette gælder kun for de noder der har SVG billeder. Du kan se at det drejer sig om, at det er et SVG billed, ved at billedet er meget tydeligt.
SVG er et s.k. vektorformat, det vil sige at lige så meget man forstørrer, så er det stadig skarpt. Før sommeren 1917 brugte vi Musikator software, til at lave noder Her kunne vi også lave vektorformat, men vi kunne kun bruge det til at lave PDF-filer med.
Der er lavet ca. 800 noder det vil sige ca 1/3 af noderne i SVG format. Vi kan godt lave de andre noder om til SVG format, men så bliver det uden akkorder, repriser og bindebuer, triller osv.
På vores specielle træf CD-afspiller-side, vil vi hendvise til disse noder (Det kræver lige at vi laver navnene om, dette er p.t. kun lavet i 1998,1999,2008, og 2012 mappen)
Som udgangspunkt kan man klikke på noden, så bliver den rød, og der kommer nogle informationer op i vinduet for neden.
Hvis man trykker på på Primitiv "Spil" demo, her vandrer prikken igennem noderne.
Dog vil den betragte dobbelt tonen som to toner og starte med den nedderste, og dobbelt-slag tager den efter noden. Alt dette gør den fordi den bare følger rækkefølgen.
Du kan se hvordan en SVG er bygget op ved at klikke på Se SVG koden (pk-jenslyngses.txt)
I firkanten nedenundr kan du se den kode, som er i filen, og som man skal forstå, for at kunne få det hele til at virke. (specielt omkring gentagelsestegn og volder)
Jeg vil estimere det som omkring 4 ugers arbejde altså ca. 160 timers arbejde. Men det er jo så nemt at foreslå: "Ka' du ikke lave dette Ole?"
Alternativet, at downloade Musescore og den tilhørende fil vil tage brugeren 1/2 time at komme igang, og så måske 2 minutter hver gang.
Hvad rød vandrende node også kan bruges til:
Et vigtigt moment i at komme videre med machine learning er at vide nøjagtig hvornår en node afspilles, sådan at der kan "trænes" på dette.
Det kan være at vi kan bruge "den røde prik" til dette.