Analoge geluidssynthese op uw computer: 10 stappen (met afbeeldingen)
Analoge geluidssynthese op uw computer: 10 stappen (met afbeeldingen)
Anonim

Zoals het geluid van die oude analoge synthesizers? Wil je er GRATIS mee spelen in je eigen tijd, op je eigen plek, zo lang als je wilt? Hier komen je wildste Moog-dromen uit. Je kunt een elektronische artiest worden of gewoon coole, trippy geluiden maken om naar te luisteren op je mp3-speler. Alles wat je nodig hebt is een computer! Het wordt allemaal gedaan door de magie van een gratis circuitsimulator genaamd LTSpice. Nu weet ik dat je waarschijnlijk zegt: "Gee willikers, Tyler, ik weet niets over het runnen van een circuitsimulator - dat klinkt HARD!". Maak je geen zorgen, Bunky! Het is gemakkelijk en ik zal je een paar sjablonen geven om mee te beginnen en aan te passen om alle rare geluiden te maken die je maar wilt. Weet je niet zeker of het de moeite waard is? Hier is een link naar een klaar om af te spelen geluidsbestand (het is gemaakt van "composition_1.asc" in stap 7 van dit 'ible) dat je kunt uitproberen. Ik heb het geconverteerd van.wav naar mp3 om de downloadtijd te verkorten. https://www.rehorst.com/mrehorst/instructables/composition_1.mp3Er zit wat lage bas in het geluid dus luister met een koptelefoon of goede speakers. Als je het leuk vindt wat je ziet, stem dan op mij! Opmerking: ik heb schematische bestanden voor LTSpice bijgevoegd die u op uw computer kunt uitvoeren, maar om de een of andere reden worden de namen en extensies gewijzigd wanneer u ze probeert te downloaden. De inhoud van de bestanden ziet er goed uit, dus verander na het downloaden van de bestanden gewoon de namen en extensies en ze zouden moeten werken. De juiste namen en extensies worden weergegeven op de pictogrammen waarop u klikt om te downloaden.

Stap 1: Eerste dingen eerst

LTSpice is een Windows-programma, maar laat dat je niet van de wijs brengen. Het draait prima onder Wine in linux. Ik vermoed dat er geen problemen zijn om het in VMWare-client, VirtualBox of andere virtualisatietools onder linux uit te voeren, en waarschijnlijk ook op Macs. Download een kopie van LTSpice voor Windows (ugh!) hier: https://www.linear.com/ designtools/software/ltspice.jspInstalleer het. Wat is LTSpice? Het is een tijddomein-circuitsimulator die elke elektronicahobbyist zou moeten weten te gebruiken. Ik ga hier geen gedetailleerde tutorial geven over hoe het werkt, maar ik zal een paar dingen uitleggen die je moet weten als we verder gaan. Een woord van waarschuwing: het is gemakkelijk mogelijk om te lage frequenties te produceren of te hoog om te horen. Als je dat doet en je dure luidsprekers aanstuurt met een krachtige versterker, blaas je je luidsprekers/versterker misschien op. Kijk ALTIJD naar de golfvormen voordat u ze afspeelt en beperk voor de zekerheid het volume wanneer u een bestand voor de eerste keer afspeelt. Het is altijd een goed idee om de bestanden via een goedkope koptelefoon op een laag volume af te spelen voordat u luidsprekers probeert.

Stap 2: Invoer

Input voor de simulator is in de vorm van een schematisch diagram. Je selecteert componenten, plaatst ze op het schema en verbindt ze met elkaar. Zodra je circuit compleet is, vertel je de simulator hoe je wilt dat het het circuit simuleert en wat voor soort output je wilt. Bekijk het schema met de naam weerstanden.asc. Je zult zien dat er een circuit is met een spanningsbron, een paar weerstanden, een gelabeld uitgangsknooppunt, een aarde en een tekstopdrachtregel. Laten we ze allemaal bekijken. Dit is een goed moment om het onderstaande circuitbestand te openen. Grond: Dit is de MEEST KRITISCHE component op uw schema. U MOET een aarding hebben die is aangesloten op ten minste één punt op uw circuit, anders krijgt u heel vreemde resultaten van uw simulaties. De spanningsbron: als u een spanning in een circuit plaatst, moet u dit vertellen of het AC of DC is (of iets complexer), wat de spanning is, de "interne weerstand" van de bron, enz. Je kunt die parameters invoeren door met de rechtermuisknop op de bron te klikken. Het enige dat je echt nodig hebt, is de weerstand voor eenvoudige simulaties. Weerstanden: De weerstanden zijn vrij eenvoudig te begrijpen. Klik met de rechtermuisknop om de weerstandswaarde in te stellen. Negeer eventuele andere parameters die zich daar kunnen verbergen. Gelabelde invoer- en uitvoerknooppunten: alleen namen voor knooppunten in het circuit die gebruiksvriendelijk zijn.- gebruik namen als "output", "input", enz. De simulatierichtlijn: de.tran-instructie vertelt de simulator hoe u wilt dat het circuit wordt gesimuleerd. Dit is een tijddomeinsimulator, wat betekent dat hij het circuit op verschillende tijdstippen analyseert. Je moet hem vertellen wat de maximale tijdstap moet zijn en hoe lang de simulatie in "circuit-time" moet lopen, niet in realtime. Als u de simulator vertelt om 10 seconden circuittijd te draaien en u de maximale tijdstap instelt op 0,001 seconden, zal deze het circuit minstens 10.000 keer (10 sec/0,001 sec) analyseren en vervolgens stoppen. Wanneer de simulatie loopt, de spanning op elk knooppunt in het circuit en de stromen in en uit elk knooppunt worden bij elke tijdstap berekend en opgeslagen. Al die informatie zal beschikbaar zijn om te plotten op een display zoals een oscilloscoopscherm (tijd van de horizontale as, spanning of stroom op de verticale as. Als alternatief kunt u de uitvoer ook naar een.wav-audiobestand sturen dat u op een computer, op een cd branden of naar mp3 converteren om op uw mp3-speler af te spelen. Daarover later meer…

Stap 3: Uitgang

Uitvoer kan een grafische plot zijn van spanning versus tijd, spanning versus spanning, enz., of een tekstbestand dat bestaat uit een aantal spanningen of stromen bij elke tijdstap, of een.wav-audiobestand dat we veel gaan gebruiken in dit instructable. Download en open het bestand "resistors.asc". Klik op het symbool van de kleine rennende man (linksboven in het scherm) en het circuit zou moeten lopen. Klik nu op het label "OUT" in het circuit. U ziet de spanning met het label "output" weergegeven op de grafische uitvoer langs een horizontale as die de tijd vertegenwoordigt. Dat is de gemeten spanning ten opzichte van aarde (daarom heb je in elk circuit minimaal één aarde nodig!). Dat is de basis. Probeer een van de weerstandswaarden of de spanning te wijzigen en voer de simulatie opnieuw uit en kijk wat er met de uitgangsspanning gebeurt. Nu weet je hoe je een circuitsimulator moet gebruiken. Makkelijk was het niet?

Stap 4: Nu wat geluid

Open het circuit genaamd "dizzy.asc". Dit is een rare ruismaker die een modulator en een paar spanningsbronnen gebruikt om een audiobestand van CD-kwaliteit (16 bits, 44,1 ksps, 2 kanalen) te produceren waarmee je kunt spelen. De modulatorcomponent is eigenlijk een oscillator. Frequentie en amplitude zijn beide instelbaar zoals een VCO en VCA in een echte analoge synthesizer. De golfvorm is altijd sinusvormig, maar er zijn manieren om het te veranderen - daarover later meer. De frequentielimieten worden ingesteld door de merkteken- en spatieparameters. Mark is de frequentie wanneer de FM-ingangsspanning 1V is en spatie is de frequentie wanneer de FM-ingangsspanning 0V is. De uitgangsfrequentie is een lineaire functie van de FM-ingangsspanning, dus de frequentie ligt halverwege tussen de markerings- en ruimtefrequenties wanneer de FM-ingangsspanning 0,5 V is en zal 2x de markeringsfrequentie zijn wanneer de FM-ingangsspanning 2 V is. modulator kan ook amplitude worden gemoduleerd via de AM-ingangspen. De uitgangsamplitude van de modulator (oscillator) komt overeen met de spanning die wordt toegepast op de AM-spanningsingang. Als u een DC-bron met een spanning van 1 gebruikt, is de uitgangsamplitude 1V (dat betekent dat deze schommelt tussen -1 en +1 V). De modulator heeft twee uitgangen - sinus en cosinus. De golfvormen zijn precies hetzelfde, behalve dat ze 90 graden uit fase zijn. Dit kan leuk zijn voor stereo-audiotoepassingen. Er is een.tran-statement dat de simulator de maximale tijdstap en de duur van de simulatie vertelt. In dit geval is circuittijd (totale simulatietijd) = audiobestandstijd. Dat betekent dat als u de simulatie 10 seconden uitvoert, u een audiobestand krijgt dat 10 seconden lang is. Het.save-statement wordt gebruikt om de hoeveelheid gegevens die de simulator opslaat tijdens het uitvoeren van de simulatie te minimaliseren. Normaal gesproken slaat het de spanningen op elk knooppunt en de stromen in en uit elk onderdeel op. Dat kan VEEL gegevens opleveren als uw circuit ingewikkeld wordt of als u een lange simulatie uitvoert. Wanneer u de simulatie uitvoert, selecteert u gewoon één spanning of stroom uit de lijst in het dialoogvenster en het gegevensbestand (.raw) zal klein zijn en de simulatie zal op maximale snelheid worden uitgevoerd. Ten slotte vertelt de.wave-instructie de simulator om maak een stereo-audiobestand van cd-kwaliteit (16 bits per sample, 44,1 ksps, twee kanalen) door de spanning op "OUTL" in het linkerkanaal en de spanning op "OUTR" in het rechterkanaal te plaatsen. Het.wav-bestand bestaat uit 16-bits samples. Uitvoer op volledige schaal in het.wav-bestand (alle 16 bits in een voorbeeld ingeschakeld) vindt plaats wanneer de uitgangsspanning precies +1 Volt of -1 Volt is. Uw synthesizercircuit moet worden ingesteld om spanningen van niet meer dan +/- 1V naar elk kanaal te genereren, anders wordt de uitvoer in het.wav-bestand "afgeknipt" wanneer de spanning hoger is dan +1 of -1 V. Aangezien we bezig zijn een audiobestand dat wordt gesampled met 44,1 ksps, hebben we de simulator nodig om het circuit minstens 44, 100 keer per seconde te simuleren, dus stellen we de maximale tijdstap in op 1/44, 100 sec of ongeveer 20 microseconden (us).

Stap 5: Andere soorten spanningsbronnen, andere soorten geluiden

Een analoge synthesizer heeft een bron van willekeurige ruis nodig. U kunt ruis genereren met een "gedragsspanningsbron" (bv) en u kunt deze in- en uitschakelen met een "spanningsgestuurde schakelaar" (sw). Het gebruik van de bv-component om ruis te genereren, is het definiëren van de spanning op basis van een formule. De formule voor het genereren van ruis ziet er als volgt uit: V=white(time*X)*Y De white-functie creëert een willekeurige spanning tussen -0,5 en +0,5 V met de huidige tijdswaarde als basis. Door Y in te stellen op 2 krijg je een schommeling van +/- 1V. Instelling X tussen 1.000 (1e3) en 100.000 (1e5) beïnvloedt het spectrum van de ruis en verandert het geluid. Voor de spanningsgestuurde schakelaar moeten ook enkele parameters worden ingesteld in een.model-statement. U kunt meerdere spanningsgestuurde schakelaars en meerdere modelstatements gebruiken om ervoor te zorgen dat elke schakelaar zich anders gedraagt als u dat wilt. Je moet de simulator de "aan" en "uit" weerstanden vertellen en de drempelspanning waarop hij schakelt. Vh is "hysteresespanning". Stel het in op een positieve waarde zoals 0,4 V en er zullen geen klikgeluiden zijn wanneer de schakelaar opent en sluit. >>> Update: hier is een nog eenvoudigere manier om een gated ruisbron te maken - vermenigvuldig gewoon de ruisspanning met een gepulseerde source- zie easy_gated_noise.asc hieronder.

Stap 6: Bells, drums, cimbalen, geplukte snaren

Bellen, drums, cimbalen en tokkelende snaren zijn allemaal percussief. Ze hebben een relatief snelle stijgtijd en een exponentiële vervaltijd. Die zijn eenvoudig te maken met behulp van sinus- en gedragsspanningsbronnen in combinatie met enkele eenvoudige circuits. Bekijk het schema "bell_drum_cymbal_string.asc". De gepulseerde spanningsbronnen met de weerstand, condensator en diode creëren de benodigde snelle stijging en langzame exponentiële vervalgolfvormen. Die uitgangsspanningen moduleren de uitgangen van gedragsbronnen die zijn opgezet als willekeurige ruis- of sinusgolfbronnen. Wanneer de gepulseerde bronspanning stijgt, laadt deze de condensator snel op. De condensator ontlaadt zich dan via de weerstand. De diode zorgt ervoor dat de spanningsbron de condensator niet ontlaadt wanneer de bronspanning nul is. Grotere weerstandswaarden verhogen de ontlaadtijd. U kunt de stijgtijd van de pulserende bron specificeren - het bekken is een nieuwe bron met een zeer snelle stijgtijd. De trommel is ook een geluidsbron die op een lagere frequentie werkt en een langzamere stijgtijd heeft. De bel en snaar gebruiken sinusgolfbronnen die ook door gepulseerde bronnen worden gemoduleerd. De bel werkt op een hogere frequentie en heeft een snellere stijgtijd dan de snaar. Voer de simulatie uit en luister naar het resultaat. Merk op dat de drum in beide kanalen verschijnt, terwijl alle andere geluiden ofwel het rechter- of het linkerkanaal zijn. De twee weerstanden aan de drumuitgang zijn verantwoordelijk voor het overbrengen van het geluid naar beide kanalen.

Stap 7: Alles samenbrengen

OK, nu heb je gezien hoe je wat geluiden kunt maken en hoe je de enveloppen moet vormen en frequentie moduleren. Nu is het tijd om een paar verschillende bronnen samen te voegen in een enkel schema en iets interessants te genereren om naar te luisteren. Hoe krijg je die ruisbron op 33 seconden in de compositie? Hoe zet je die rinkelende bel aan na 16 seconden, zet hem dan uit en zet hem weer aan na 42 seconden? Eén manier is om een gedragsmatige spanningsbron te gebruiken om het gewenste geluid te maken en het vervolgens aan en uit te zetten door de geluidsopwekkende spanning te vermenigvuldigen met een andere spanning die het geluid aan en uit zet, zoals werd gedaan in bell_drum_cymbal_string.asc. Je kunt hetzelfde soort dingen doen om geluiden in en uit te faden. Het idee hier is om herhalende geluiden in te stellen en vervolgens extra bronnen te gebruiken om die geluiden op de gewenste tijden aan je compositie toe te voegen door hun voltages te vermenigvuldigen met de geluidsvoltages. Je kunt zoveel spanningen in de uiteindelijke geluidsuitvoer opnemen als je wilt, blijf ze gewoon vermenigvuldigen (hetzelfde als logische "en") samen. Door de geluiden in één keer op te starten, blijven ze perfect synchroon tijdens de compositie, zodat ze nooit te vroeg of te laat in de muziektijd zijn. Kijk naar compositie_1.asc. Er zijn twee klokken, één in elk kanaal. De pulse_bell-spanningen werken gedurende de hele simulatie, maar de geluiden verschijnen alleen in de output wanneer V(bell_r) en V(bell_l) niet gelijk zijn aan 0.

Stap 8: Exponentiële helling

Update 7/10 - scroll naar beneden Hier is een circuit dat een exponentiële helling genereert die wordt toegepast op een paar ruisbronnen. V1 en V2 genereren lineaire hellingen die beginnen bij 0 en oplopen tot X volt (linkerkanaal) en Y volt (rechterkanaal) in de perioden prd_l en prd_r. B1 en B3 gebruiken een formule om de lineaire hellingen om te zetten in exponentiële hellingen met maximale amplituden van 1V. B2 en B4 genereren willekeurige ruis die in amplitude wordt gemoduleerd door de exponentiële hellingen en door parameters amp_l en amp_r (eenvoudige niveauregeling). Ik heb een mp3-bestand bijgevoegd dat door dit circuit is gegenereerd, zodat u kunt horen hoe het klinkt. U zult waarschijnlijk de naam van het bestand moeten wijzigen om het af te spelen. X en Y stellen de spanningslimieten van de lineaire hellingen in. Uiteindelijk worden de hellingen van beide kanalen geschaald naar 1V, maar door X en Y in te stellen, kunt u de steilheid van de exponentiële helling regelen. Een klein getal zoals 1 geeft een bijna lineaire helling, en een groot getal zoals 10 geeft een zeer steile exponentiële helling. De hellingsperioden worden ingesteld met de parameters prd_l en prd_r. De lineaire stijgtijd van de helling is ingesteld op de prd_l- of prd_r-waarde minus 5 ms en de daaltijd is ingesteld op 5 ms. De lange uitvaltijd voorkomt klikken aan het einde van elke helling omdat de amplitude terugvalt naar nul.out_l en out_r zijn de producten van de op tijd gebaseerde willekeurige ruisspanningen, de exponentiële hellingsspanningen en de parameters amp_l en amp_r. Merk op dat de willekeurige ruiswaarde van het rechterkanaal een ander "zaad" gebruikt dan het linkerkanaal. Dat houdt de ruis in elk kanaal willekeurig en anders dan het andere kanaal. Als u dezelfde seed gebruikt, krijgt u tegelijkertijd dezelfde willekeurige waarde en komt het geluid in het midden terecht in plaats van te worden waargenomen als twee verschillende bronnen, één in elk kanaal. Dit kan een interessant effect zijn om mee te spelen… Update: merk op dat de golfvorm van 0V naar een positieve waarde gaat. Het is beter dat de spanning schommelt tussen gelijke positieve en negatieve waarden. Ik heb het schema herwerkt om precies dat te doen, maar het verhoogde de complexiteit van de vergelijking die de golfvorm een beetje definieert. Download de exponential_ramp_noise.asc (onthoud dat de Instructables-server de naam en extensie zal veranderen wanneer u deze opslaat).

Stap 9: Exponentiële helling toegepast op een sinusgolf

Deze pagina laat zien hoe u de exponentiële helling van de vorige stap kunt gebruiken om een sinusbron te moduleren (eigenlijk sinus en cosinus). De gedragsspanningsbron wordt gebruikt om een lineaire helling om te zetten in een exponentiële helling die de FM-ingang op een modulerende2 component aandrijft. De amplitude wordt gemoduleerd door zowel een snelle exponentiële helling als een langzame sinusgolf. Luister naar het voorbeeldbestand - het klinkt behoorlijk raar.

Stap 10: Suggesties

1) U kunt de totale simulatietijd variëren - houd het kort terwijl u met componenten speelt en wanneer u het gewenste geluid krijgt, stel de simulator dan in op 30 minuten (1800 sec) of hoe lang u maar wilt. Je kunt circuits van de ene pagina naar de andere kopiëren en je kunt subcircuits maken, zodat je kleine circuitmodules met elkaar kunt verbinden, zoals met een patchbord op een echte synthesizer.2) Een CD-samplesnelheid is 44,1 ksps. Als u de maximale tijdstap tot 20 ons houdt, krijgt u een "schone" uitvoer omdat de simulator gegevens beschikbaar heeft voor elk nieuw monster. Als u een kleinere tijdstap gebruikt, zal de simulatie langzaam zijn en heeft deze waarschijnlijk geen effect op het geluid. Als u een langere tijdstap gebruikt, kunt u een alias horen die u misschien wel of niet leuk vindt.3) gebruik de.save-dialoogvensterinstructie op uw schema en wanneer u de simulatie uitvoert en slechts één van de spanningen of stromen selecteert om de grootte van het.raw-bestand klein. Als u geen selectie maakt, worden ALLE spanningen en stromen opgeslagen en wordt het.raw-bestand ZEER groot.4) probeer zeer lage frequenties te gebruiken om hogere frequenties te moduleren5) probeer hogere frequenties te gebruiken om lagere frequenties te moduleren.6) combineer uitgangen van sommige laagfrequente bronnen met enkele hoogfrequente bronnen om dingen interessant te maken.7) gebruik een gepulste spanningsbron om een sinus of andere bron te moduleren om ritme te leveren.8) gebruik analoge circuits om spanningspulsen te vormen tot iets dat u wilt.9) gebruik wiskundige uitdrukkingen om de output van een gedragsspanningsbron te definiëren. Veel plezier!