Här är boken vi alla har gått och väntat på. Passa på medan boken finns att få. Det kommer att bli en klassiker!

Jag har justerat en billig kinesisk fiol under ca. två års tid men det känns som om effekten av de justeringar jag gör blir allt mindre samtidigt som fiolen fortfarande saknar den tonfärg jag vill ha. Fiolen har aldrig öppnats tidigare men det har varit fullständigt klart att både lock och botten har varit relativt tjocka vilket kan ge ett relativt skarpt (skrikigt?) ljud.
Innan den inre slipningen påbörjades saknade fiolen i stort sett bas d.v.s. den var väldigt ”torr” på G-strängen och mätning av fourierspektret visade att fiolen nästan helt saknade de låga grundtonerna på G-strängen. Situationen kan förbättras genom att från insidan slipa halskanalen mellan basbjälken och halsklossen. det visade sig dock att tonen förbättrades till en viss gräns efter vilken inga hörbara förbättringar erhölls. Situationen var densamma för andra kända justeringspunkter vilka erfarenhetsmässigt har visat sig förbättra tonen på de övriga strängarna. Tonen blev bättre men det gick inte att komma vidare.
Jag beslöt idag (21.5.2020) att ta loss locket och mäta fiolens plattor och naturligtvis efter detta graduera om plattorna så att de i mån av möjlighet motsvarar kartor över plattornas tjocklek för Guarnieri fioler.
Jag använde en vass kniv till att rispa hål i lacket mellan lock och sarg. Det gäller att gå försiktigt till väga så att kniven inte slinter och resultatet blir en ful repa. Jag använde därefter en tunn spatel sannolikt använd av någon tandläkare för årtionden sedan för att ta mig genom limfogen för att börja bryta upp den. Lim använda på fioler är mycket hårda och samtidigt spröda vilket betyder att man i allmänhet kan bryta upp limfogen mellan sarg och lock utan betydande skador på varken lock eller sarg.
Borttagningen gick problemfritt förutom att jag lyckades åsatadkomma två korta sprickor uppe bredvid halsen då jag lossade locket från halsklossen. Sprickorna limmades genast och de kommer knappast att ge några problem.
Den nedre sadeln, över vilken senan för stränghållaren löper, togs bort. Jag uppfattar att sadeln som är gjord i Ebenholz är aningen för lång vilket kan ge upphov till sprickor i locket senare om sadeln inte får något mera utrymme.
Jag mätte lock och botten med en mekanisk tjockleksmätare med en uppskattad mätnoggrannhet på kanske 0,05 mm.
Resultatet kan ses i bilden nedan.
Notera ”halskanalen till vänster d.v.s. området mellan basbjälkens övre ända och halsklossen. Slipning här förbättrar basreponsen till en viss gräns. Risken då man slipar här är att det behandlade området är väldigt litet vilket gör att man slipar rätt snabbt och i detta fall slipade jag hål i locket! Hålet fixades genom att svagt limma ett ”frimärke” på en magnet som fördes till det skadade stället och limmades fast. Inget mera slipande här!
Genomslipning med magnet. Den bruna lappen limmades från insidan utan att fiolen öppnades. Notera sprickan från halsurtaget ner förbi mätpunkten 2.35. Sprickan var lätt att reparera och den ger knappast framtida problem. En annan spricka som inte syns går ner från halsurtaget mot ändan av basbjälken.
Vad har jag lärt mig av mätningen?
Mätningen visar att jag lätt slipar över alltför begränsade områden vilket minskar effekten av slipning och i värsta fall ger upphov till skador. Den första uppskattningen att fiolen hade tjocka plattor och sannolikt av den orsaken efter provspelning hos tillverkaren slumpades bort billigt stämde helt. Ett sätt att uppskatta plattornas tjocklek utan tjockleksmätning och öppning av fiolen är naturligtvis att väga instrumentet utan hakstöd. Spelbar men utan hakstöd väger fiolen i den här artikeln ca. 430g. Fiolkropp utan stränghållare och stall ca. 400g. En intressant diskussionstråd om en violins vikt hittar man här.
Bottenplattan mättes med samma tjockleksmätare som locket. Eftersom jag lämnade kvar greppbrädan så är åtkomsten till bottenplattan begränsad d.v.s. antalet mätpunkter är ganska litet.
Jag noterar att mitten av bottenplattan är tjock något man idag uppfattar vara en fördel. Däremot finns det områden som jag skulle vilja ha betydligt tunnare. Mera om detta senare. Fiolen marknadsfördes som en Guarneri ”Cannone” som är känd för att ha tjocka plattor.
Områden jag planerar att göra tunnare är skuggade med snedstreck.
Jag ”sicklar” eller skall man kalla det skrapar locket tunnare. Jag uppfattar att jag har bättre kontroll över en liten kniv jag skrapar med (jag skär inte!) än med en konventionell sickel. Om åtkomsten är dålig kan jag använda att håljärn på motsvarande sätt.
Skulle jag göra omgradueringen helt renlärigt så skulle jag ta bort basbjälken och lägga i en ny efter tjockleksjusteringen. Jag uppfattar inte att byte av basbjälken skulle ha gett något egentligt mervärde. Jag tar bort tiondels millimetrar vilket jag uppfattar att det inte påverkar basbjälken i någon betydande grad.
Det vore helt möjligt att fylla skadan vid ändan av basbjälken med nytt trä men jag är intresserad av att höra ljudet efter justering med detta specifika område kraftigt slipat. Om fiolen blir omöjlig att ljudmässigt få att fungera så blir jag tvungen att öppna den igen senare. Tiden får utvisa om detta blir nödvändigt.
Notera att jag i mån av möjlighet eliminerar ”valkar” mellan olika områden. Snabba tjockleksförändringar reflekterar sannolikt vibrationer i locket och är således oönskade. Jag gör f-hålens vingar något tunnare men lämnar en liten justermån så att jag kan stämma dem i ett senare skede. Stämning av f-hålens vingar sker genom att göra vingen tunnare d.v.s. jag vill inte i onödan göra någon vinge för tunn.
Bilden visar situationen efter ett första varv där jag har gjort locket tunnare. De gråa områdena är fortfarande för tjocka och behöver göras något tunnare. Det är skäl att gå fram i små steg och mäta ofta eftersom det är svårt att backa om man gör något område för tunt.
Bottenplattan justerades på samma sätt som locket genom skrapning. Det största problemet var att det med min tjockleksmätare är rätt mycket pillande för att mäta bottenplattan medan sargerna är på plats.
Knackning före och efter justering visade att bottenplattan klingade mycket mera melodiskt efter justeringen. Botten var ställvis mycket tjock på vissa ställen vilket förhindrar det från att svänga korrekt.
För hoplimning behövs ett antal tvingar som jämnt pressar locket mot sargen. Det finns olika varianter och bilden visar det system jag använder.
Det är skäl att inte vänta alltför länge med hoplimningen eftersom resultatet annars kan bli att sargerna ändrar form vilket kan ge problem med att hitta korrekt läge för locket. Vissa byggare borrar ett litet hål genom locket till den nedre klossen. Man kan då använda en styrtapp som styr locket till rätt läge. Styrtappen är i praktiken helt osynlig då den ligger under stränghållaren. I föreliggande fall uppfattade jag att jag inte behövde någon styrtapp eftersom jag hade instrumentet öppet endast några timmar. Jag noterade dock vid losstagningen av locket hur lockets mittlimfog låg i förhållande till ändklossen. Hoplimningen var problemfri.
Det är skäl att genast med hjälp av t.ex. vaddpinnar doppade i vatten avlägsna allt utflödande lim innan limmet stelnar eftersom putsning av limfogen senare annars blir ett stort jobb.
Jag använde en tjocklekskarta med tjocklek som ett medeltal för många kända Guarnieri-fioler. Att kopiera en specifik fiols tjocklekskarta är ingen garanti för ett bra ljud men man bör komma i ett relativt bra läge för framtida efterjusteringar. Mätningar av specifika fioler visar rätt stora variationer i tjocklek och ofta också osymmetri. Den karta jag använde är från Simeon Chambers (2009). Kartan stämmer rätt bra överens med dokumenterade tjocklekar från andra källor.
Artikel om ‘VIEUXTEMPS’ GUARNERI ‘DEL GESÙ’.
Exempel på tjocklek i lock (källa http://www.platetuning.org) José Contreras violin från 1767.
Exempel på tjocklek i botten.
Min personliga uppfattning är att man idag ofta gör lock och botten alltför tjocka. Orsaken till detta vet jag inte då det finns rätt mycket mätningar av instrument som man uppfattar att klingar väl och som har relativt tunna plattor. Det är också välkänt att överdrivet tjocka plattor i allmänhet inte uppfattas ge ett speciellt fint ljud (det finns undantag t.ex. Guarneri ”Cannon”). Är orsaken till dagens tjocka plattor att man då undviker vargtoner, som jag uppfattar beror på överdrivna alltför kraftiga resonanser. Å andra sidan så strävar jag efter ett instrument som har kraftiga svängningar utan att det går över styr d.v.s. jag försöker optimera instrumentet som en Formel 1 bild där musikern måste ha yrkeskunskap för att hantera vissa specifika situationer.
Landet är nedstängt till följd av Coronaepodemin. Vårt spelmanslag har inte spelat ihop på flera veckor … vi är naturligtvis laglydiga medborgare men det må vara tillåtet att som finnens säger ”purna” eller på svenska svära över situationen.
Jag har i tidigare artiklar skrivit om hur vi försöker hålla igång verksamheten trots att det inte går att samlas för att spela. Vi försöker spela in låtar på distans så att någon startar projektet genom att skapa ett bottenspår till vilket var och en hemma kan utarbeta ett eget spår som sedan kan mixas ihop med bottenspåret … bottenspåret kan naturligtvis falla bort under processen då det inte längre behövs.
Låten nedan (som fanns också i den föregående artikeln) har alltså skapats utan att personerna som har gjort låten över huvudtaget har träffats fysiskt. Det skulle naturligtvis ha varit trevligare att träffas för att jamma i grupp men eventuellt är Coronametoden mera produktiv då det blir kvar ett hörbart resultat.
Sverige och Finland hanterar Coronaepidemin på olika sätt. Vi har i Finland haft en betydligt striktare nedstängning av samhället än Sverige. Tiden får utvisa vilken linje som var bättre. Min personliga gissning är att Sveriges val i detta fall antagligen totalt sett är bättre eftersom samhällsskadorna sannolikt blir mindre än skadorna av att stänga ner samhället.
Hur är det då med ”riskgruppen”? Jag finns inte ännu själv i riskgruppen men åldersmässigt är jag nära gränsen. Det blir intressant att analysera Coronaepidemin efter ett år då man fått in tillräckligt med data om det verkliga utfallet. Kommer man t.ex. att överhuvudtaget kunna se någon signifikant förändring i den totala dödligheten eller leder Coronaepidemin till att de gamlingar som redan såg Liemannen vinka på nära håll beslöt att ge sig iväg några dagar tidigare än vad som annars skulle ha varit fallet?
Nedanstående Coronatiders råa blues är en fullständigt politiskt inkorrekt låt men som jag som 67-åring kanske har rätt att skriva och sjunga.
Hur stor del av dödsfallen i riskgruppen är en direkt följd av en extremt omfattande användning av statiner i riskgruppen. Man vet att kolesterol har en stor betydelse direkt och indirekt för vårt immunförsvar. Plötslig död i hjärtstopp kan vara en följd av att produktionen av Q10 blockeras av statiner. D-vitamin uppfattas spela en viktig roll i immunförsvaret. För att bilda D-vitamin behövs solljus … och kolesterol.
Världen har i många år gått och väntat på den stora ekonomiska recessionen. En värld där centralbanken lånar pengar till negativ ränta är garanterat sjuk. Är Coronaepidemin nu syndabocken som man entusiastiskt tar emot för att rensa bokföringen och skinna den vanliga befolkningen?
Hur kommer det nu att gå för den tidigare skrämselkampanjen d.v.s. klimathysterin där en positiv svag uppvärmning under många år i media har presenterats som ett existentiellt hot mot människosläktet. Absurditeten kan lätt ses då man uppskattar att uppvärmningen skall vara störst i norr. Av någon outgrundlig anledning så går de nordiska semesterresorna fortfarande söderut och inte i riktning Svalbard i norr!
I den första delen av den här artikelserien diskuterade olika inspelningsprogram för Windows, Mac och Linux. Eftersom det finns Mac-användare i spelmanslaget så verkar GarageBand vara ett möjligt relativt enkelt program som kunde användas för utspridd inspelning av olika låtar så att de olika medlemmarna i spelmanslaget spelar in olika spår som sedan kombineras.
En känd begränsning som GarageBand har är att det är möjligt att importera MIDI till GarageBand men programmet tillåter inte export av MIDI. Ett problem är då att det kan vara besvärligare att modifiera existerande bas- och andra slingor i programmet än om man använde ett annat program bättre lämpat för just detta ändamål.
Programmet GarageBand hanterar internt MIDI men exporterar inte spår eller delar av spår som midi. Detta är sannolikt ett medvetet marknadsföringsval.
GarageBand är ett gratisprogram som kan laddas ner från Apple store. Till programmet kan dessutom laddas ner ett rätt stort paket med ljud för Midi-instrument och låtslingor. Totalt bortåt 15GB färdiga ljud och slingor finns tillgängliga utan kostnad. Trots att det finns mängder av slingor så hör en stor del till kategorin ”pop” vilket inte är speciellt intressant för ett spelmanslag som spelar traditionell, främst nordisk, folkmusik. Nya slingor, som passar bättre till folkmusik, borde alltså skapas. GarageBands oförmåga att exportera slingor som MIDI-filer gör att det är svårare att ”stjäla” och modifiera existerande slingor. Modifikation av en MIDI-fil kan rätt enkelt göras i MuseScore som är ett notskriftsprogram med öppen källkod d.v.s. ”gratis”. Orsaken till att export av MIDI saknas är sannolikt att GarageBand har en storebror med i princip samma användargränssnitt men med utökad funktionalitet bl.a. export av MIDI. Storebror heter Logic Pro som naturligtvis klarar av att exportera MIDI-filer.
Bilden visar utt urklipp från GarageBand där jag har importerat en sekvens grundackord från MuseScore i form av en MIDI-fil. Jag har i GarageBand klippt spåret i fyra delar (ackorden C, F, G och slutackord C). Antag nu t.ex. att jag vill ha tillgång till motsvarande eventuellt något modifierade slingor också i tretakt (vanligt i nordisk folkmusik) och i de vanligaste tonarterna C-, G-, D-, A-dur … I MuseScore har jag bra kontroll över transponering och kan enkelt lägga till rytmfigurer. Att modifiera melodislingor eller MIDI track i GarageBand kan göras men det är jobbigare än att använda en noteditor.
MIDI-export kan trots begränsningen i GarageBand göras rätt enkelt genom att utgå från GarageBands melodislingor (loop) som är lagrade i filer av typen .aif . Då man Googlar på detta filformat så hittar man t.ex. följande information:
En AIFF fil är uppdelad på ett antal block (chunk). Varje block idetifieras genom ett block ID (chunk ID) som som kallas FourCC. FourCC har sina rötter i Amiga datorns (i saligt minne) filformat. FourCC är en unik serie på fyra tecken som identifierar innehållet i ett block. Det MIDI-block vi plockar ut ur .aif filen börjar med teckensekvensen ‘MHdr’.
En AIFF fil kan innehålla följande blocktyper:
Vi ser att filen innehåller ljuddata (okomprimerad i princip .WAV) samt en hel del annan information. Det vi är intresserade av ligger nära slutet d.v.s. vi hittar ett MIDI-datablock.
Vi googlar vidare och hittar en beskrivning på hur en MIDI-fil är uppbyggd. MIDI-blocket börjar med rubriken ‘MHdr’ och MIDI-blocket avslutas med ‘CHS’. För att en MIDI-fil skall kunna läsas in i ett program behövs ytterligare kodsekvensen ’00’, ‘FF’, ‘2F’ och ’00’ som hexadecimala tal. Sekvensen anger att MIDI-filen är slut.
För att plocka ut MIDI ur en GarageBand .aif fil behöver vi alltså skriva ett program som läser .aif-filen och söker efter ‘MHdr’ samt ‘CHS’. Om dessa markörer hittas så skrivs hela området mellan makörerna (inklusive markörerna) till en fil som avslutas med kodsekvensen ’00’, ‘FF’, ‘2F’ och ’00’ (notera att sekvensen bestå av en Amiga fourCC kod). Ett enkelt program i t.ex. programmeringsspråket Python med denna funktionalitet kan hackas ihop mycket snabbt men det måste då köras i en terminal från kommandoraden. För att programmet skall se ut som en normal Mac applikation så måste det ha ett matchande grafiskt användargränssnitt.
Konversionsverktyget GbConverter skrivet i Lazarus (Pascal).
Programmeringsprojektet inleds genom att projektet namnges i vårt fall GbConverter. Då projektet skapas så väljer man samtidigt vilket bibliotek som används vid bygge av användargränssnittet. Jag använder det nyare Cocoa eftersom nyare versioner av macOs kommer att använda Cocoa vilket bör ge längre livslängd på programmet eftersom den gamla varianten långsamt fasas ut då nyare versioner av operativsystemet lanseras.
Jag startar Lazarus (Version 2.0.6) som jag tidigare hade installerat, installationen hör inte till denna artikelserie. Projektet är GbConverter.
Jag börjar med att fundera ut vilka grundkomponenter, fönster och fönsterkomponenter, jag behöver. Jag identifierar följande komponenter:
Jag behöver ett fönster som beskriver programmet. Detta fönster kopplas till den standardmenu som skall finnas på varje programs Menurad överst på skärmen då programmet kör och är aktivt.
I den här versionen av programmet öppnar jag ett separat fönster för val av fil som skall konverteras. Detta görs som ett experiment för att se hur kommunikation mellan fönster kan göras. I en senare version av programmet plockar jag antagligen bort detta fönster eftersom en filvalsdialog lika väl kan anropas direkt från huvudfönstret.
Lazarus programmeringsomgivning där de tre fönstren har ritats upp med hjälp av en fönstereditor. Dessa fönster och komponenterna i fönstren kommer att generera tre pascal källkodsfiler unit1_GbConverter, Unit1 samt Unit2. Då fönstren + komponenterna skapas så skapas samtidigt skelettkod i ovanstående moduler (unit1_GbConverter, Unit1 samt Unit2). Det är nu programmerarens uppgift att skriva kod inne i de färdiga tomma procedurer som skapats. Ett enkelt exempel:
Knappen <Set up ‘mid’ destination> skall hämta namnet på den katalog till vilken den utplockade MIDI-filen skall skrivas. Detta hanteras så att då man klickar <Set up ‘mid’ destination> så förstår programmet automatiskt att det skall anropa proceduren (skelettet):
procedure TForm1.Button3Click(Sender: TObject); Begin end;
Jag öppnar då ett annat fönster som öppnar en fildialog som ger stigen till den katalog jag vill skriva till. Jag behöver lägga till följande:
procedure TForm1.Button3Click(Sender: TObject); Begin Form2.ShowModal; LabeledEdit1.Text := Form2.midPath; end;
Den första raden Form2.ShowModal; öppnar fönster nummer två (Form2). Den andra raden jag skriver LabeledEdit1.Text := Form2.midPath; kopierar text från det nya fönstrets textområde till huvudfönstrets textområde.
På motsvarande sätt fyller jag stegvis i kod i övriga av Lazarus skapade procedurer som jag behöver. Programmet kan hela tiden kompileras och köras men om kod saknas så finns naturligtvis ingen funktionalitet och det kommer i det färdiga programmet att finnas procedurer som har skapats automatiskt men som inte innehåller någon kod och som således är inaktiva. Intresserade läsare kan titta på källkoden till programmet som finns i zip-filen i slutet av artikeln.
Programmet innehåller en enda procedur som utför hela arbetet efter att man har definierat skrivkatalog, filnamn på fil som skall skrivas samt namnet på den fil som skall konverteras.
Koden är följande:
procedure extractMidi(filename:String); var Ms:TMemoryStream; Fs:TFileStream; startMidi,endMidi,endCodeStart:Int64; B : array of Byte; fileSize : Integer; pattern: TPatternArray; begin Form1.Memo1.Lines.Add('Get contents of:'+filename); if not FileExists(filename) then Exit; destPath := Form1.LabeledEdit1.Text; if destPath='' then begin Form2.ShowModal; Form1.LabeledEdit1.Text := Form2.midPath; destPath :=Form2.midPath; Form1.Memo1.Lines.Add('Selected MIDI output destination:'+destPath); end; destFile := Form1.LabeledEdit2.Text; Form1.Memo1.Lines.Add('Set destPath to:'+destPath); Form1.Memo1.Lines.Add('Set destFile to:'+destFile); Form1.Memo1.Lines.Add('Set destFile to:'+destPath+'/'+destFile); if not DirectoryExists(destPath) then begin Form1.Memo1.Lines.Add('Error:'+destPath+' does not exist'); Exit; end; if FileExists(destPath+'/'+destFile) then begin if DeleteFile(destPath+'/'+destFile) then begin Form1.Memo1.Lines.Add('Deleted old version of .mid file'); end else begin Form1.Memo1.Lines.Add('Error: Could not delete old version of .mid file'); end; end; Ms := TMemoryStream.Create; Ms.LoadFromFile(filename); filesize := Ms.Size; try Ms.Position := 0; Form1.Memo1.Lines.Add('Read Loop file.'); Form1.Memo1.Lines.Add('Size='+IntToStr(fileSize)); { Searching for 'MTrk' in the FileStream } pattern := StringToByteArray('MThd'); startMidi := DoSearch(Ms,pattern); { Ensure we continue from 'MThd' forward } Ms.Seek(4,startMidi); pattern := StringToByteArray('CHS'); endMidi := DoSearch(Ms,pattern); Form1.Memo1.Lines.Add('Looked for MIDI start=MThd, res='+IntToStr(startMidi)); Form1.Memo1.Lines.Add('Looked for MIDI end=CHS, res='+IntToStr(endMidi)); if (startMidi>0) and (endMidi>0) then begin Form1.Memo1.Lines.Add('Extract MIDI'); //filePath := ExtractFilePath(filename); Form1.Memo1.Lines.Add('File path:'+destPath); Form1.Memo1.Lines.Add('Output File name:'+destPath+'/'+destFile); Fs := TFileStream.Create(destPath+'/'+ destFile, fmCreate); { Read into temporary buffer } SetLength(B,(endMidi-startMidi + 16)); Ms.Position := startMidi; { We include the start and end codes (4=MTrk)(3=CHS)} Ms.Read(B[0],(endMidi-StartMidi+3)); endCodeStart := endMidi-StartMidi+4; { Add MIDI end of track mark } B[endCodeStart]:= $00; B[endCodeStart+1]:= $FF; B[endCodeStart+2]:= $2F; B[endCodeStart+3]:= $00; { Write Buffer to FileStream } Fs.Write(B[0],(endMidi-StartMidi+3)); Fs.Free; end else begin Form1.Memo1.Lines.Add('Invalid LOOP file, MThd and/or CHS not found.'); Exit; end; finally Ms.Free; end; end;
Programtexten bör vara relativt enkel att läsa. De första ca. 30-raderna är endast kontroll av möjliga fel d.v.s. kontroll att destinationskatalogen finns etc. Om filen som skall konverteras inte finns så ger programmet upp genast. Det egentliga arbetet börjar vid:
Ms.MemoryStream.Create; Ms.LoadFromFile(filename); filesize := Ms.Size;
Vi läser in hela .aif filen i maskinens minne. I mitt testfall är det ungefär 400 000 tecken eftersom aif-filen också innehåller ljuddata (WAV). Alla rader som innehåller Form1.Memo … skriver till informationsfönstret så att man skall kunna se om något går fel. Dessa raders enda funktion är att informera om hur långt vi har kommit i konversionen och dessa rader kunde lämnas bort utan att programmets funktion ändras.
pattern := StringToByteArray('MThd'); startMidi := DoSearch(Ms, pattern);
Vi söker efter strängen som indikerar början på midi blocket.
Ms.Seek(4,startMidi);
Vi ställer en pekare så att vi fortsätter sökandet efter den hittade startpunkten. Det kunde annars, om vi skulle söka efter ‘CHS’ från början av filen, hända att teckenserien vi härnäst söker efter ‘CHS’ kunde tänkas finnas i det redan avsökta området vilket skulle ge fel och eventuellt leda till mycket intressanta bieffekter då det funna blocket skall skrivas till skiva (sannolikt skulle krogrammet krascha och eventuellt skulle maskinen låsa sig). Därefter söker vi slutet på midifilen på motsvarande sätt.
pattern := StringToByteArray('CHS'); endMidi := DoSearch(Ms, pattern);
Om vi har hittat både en startpunkt och en endpunkt så antar vi att det som finns mellan dessa punkter är den MIDI-fil vi vill plocka ut.
Vi läser in MIDI-området i en temporär buffert som jag kallar B och som är tillräckligt lång för att rymma MIDI-filen. Vi skapar en Fil-ström som vi senare använder för att skriva midifilen till skiva.
Fs := TFileStreamCreate(destPath+'/'+destFile);
Vi läser in midi-området i bufferten B innan vi skriver till skiva för vi vill modifiera filen en aning innan vi skriver den. Vi beräknar platsen i bufferten där midi-blocket är slut d.v.s. efter ‘CHS’ men så att ‘CHS’ också skrivs till skiva.
Ms.Read(B[0],(endMidi-startMidi+3); endCodeStart := (endMidi-startMidi+4);
Vi lägger nu till stoppkoden som signalerar till något annat program som läser midifilen att midifilen är slut.
B[endCodeStart] := $00; B[endCodeStart+1] := $FF; B[endCodeStart+2] := $2F; B[endCodeStart+3] := $00;
Slutligen skriver vi resultatet till skiva och är färdiga att börja behandla följande .aif fil.
Fs.Write(B[0],(endMidi-startMidi+8)); Fs.Free
Att söka efter en textsträng i en s.k. binärfil är besvärligare än att söka i en normal textmassa. Sökning i en text kan göras med en mängd färdiga verktyg. Sökning i en binärfil blir mera komplicerad av att vilka tecken som helst kan förekomma också tecken som har specialbetydelse i en vanlig text och som kan få en sökfunktion att tappa bort sig. Sökningen görs med hjälp av en kort sökfunktion :
function DoSearch(Stream: TMemoryStream; Pattern: TPatternArray): Int64; var idx :Integer; begin result := -1; for idx := Stream.Position to Stream.Size - Length(Pattern) do begin if CompareMem(Strem.Memory + idx, @Pattern[0], Length(Pattern)) then exit(idx); end; end;
Wi söker alltså direkt i maskinens centralminne i en kopia på GarageBands aif fil vilket gör sökningen snabb också på en gammal och i princip långsam iMac som den jag har.
Det kan vara kul att titta på kostnaderna för de iMac-ar jag har satt upp för musikprojektet.
Den maskin jag skrivit programmet på är en 21,5 tums iMac från 2009 med 12 GB centralminne och 500 GB SSD hårdskiva. Totalpris ca. 100E efter minnesuppgradering och byte av en urgammal mekanisk hårdskiva som sannolikt sjöng på sista versen till SSD-skiva.
Anders, en god vän kör en 24 tums iMac årsmodell 2007 uppgraderad till maximalt 6GB centralminne med SSD hårdskiva. Pris totalt under 100E efter uppgradering … inköpt för 10E utan hårdskiva.
Det är intressant att notera att då jag inte spelar datorspel så fungerar båda maskinerna utmärkt utan att visa några som helst ålderskrämpor i form av störande tröghet gällande de program jag använder (Garageband, OpenOffice, Vebbläsare och Lazarus).
(Följande artikel beskriver hur det ”hackade” systemet används)
Notera!
Jag har inga kontakter/samarbete med Zubersoft (http://www.zubersoft.com) som har skrivit programmet MobileSheetsPro. Artikeln nedan är inte en betald annons för ifrågavarande program.
————————-
Jag spelar i spelmanslaget Altra Volta som är föreningen Arbetets vänners musikklubb. Vi spelar främst finlandssvensk och nordisk folkmusik med inslag av keltisk musik, irländsk etc.
Vi har medlemmar med spelteknik på alla nivåer börjande från absoluta nybörjare till rätt avancerade spelare med lång erfarenhet. Det faktum att vi har också nybörjare betyder att vi har en egen övningsstil. Vi tenderar att spela samma melodi många gånger (5 – 6 ggr) vilket ger personer som spelar på gehör möjlighet att lära sig nya låtar relativt bekvämt. Personer som läser noter använder noter till en början för att senare, får man hoppas, lära sig låten utantill.
Noter utgör ett problem genom att nothäften med någon speciell repertoar blir rätt dyra om en stor bunt skall köpas. Noter tenderar att ”diffundera” d.v.s. noter lånas och kommer aldrig tillbaka. Om man kopierar upp noter och delar ut lösblad så hamnar man rätt snart i ett lösbladshelvete där noter flyter omkring i en salig blandning och det är svårt att hitta en specifik låt då den behövs. Ett sätt att försöka hantera lösbladshelvetet är att samla ihop noter i egna häften … detta fungerar delvis eftersom häften plockas isär, sidor tappas bort och de med möda skapade häftena diffunderar iväg någonstans till nothäftenas okända begravningsplats.
Ett alternativ till att få ordning på noterna hittade vi då vi nyligen blev tvungna att flytta från vår traditionella övningslokal till en ny plats i samma hus. I det nya övningsutrymmet finns en stor TV-skärm i storleken 50-60 tum. Vi märkte att man kan koppla en minnepinne till TV:n och att TV:N klarade av att hantera jpeg-bilder. Vi hade nu ett bekvämt sätt att visa noter i tillräckligt stort format för att hela gruppen skall kunna använda samma noter. Vi upptäckte att noterna på skärmen eventuellt gav bättre focus eftersom allas intresse var fokuserat i samma riktning.
Fig. 1 Ordning på lösbladshelvetet! Författaren sitter längst ut till höger.
Vi har provat programmet MobileSheetsPro för Androidoperativsystemet och programmet känns logiskt och vettigt att använda. Programmet stöder fotpedal och olika notformat d.v.s. både jpeg-bilder och pdf. Man kan organisera noter i album och skapa spellistor från existerande album. Man kan också söka efter musiktyp, söka på en låts namn etc. MobileSheetsPro kör utan problem i en gammal billig kinesisk surfplatta på tio tum. Plattans pris är ca. 50 E (500 SEK). Plattan har 16 GB internminne vilket räcker för tusentals notblad efter att jag plockade bort alla onödiga applikationer.
Vårt problem blev nu att försöka få MobileSheetsPro kopplat till den stora TV-skärmen. Problemet är att väldigt få läsplattor idag har HDMI-kontakt så att plattans skärm skulle kunna visas på TV-skärmen.
Det slog mig plötsligt att problemet kunde lösas med hjälp av en Raspberry Pi dator. Problemet är dock att programmet vi vill använda inte finns för Raspberry Pi. Vi kunde alltså använda Raspberry Pi som en normal dator och visa noter manuellt på skärmen. Skulle det finnas ett bekvämare sätt?
Fig. 2 En Raspberry Pi är en liten dator som normalt kör Linux på en ARM processor. De flesta mobiltelefoner idag använder närbesläktade ARM processorer varför det borde vara möjligt att köra Android på en Rasbberry Pi.
Första försöket misslyckades och Raspberry Pi startade inte. Man kunde se att processorn via sin LED försökte signalera att någonting hade gått del. Lite Googlande visade att EmteriaOS (Android) kunde vara ett vettigt alternativ.
Det visade sig att det finns en fri testversion av EmteriaOs som utan problem gick att installera på Raspberry Pi. Versionen är tidsbegränsad till åtta timmar varefter systemet stoppar. En licens kostar 19E vilket är överkomligt. Jag har en köpt version av MobileSheetsPro som kostar 15E på Google Play, programmet rekommenderas varmt.
Fig. 3 EmteriaOS Android kör på Raspberry Pi.
Fig. 4 MobileSheetsPro kör på Raspberry Pi.
Det visade sig att programmet fungerar utmärkt på Raspberry Pi. Vi har nu ett lätt hanterbart system för visning av noter på stor skärm som är lätt att administrera, lätt att skriva ut noter om det behövs samt ett system som låter oss skapa program för olika uppträdanden.
Man hittar information om Android på Raspberry Pi på:
https://pimylifeup.com/raspberry-pi-android/
Registrering av Emteria OS:
https://emteria.com (registrering krävs)
Totalpriset på en notvisningsdator för en stor TV-skärm med HDMI-anslutning blir då följande:
Totalt ca. 100 E dock så att nästan alla komponenter fanns i min miljonlåda … jag behövde inte åka iväg kör att köpa någon saknad komponent.
Plats finns för kanske tiotusen sidor noter i extremt kompakt format. Lägger jag till ett SD-minne så finns det plats för hundratusen sidor.
Efter att jag gjorde ovanstående analys av kostnaderna så undersökte jag andra alternativ. Det visar sig att jag kan köpa en motsvarande TV-box med Android operativsystem på Ebay för ca. 19E inklusive transport … så jag beställde ett sådant system men jag får vänta till efter julen på att systemet skall levereras.
Resultatet blir att jag kommer att experimentera med Raspberry Pi alternativet under några veckor medan jag väntar på TV-boxen. Det finns naturligtvis en, mycket liten, risk att programmer MobileSheetsPro inte kan köras på den beställda TV-boxen men jag uppfattar att risken är obetydlig. Jag valde en lite äldre box som kör Android 7.1 eftersom EmteriaOS bygger på samma Androidversion. Det finns TV-boxar som kör t.o.om. Android 9 men jag har lärt mig att det ofta gör ont att vara i absolut första ledet vad gäller dator/program versioner.
Erfarenheterna med MobileSheetsPro är att noter bör samlas på minnepinne sorterade i kataloger enligt något logiskt system. Från minnepinnen kan man sedan enkelt importera en katalog i taget till olika Album d.v.s. logiska ”nothäften” som får samma namn som katalogerna på pinnen. Samma minnepinne kan dupliceras till alla spelmän (spelmanslag spelhen = hönsflock?) och utskrift till papper får skötas av individen.
Då noterna finns nere på TV-boxen kan jag konstruera spellistor d.v.s. repertoar för olika gigs utgående från material i de olika albumen.
Om en spelman dyker upp med ett intressant stycke som det finns noter till så kan jag enkelt lägga in stycket i samlingen genom att med telefonen ta en bild av notbladet och importera bladet till önskat album.
Jag kompletterar artikeln senare med erfarenheter kring hur TV-boxen fungerar ihop med MobileSheetsPro.
MobileSheetsPro finns på Google Play. Programmet är inte gratis, det kostar ca. 15E d.v.s. ca. 150 SEK. För att kunna ladda ner programmet måste man ha skapat ett betalkonto på Google Play. Jag har aldrig haft några problem med betalning via Google Play.
Välj MobileSheetsPro i Google Play och tryck ”Install”. Installationen går på kanske fem minuter. Det kan vara en god idé att ögna igenom programmets rätt omfattande bruksanvisning så att man får en bild av vilken funktionalitet programmet erbjuder. Bruksanvisningen ger också en förklaring till den terminologi som används i användargränssnittet.
A lagrange point in life
Lars Silén: Reflex och Spegling
Lars Silén: Reflex och Spegling
Canadian journalist Donna Laframboise. Former National Post & Toronto Star columnist, past vice president of the Canadian Civil Liberties Association.
Lars Silén: Reflex och Spegling
by Steve McIntyre
Techno bits and mind pleasers
Lars Silén: Reflex och Spegling
The world's most viewed site on global warming and climate change
The TED Blog shares news about TED Talks and TED Conferences.
Lars Silén: Reflex och Spegling