Arduino step sequencer
De flesta step sequencers på instructables m.m har som ett atari punk console ljud medan den här har ett annorlunda ljud samt två potentiometrar per step.
Den övre raden vred verkar inte vara kopplade till stegen under dem, utan styr globala parametrar som tempo, filterfrekvens och -resonans. Det mesta som går att göra med en 303 verkar finnas på plats.
Den övre raden vred verkar inte vara kopplade till stegen under dem, utan styr globala parametrar som tempo, filterfrekvens och -resonans. Det mesta som går att göra med en 303 verkar finnas på plats.
Vad menar du med 303? Hur kan jag få ljudet från videon?
Vad menar du med 303?
<sur gubbe>Ungarna av idag och deras allmänbildning...</sur gubbe>
Roland TB-303! En synt med inbyggd sextonstegs sequencer. Byggd för att låta som en elbas, men om man lastade på fullt med de få effekter den hade så lät den som ett gummiband spänt över en plastbytta eller en laserpistol. Och så föddes acid house.
Hur kan jag få ljudet från videon?
Du behöver bygga en enkel subtraktiv synt. Den består av några olika delar, men utifrån vad jag hörde i videon verkar den bara bestå av:
En vågformsgenerator som på något sätt kan styras från Arduinon. Den ska vräka ur sig ett fett övertonsspektra, inte bara en ren sinusvåg. Det går att göra en hyggligt bra vågformsgenerator i mjukvara. Vågformsgeneratorn ska kunna generera frekvenser motsvarande de toner du vill kunna spela, samt övertoner.
Lågpassfilter med ställbar brytfrekvens. Lågpass = bara frekvenser under brytfrekvensen kommer ut ur filtret. Jag har ingen aning om hur man gör, men det ska även gå att få filtret att ha en resonans, som förstärker frekvenser just vid brytfrekvensen.
[QUOTE=Hieronymus Bosch;15066645]<sur gubbe>Ungarna av idag och deras allmänbildning...</sur gubbe>
Roland TB-303! En synt med inbyggd sextonstegs sequencer. Byggd för att låta som en elbas, men om man lastade på fullt med de få effekter den hade så lät den som ett gummiband spänt över en plastbytta eller en laserpistol. Och så föddes acid house.
Du behöver bygga en enkel subtraktiv synt. Den består av några olika delar, men utifrån vad jag hörde i videon verkar den bara bestå av:
En vågformsgenerator som på något sätt kan styras från Arduinon. Den ska vräka ur sig ett fett övertonsspektra, inte bara en ren sinusvåg. Det går att göra en hyggligt bra vågformsgenerator i mjukvara. Vågformsgeneratorn ska kunna generera frekvenser motsvarande de toner du vill kunna spela, samt övertoner.
Lågpassfilter med ställbar brytfrekvens. Lågpass = bara frekvenser under brytfrekvensen kommer ut ur filtret. Jag har ingen aning om hur man gör, men det ska även gå att få filtret att ha en resonans, som förstärker frekvenser just vid brytfrekvensen.
[/QUOTE]
Ok jag inser nu att detta är för komplicerat för mig
Ok jag inser nu att detta är för komplicerat för mig
Cheer up, det här går att fixa i mjukvara.
Jag hittade den här vågformsgeneratorn som är byggd på ett sätt som vi kan missbruka: Den beskriver vågformer med hjälp av tabeller som beräknas i förväg. De tabeller som ingår i exemplet är
Ren sinus
Ren triangel
Ren sågtand
Ren fyrkantvåg
Kolla till exempel på tabellen för fyrkantvåg:
{
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
}
Först kommer det hexadecimala värdet 0xfff (som motsvarar 4095 i vårt gamla tråkiga decimala talsystem) sextio gånger, sedan kommer värdet 0x0 (som motsvarar 0. Förstås.) lika många gånger.
Programmet jag länkade till skickar ut värdena i tabellen i tur och ordning till en ADC, som omvandlar värdet till en spänning. Full spruta (4095) motsvarar +5V, värdet noll motsvarar noll volt. Arduinon kan reglera vilken ton som spelas genom att göra olika långa uppehåll mellan varje värde som skickas till ADCn. Om uppehållet mellan värden är 19 mikrosekunder (19 miljondels sekunder) så kommer det att ta 19*120=2280 mikrosekunder att harva igenom tabellen. På en sekund kommer den att hinna spela upp vågformen 1000000/2280 gånger, vilket blir ca 438 Hz. Som motsvarar tonen A.
Fyrkantvåg är bra, den innehåller en massa övertoner. Tyvärr lite för många udda övertoner, vilket ger ett argt men inte fett ljud.
Om vi skulle lägga till en jämn överton, säg, 1 oktav ovanför grundtonen skulle det nog låta ballare.
En höjning med en oktav motsvarar en fördubbling av frekvensen. En tabell enligt ovan med dubbelt så hög frekvens skulle alltså se ut så här:
{
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
}
See? Den ursprungliga vågformen var först hög, sedan låg. Den nya vågformen växlar dubbelt så snabbt mellan hög och låg.
Återstår bara att blanda vågformerna innan vi stoppar in dem i Arduinon. Arduinon kan bara spela upp en vågform i taget.
Jag kan tänka mig att vågformerna egentligen inte ska blandas 50%/50% för att låta allra bäst, men det blir enkelt att räkna då. Så vi tar helt enkelt medelvärdet av de bägge vågformerna för varje plats i tabellen.
De tre första raderna är lätta - i bägge vågformerna är värdet 0xfff, så medelvärdet blir ...0xfff!
De tre följande raderna är 0xfff i originaltabellen, men 0x0 i övertonstabellen. Medelvärdet blir (0xfff + 0x0)/2 = 0x7ff
Nästa grupp om tre rader är bakochfram, jämfört med förra gruppen: 0x0 i originalet, 0xfff i övertonen. Samma slutresultat, dock: 0x7ff.
Sista treradersgruppen är 0x0 i bägge vågformerna. 0x0.
Så:
{
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff,
0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff,
0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff,
0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff,
0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff,
0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
}
Så. Sitt nu uppe halva natten och hitta på blandningar av vågformer och övertoner tills det låter tufft.
[QUOTE=Hieronymus Bosch;15067047]Cheer up, det här går att fixa i mjukvara.
Jag hittade den här vågformsgeneratorn som är byggd på ett sätt som vi kan missbruka: Den beskriver vågformer med hjälp av tabeller som beräknas i förväg. De tabeller som ingår i exemplet är
Ren sinus
Ren triangel
Ren sågtand
Ren fyrkantvåg
Kolla till exempel på tabellen för fyrkantvåg:
{
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
}
Först kommer det hexadecimala värdet 0xfff (som motsvarar 4095 i vårt gamla tråkiga decimala talsystem) sextio gånger, sedan kommer värdet 0x0 (som motsvarar 0. Förstås.) lika många gånger.
Programmet jag länkade till skickar ut värdena i tabellen i tur och ordning till en ADC, som omvandlar värdet till en spänning. Full spruta (4095) motsvarar +5V, värdet noll motsvarar noll volt. Arduinon kan reglera vilken ton som spelas genom att göra olika långa uppehåll mellan varje värde som skickas till ADCn. Om uppehållet mellan värden är 19 mikrosekunder (19 miljondels sekunder) så kommer det att ta 19*120=2280 mikrosekunder att harva igenom tabellen. På en sekund kommer den att hinna spela upp vågformen 1000000/2280 gånger, vilket blir ca 438 Hz. Som motsvarar tonen A.
Fyrkantvåg är bra, den innehåller en massa övertoner. Tyvärr lite för många udda övertoner, vilket ger ett argt men inte fett ljud.
Om vi skulle lägga till en jämn överton, säg, 1 oktav ovanför grundtonen skulle det nog låta ballare.
En höjning med en oktav motsvarar en fördubbling av frekvensen. En tabell enligt ovan med dubbelt så hög frekvens skulle alltså se ut så här:
{
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
}
See? Den ursprungliga vågformen var först hög, sedan låg. Den nya vågformen växlar dubbelt så snabbt mellan hög och låg.
Återstår bara att blanda vågformerna innan vi stoppar in dem i Arduinon. Arduinon kan bara spela upp en vågform i taget.
Jag kan tänka mig att vågformerna egentligen inte ska blandas 50%/50% för att låta allra bäst, men det blir enkelt att räkna då. Så vi tar helt enkelt medelvärdet av de bägge vågformerna för varje plats i tabellen.
De tre första raderna är lätta - i bägge vågformerna är värdet 0xfff, så medelvärdet blir ...0xfff!
De tre följande raderna är 0xfff i originaltabellen, men 0x0 i övertonstabellen. Medelvärdet blir (0xfff + 0x0)/2 = 0x7ff
Nästa grupp om tre rader är bakochfram, jämfört med förra gruppen: 0x0 i originalet, 0xfff i övertonen. Samma slutresultat, dock: 0x7ff.
Sista treradersgruppen är 0x0 i bägge vågformerna. 0x0.
Så:
{
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff,
0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff,
0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff,
0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff,
0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff,
0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff, 0x7ff,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
}
Så. Sitt nu uppe halva natten och hitta på blandningar av vågformer och övertoner tills det låter tufft.[/QUOTE]
Wow tack så mycket för din detaljerade förklaring, men jag tror fortfarande att detta är utom min räckvidd
- Idag Datorhallar åker på miljardstor skattesmäll – ljög om att utvinna krypto 37
- Idag Veckans fråga: Möss eller ljud – Vad lägger du mest pengar på? 61
- Igår X kan råda bot på bottar med betallösning 34
- Igår Blizzards tidigare chef vill kunna dricksa spelutvecklare 95
- Igår Youtube attackerar appar med reklamfritt Youtube 81
- Här är systemkraven för Ghost of Tsushima till PC17
- Visa ditt tangentbord-tråden5282
- OBD2 scanner fungerar ej till V703
- Vad lyssnar du på just nu?13814
- Datorn vägrar starta specifikt i Windows 10.0
- Bli ett RGB-Pro med Razers nya musmatta för 1 100 kronor9
- Samlingstråd för roliga länkar, filmer och bilder2158
- Snabbkoll: Använder du HDMI eller Displayport till skärmen?90
- Bild på din bil-tråden5227
- 5g Uppladdningshastigheter - era erfarenheter?1
- Köpes CPU Köpes - 5800X3D / 5700X3D / 13600K/KF
- Säljes Intressekoll: Asus ROG RTX 3080 Ti Strix OC
- Säljes Projektor - Hitachi CP-DH300
- Säljes 4090 RTX TUF ASUS OG OC 24GB
- Säljes Raspberry Pi 4 Model B 8GB + Cooler Master Raspberry Pi 4 Case 40
- Köpes På jakt efter en lite äldre prisvärd ultrabook-dator
- Säljes ASUS 15,6" ZenScreen MB169C+
- Säljes Stativ - Velbon C600
- Säljes Acer 34" Predator X34GS IPS 21:9 Curved 180 Hz
- Säljes GoPro HERO10 Black
- Här är systemkraven för Ghost of Tsushima till PC17
- Välj rätt TV för ljusa rummet6
- Bli ett RGB-Pro med Razers nya musmatta för 1 100 kronor9
- Datorhallar åker på miljardstor skattesmäll – ljög om att utvinna krypto37
- Veckans fråga: Möss eller ljud – Vad lägger du mest pengar på?61
- Western Digital slår lagringsrekord med SD-kort på 4TB28
- Asus lanserar 8K-skärm med Mini LED32
- Forskare sätter Antarktis på Pokémon-kartan14
- X kan råda bot på bottar med betallösning34
- Blizzards tidigare chef vill kunna dricksa spelutvecklare95
Externa nyheter
Spelnyheter från FZ
- 70 % av utvecklarna oroliga över live service-spelens hållbarhet idag
- Vad är viktigast när du väljer gamingskärm? idag
- Säsong två av Fallout får deathclaws och annat Fallout-"ikoniskt" idag
- Nier: Automata-man tycker Stellar Blade är "mycket bättre" än hans spel idag
- Nintendo håller indieshow – med Hollow Knight: Silksong-datum!? idag