Maken van lichten reageren op Audio (3 / 5 stap)

Stap 3: Software


U vindt de software als Atmel Studio Project op github

Er zijn 2 projecten in deze git. De Basic project omvat alle basisfuncties om te meten en berekenen van de gegevens. Het bevat ook een klasse voor WS2812 LED. De Matrixproject bevat alle gegevens voor mijn project gebaseerd een een 7 x 6 LED-matrix met WS2812 LED. Dit is zeer specifiek, is deze code meer van een inspiratie en voorbeeld voor wat u kunt doen.

Dit deel is de meest complexe van dit project, zoals de software moet doen een heleboel dingen.

Bemonstering van de gegevens

Eerst moet u om de gegevens in de controller. Dit wordt gedaan door het audiosignaal bij een steekproef met een ADC. De sampling-frequentie hangt af van de frequentie-bereik die u wilt werken. Als u genieten van het signaal met een frequentie van 32kHz, die kunt u opnieuw maken signalen tot 16kHz met de Fourier transformatie (FT). Dit is het frequentiebereik, dat we werken willen met.

Te halen zulks werkzaamheden ligt een timer activeren met een frequentie van 32kHz en een waarde afgelezen de ADC telkens wanneer die dit gebeurt. Aangezien de atxmega controller een DMA-controller heeft, wordt dit gebruikt om het proces te automatiseren. DMA (Direct Memory Access) kunt u gegevens verplaatsen van het ene punt in het geheugen naar het andere volledig in hardware. De DMA is ingesteld op een manier dat het beweegt het resultaat van de ADC naar een bepaalde locatie in het RAM-geheugen wanneer het door de timer wordt geactiveerd. We proeven 128 waarden per kanaal.

Snelle Fourier transformatie (FFT)

We gebruiken de elmchan FFT bibliotheek voor dit project.

Meestal een FT gebruikt veel tijd van de berekening, maar u kunt elke frequentie binnen het spectrum van bepaalde signaal opnieuw. De FFT dit proces vereenvoudigt en versnelt het. Het nadeel is, dat geeft geen specifieke frequenties maar beschikbaar te stellen frequentiebanden. Voor de toepassing van dit project is deze gegevens goed genoeg.

Aangezien we 128 waarden proeven, zal de FFT ons 64 resultaten geven. Vanwege de sampling-snelheid (32 kHz) kunnen we opnieuw frequenties tot 16 kHz, die zal worden verdeeld in 64 bands door de FFT. 16000 / 64 = 250. Dit betekent dat elke FFT band beschrijving van het niveau van 250 Hz. FFT band 1 geeft een waarde van 1Hz tot 250Hz, band 2 voor 251Hz tot 500Hz, 3 band voor 501Hz tot 750Hz, enzovoort. Doordat het aantal input monsters kunt u verhogen van deze resolutie, maar ook het verhogen van de berekening van de benodigde tijd.

Deze 64 banden zijn samengevoegd met 7 banden, die worden gebruikt voor de matrix, die een breedte van 7 heeft LED. Sommige effecten zijn nog steeds gebaseerd op de originele 64 bands.

Het algoritme voor het berekenen van de FFT is gecodeerd op een manier dat het niet in één keer alle Berekeningsstappen, maar deze in kleinere stukken splitst. Dit wordt gedaan om de tijd van de controller om te berekenen van andere ding tussen deze stappen. Doet u dit niet, de animaties zal soms stotteren, niet die er goed uitzien.

Het menselijk oor reageert anders op bepaalde frequenties. Het is zeer verstandig tot frequenties rond 4kHz en niet verstandig aan zeer lage en hoge frequenties. In een audio signaal van die de lage frequenties hebben zal een hoge amplitude, die tot hoge FFT resultaten leidt, en lage amplitudes in de middelste frequenties, wat leidt tot lage FFT resultaten. Dit maakt het moeilijk om te doen met berekeningen. Om dit tegen te een zeer eenvoudig systeem voor het omgekeerde a-weging wordt gebruikt. De coëfficiënten zijn vooraf berekend voor elke band en vermenigvuldigd met elk van de 64 FFT-bands.

Beat detectie

Het basisidee achter deze is eenvoudig: het gemiddelde van de kracht van het geluidsniveau. Als het huidige energieniveau veel hoger dan dit gemiddelde is heb je een beat. Om dit te doen behoorlijk zou u wilt genieten van het audiosignaal continu, die we niet doen. Maar we zullen nog steeds gebruik maken van dit idee.

De FFT-resultaten zijn opgesplitst in 3 bands: lage, medium en high. Het gemiddelde van de waarden wordt berekend na verloop van tijd als een zwevend gemiddelde. Als het huidige niveau hoger is dan 50% tot 100% (afhankelijk van de band) van dit gemiddelde wordt dit geëvalueerd als beat. Dit werkt zeer goed met een metronoom, die een eenvoudige geluid produceert, maar werkt ook goed met complexe signalen zoals liedjes. De beat detectie in de onderste band werkt het beste en het midden band het ergste wanneer er zang in het lied.

Wat te doen met die gegevens?
Als voorbeeld zal ik uitleggen hoe het mono spectrum display werkt. Kunt u de code in het volledige project in animations.cpp in de functie void anim_monospektrum_step(). Deze animatie wordt gebruikt in de intro video.

De waarden van de 7 geconsolideerde bands worden als streefwaarden voor de hoogte van de kolommen ingesteld. Het wordt geschaald op een manier, dat deze waarde tussen 0 en 9000 varieert. De doelgroep kleur verschuiving wordt bepaald door de amplitude. De werkelijke waarden, die zal worden gebruikt voor het berekenen van de output, veranderen langzaam hun waarde zodat deze overeenkomt met de streefwaarde. Dit maakt de animatie zeer vloeistof kijken en voorkomt plotselinge sprongen.

De matrix heeft een hoogte van 6 LED. Dit betekent dat elke LED dekt 9000 / 6 = 1500 telt van de werkelijke waarde. Als de werkelijke waarde van een band 1500 is, wordt alleen de LED in de bodem zou oplichten. Als de waarde werd 3000 de twee meest onderste LED zou oplichten. Zo lang de werkelijke waarde is groter dan 1500 we oplichten een meer geleid en aftrekken van 1500 van de waarde. Indien, na dit proces, is de waarde 0, de LED boven de laatste volledige verlichte LED is zo goed verlicht, maar de helderheid wordt geschaald met de waarde. Hoe lager de resterende waarde, hoe lager de helderheid.

Als een extra detail knipperen de banden wanneer een beat binnen deze band wordt gedetecteerd.

Gerelateerde Artikelen

Hoe te maken van led lichten uit auto elektrische werken

Hoe te maken van led lichten uit auto elektrische werken

elk jaar ik een krans op mijn sprintervan.  Heb ik besloten aan het eind van laatste XMAS te kopen van een kunststof krans en postuur uiterlijk te zin op wire led lights in mijn sprinter elektrisch systeem, zodat wanneer de frontschijnwerpers komen o
Maken van een microfoon isolatie doos voor hoge kwaliteit Audio-opname

Maken van een microfoon isolatie doos voor hoge kwaliteit Audio-opname

Dit project is een die ik hard nodig voor mezelf. U zou moeten opmerken dat een grote verbetering in de kwaliteit van mijn opname van nu af aan!Ik verhuisde naar een nieuw huis over een maand geleden nu dat is waarom u zou kunnen een nieuw landschap
Maken van ApplePi, samenvoegen een Vintage Macintosh Plus met de Raspberry Pi

Maken van ApplePi, samenvoegen een Vintage Macintosh Plus met de Raspberry Pi

Als een kind van de late 70 's en de lagere schoolstudent uit de 80 's, heb ik altijd gefascineerd door deze kleine beige en platina dozen en hun kleine schermen van B & W. Een paar popped opwaarts naast de Commodore huisdieren en de Apple] [e's in o
Gebouw kleine Robots: Maken van één kubieke Inch Micro-Sumo Robots en kleinere

Gebouw kleine Robots: Maken van één kubieke Inch Micro-Sumo Robots en kleinere

hier zijn enkele details op het opbouwen van uiterst kleine robots en circuits. Dit instructable zal ook dekking enkele eenvoudige tips en technieken die nuttig zijn bij het opbouwen van robots van elke omvang.Voor mij is een van de grote uitdagingen
Maken van de Arduino aangedreven LED growbox

Maken van de Arduino aangedreven LED growbox

een tijdje geleden merkte ik veel mensen met behulp van de Arduino controller voor allerlei soorten home projects home projecten. Ik wist dat ik gewoon * had * om een te hebben.Nadat ik via de mail ontvangen en het verkennen van de mogelijkheden, het
Het bouwen van de BandBlinker - 120v audio trigger op de goedkoperehotels.

Het bouwen van de BandBlinker - 120v audio trigger op de goedkoperehotels.

Om te helpen complimenten van de BandBlinder, een goedkoop maar goed werkende fase licht kit voor een vriend de band, heb ik ook de BandBlinker, een audio-trigger voor de lichte kit gemaakt met goedkope, gemakkelijk om onderdelen te vinden.Stap 1: Ve
Maken van licht van magnetisme: elektromagnetische inductie & de Bedini Machine

Maken van licht van magnetisme: elektromagnetische inductie & de Bedini Machine

grote ontdekkingen soms door meer dan één persoon tegelijk worden gemaakt. Michael Faraday en Joseph Henry ontdekt de beginselen van elektromagnetische inductie veel tegelijk. Faraday publiceerde de resultaten van zijn werk in 1831, voor Henry, en du
Maken van een paar Audiostrobe-compatibele LED glazen voor gebruik met brainwave entrainment software

Maken van een paar Audiostrobe-compatibele LED glazen voor gebruik met brainwave entrainment software

Audiostrobe glazen worden gebruikt in combinatie met licht en geluid machines, evenals sommige brainwave entrainment software. De glazen hebben LEDs gebouwd in welke puls in synchronisatie met geluid, meestal binaural beats of isochronic tonen. Het l
Laten we het maken van een game controller!

Laten we het maken van een game controller!

Ik hou van vliegende spelen, maar het voelt alsof er nooit genoeg knoppen op mijn joystick.Dit instructable zal u tonen hoe te bouwen uw eigen panel schakelaar in geen tijd.Het zal werken met een spel en de computer die ondersteuning biedt voor een j
Een eenvoudig protocol voor het maken van ijzer (II, III) oxide (magnesiet)

Een eenvoudig protocol voor het maken van ijzer (II, III) oxide (magnesiet)

Hallo.In mijn eerste Instructable, 'm I gonna beschrijven de synthese van ijzer (II, III) oxide (magnesiet).Ijzer (II, III) oxide is een verbinding die Ferrimagnetisme vertoont. Het heeft vele toepassingen en veel van hen zijn beschreven op het Inter
Maken van een iglo van de blok ijs

Maken van een iglo van de blok ijs

We leven in upstate NY, wat betekent dat we zijn gewend aan koude en besneeuwde winters. Deze winter, is echter in tegenstelling tot alle in de recente geschiedenis geweest. We hebben meer dan een maand waar bijna elke dag bracht Sub-Zero temperature
Maken van een Contact microfoon

Maken van een Contact microfoon

Een contact microfoon is een soort microfoon die trillingen van contact met objecten pikt, in tegenstelling de het meer gangbare type microfoon die drukgolven in lucht pikt. Hier is een demo van een contact microfoon aangesloten op een wekker, samen
Maken van een oplaadbare 2 volt aluminium/Titanium Ion accu

Maken van een oplaadbare 2 volt aluminium/Titanium Ion accu

Zie veiligheid opmerkingen hieronder. Dit is niet een te bouwen voor de timide. Alleen bouwen op een goed geventileerde plaats.Na verscheidene jaren van verschillende experimenten kwam ik op een werkbare batterij chemie die licht, veiliger dan lood-e
De wetenschap van het maken van zeep in een Lab

De wetenschap van het maken van zeep in een Lab

Maken van zeep lijkt er niet iets wat je in een laboratorium doen zou, maar het is eigenlijk meer wetenschappelijk dan je zou denken. Verzeping is de zeep besluitvormingsproces, die gebruik maakt van de basisoplossing loog en de verschillende soorten