Floppykoret er et musikalsk kor som hovedsakelig består av diskettstasjoner. Diskettstasjoner er gamle bjeffende monstere som en gang i prehistorisk tid ble brukt til dataoverføring. Som oftest endte bruken opp med en bunke ødelagte disketter, tapte filer og mye banning. Pang!ene kan påstå at alt var mye bedre før, men... Uansett! Vendepunktet kom da man oppdaget av diskettstasjoner kan bli temmet til å synge i kor, og det er nettop dette artikkelen handler om.

Spesifikasjoner

  • Modulært system med spesialbygde racks. Rackene trenger strøm, og det er en UART linje som kobles mellom rackene.
  • Hvilket rack som er siste i rekken autodetekteres, så lenge første i rekken er dekoderen, er alt fint.
  • En dekoder (ATMega168) som tolker MIDI (holder rede på volum og sånt) og sender ting videre i et format masterene forstår.
  • En master (ATMega168) per rack. Denne tolker kommandoer, og styrer sitt eget sett med 10 tonegeneratorer.
  • En tonegenerator (ATTiny84) med eget lite kretskort per diskettstasjon. Disse er koblet med en felles buss, og separate /SELECT-linjer.

Diskettstasjon

Diskettstasjoner stammer fra en tid hvor datamaskiner ikke var like spreke som i dag, og hvor hardwaren måtte gjøre mye av arbeidet. Å snakke med en diskettstasjon er dermed ganske simpelt, siden den allerede inneholder en del smarts (blant annet en stepper-motor driver og kontroll-logikk). For å få en musikalsk diskettstasjon er det i hovedsak tre eller fire IO linjer på 34-pinns kontakten man trenger å bruke: /STEP, DIRECTION, og /DIVE_ENABLE. Noen stasjoner trenger også /MOTOR aktiv for å kunne steppe. En ting å notere er at de fleste stasjoner begynner å slite når man nærmer seg ca 500Hz, så det er ikke så veldig brett musikalsk register på disse. Man har som regel ca tre brukbare oktaver.

Flere diskettstasjoner lager i bunn og grunn veldig lite lyd. Dette er løst ved å lime inn en mutter i hver stasjon, slik at kraften i stepper-motoren overføres til hele kassen til diskettstasjonen. Dette fører forsåvidt også til at man aldri når spor 0, og dette har mange stasjoner et seriøst problem med. En stasjon som derimot fungerer ganske bra med dette trikset, er Sony MPF-920 (ofte markert E/131 eller tilsvarende, og det er verdt å nevne at denne modellen ble produsert av noen andre før Sony overtok produksjonen på slutten av 90-tallet). Denne modellen er en av de siste diskettstasjonene som gikk ut av produksjon, og er dermed relativt lett å få tak i sammenlignet med andre modeller.

Tonegenerator

Tonegeneratoreme styres via synkron serieport, på samme måte som SPI med /Slave-Select (bare at man ikke bruker MISO). Alle tonegeneratorne har felles klokkekilde fra masteren, 16MHz, og bruker hver sin 16-bit teller i fast-PWM modus for å steppe diskettstasjonene med riktig frekvens. Det er ikke mange kommandoer å sende til tonegeneratorene, bortset fra "spill MIDI tone nr x" eller "stopp tone". På sikt er det tanke å legge inn støtte for pitchbend. Masteren kan også trigge et interrupt for å få alle stasjonene til å slutte å spille samtidig, og det er to ekstra ubrukte IO-pinner som er ført mellom alle kortene men som ikke er i bruk.

Master

Masteren tar inn data over UART (56 000 baud, 8b1), og sender note-on/note-off kommandoer videre til tonegeneratorene. Det er derfor viktig at den holder rede på hvilken tonegenerator som er i bruk på hvilke MIDI kanaler. Hvis alle tonegeneratorene på en master allerede spiller toner fra før, vil nye toner sendes videre til neste master over UART. Unntaket er hvis det er siste master i kjeden, hvor masteren gjør en prioritering om man enten bytter ut tonen med kortest levetid, den eldste spillende tonen, eller om man rett og slett ikke skal sette i gang en ny tone. Hvilket rack som er sist i rekken autodetekteres etter alle masterene har mottatt en dedikert kommando (selve deteksjonen gjøres ved at Tx blir satt til input med pull-up, og Rx blir satt til lav output. Serieport-kabelen mellom to rack inneholder derfor også en 510 Ohm seriemotstand for å begrense strømmen når man går inn og ut av autodeteksjons-modus).

Det er verd å notere at selv om kommandoene til Master er i høyeste grad basert på MIDI, så er det noen forskjeller. Velocity er for eksempel tolket som "timeout", og ganges med 5ms for å få lengden den ene tonegeneratoren skal spille. En timeout på 0 betyr at tonen skal holdes helt til tilsvarende note-off kommer.

Dekoder

Dekoderen har en USB-til-UART modul (56 000 baud, 8b1) og har som oppgave å tolke MIDI, for så å evaluere hvor mange tonegeneratorer som skal startes for en inkommende MIDI-tone (basert på velocity og kanalvolum). Den holder også styr på noen kontrollparametere, som kanalvolum og mute. På sikt er det også ønskelig om dekoderen kan ta inn MIDI via en MIDI-kontakt. Høyden på attacket leses ellers fra en roterende enkoder, noe som gir litt fleksibilitet når det kommer til musikalsk bruk. Lite attack gjør at det er plass til mer sustain, noe som fører til generellt sett kraftigere lyd, mens mer attack fører til svakere men mer artikulert lyd. Man ønsker i alle tilfeller å ha volumet (MIDI Kontroller 7) satt akurat høyt nok til at alle stasjonene er i bruk for det meste, men man ønsker ikke å sette det høyere for det fører til at toner overkjøres i det siste racket.

Bruksanvisning

Den letteste måten å bruke floppykoret på, er å bruke en MIDI-spiller på PC, hvor det er mulig å velge MIDI-port for avspilling. For å få MIDI ut på en serieport, må man også ha en virtuell MIDI-port driver og verktøy for å sende MIDI ut over en standard serieport.

Hardware

  1. Sett opp rackene.
  2. Koble en ATX PC-strømforsyning til alle rackene.
  3. Ta av topplokkene og skru fast Tx fra ett rack til Rx på neste rack (legg merke til at det er hull i siden av racket hvor denne kabelen kan tres gjennom).
  4. Sett på igjen lokkene og skru på strømforsyningen.
  5. Koble til datamaskin med en Micro-USB kabel.

Software

  1. Kjør LoopMIDI (må installeres hvis det ikke er installert fra før)
  2. Lag en ny virtuell MIDI-port
  3. Kjør "Hairless MIDI ↔ Serial Bridge" (hairless-midiserial.exe)
  4. Velg den virtuelle MIDI-porten fra steg 2 for MIDI-in (OBS. pass på at MIDI-out er "Not Connected")
  5. Sjekk i instillingene at den er satt til 56000 Baud, 8 bits, 1 stop bit (ingen paritet eller noe annet)
  6. Velg serieporten Floppykoret er koblet til.
  7. Kjør "vanBasco's Karaoke Player" (vmidi.exe)
  8. Åpne "Setup..." (Alt+S) og velg den virtuelle MIDI-porten fra steg 2.
  9. Lukk/Åpne de undervinduene i programmet du måtte ønske (sørg blant annet for at "Control"-vinduet er åpent, ellers er "Playlist" og "MIDI-output" grei å ha også)
  10. Spill av MIDI-filer!

Tips

  • Maks volum er med vilje satt til å være veldig mye, for at man heller skal kunne skru opp hvis en MIDI-fil har få/svake toner. De fleste filer funker greit rundt 50-60.
  • Noen MIDI-filer høres bedre ut en oktav opp eller ned, eksperimenter med transpose (under "Control") i avspilleren.
  • Eksperimenter litt med volume (under "Control") og attack (skruknapp på det første racket). Høy attack er godt egnet for live-spilling eller MIDI filer hvor det ikke er så mange toner som spilles, mens lav attatck er egnet for sanger hvor artikulasjon ikke er viktig. For de fleste melodier er en mellomting bra, om det bare er "1" eller "2".
  • Stacatto-modus er mulig hvis du setter volumet til 0 og attack enten til velocity-based eller static.

Troubleshooting

  • Hvis ingen ting spiller, sørg for at MIDI-filen spiller noe som ikke er perkusjon eller effekter, at Hairless mottar MIDI-data og at serieporten til floppykoret er riktig valgt/konfigurert i Hairless. Sjekk også at rackene har strøm. Eventuelt prøv å trykk på reset-knappen på dekoderen og vent et par sekunder (den er i det første racket).
  • Hvis ikke alle rackene spiller, sørg for at volumet er satt høyt nok i avspilleren, at seriekablene er riktig koblet mellom rackene, og eventuellt trykk på reset-knappen på dekoderen og vent et par sekunder hvis det er helt klart at ting ikke blir sendt videre til neste rack (dekoderen er i det første racket).
  • Er lyden for mørk/lys? Da kan man transponere opp/ned i "Control" vinduet i avspilleren.
  • Makser spillbare toner ut, slik at toner blir avbrutt før de er ferdig å spille? Skru ned volumet i "Control" vinduet i avspilleren.
  • Drukner detaljer i lange toner? Prøv å skru på en litt mer aggresiv attack med skruknappen på det første racket (husk å juster volum etterpå også).
  • Er lyden for svak? Prøv å skru opp volumet i avspilleren. Eventuellt velg en mindre aggressiv attack hvis det trengs (skruknapp på det første racket), eller skru av utvalgte MIDI-spor i avspillerens "MIDI-output" vindu (røde knapper).
  • Brukes andre MIDI-kannaler enn kanal 10 til atonale effekter? Skru dem av i avspillerens "MIDI-output" vindu (røde knapper).


Alle filene som trengs, sammen med en del midi filer, ligger tilgjengelig på GIT.

Versjoner

Første versjon ble produsert sommeren 2017, og brukte ATTiny85 som tonegenerator. Denne hadde en ulempe med at man måtte bruke internoscillatoren siden pinnene trengtes til andre ting, og internoscillatoren til en ATTiny85 er veldig temperaturavhengig og blir fort ustemt. Den hadde også først bare 10 diskettstasjoner, ingen velocity eller envelope, og ingen resonanskasse/horn. Sommeren 2018 ble denne utvidet til 20 stasjoner og meget grov velocity, men man slet fremdeles med at den ikke kunne spille sterkt nok.

Sommeren 2019 ble hele designet revidert, og versjon 2 ble laget nesten helt fra scratch, basert på ATTiny84 istedenfor ATTiny85. Denne har flere IO-porter, som sørger for at man får skikkelig /Slave-Select og at alle tonegeneratorene kan få felles klokke fra krystall. Den har også en 16-bits timer, som gjør at man slipper å utvide en 8-bits timer i software. Andre ting som ble forbedret inkluderer enkle horn/resonanskasser og 30 stasjoner totalt. Det ble også lagt til støtte for Decay-Suistain envelope og kanal-volum.

Ser man fremmover, hadde det vært fint med støtte for pitchbend og en hardware MIDI-port som går rett inn i dekoderen. Om man finner flere passende stasjoner så er det også nok kretskort til overs for å lage et rack til.

  • No labels