Toon posts:

[DSP] Volume van een sample berekenen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zat te twijfelen of dit topic in AV of PW moest, maar het leek me dat er hier meer mensen rondlopen die veel van de werking van geluid weten. Ik ben bezig met een programmaatje dat Winamp info laat zien, en ik wil er een VU meter bijmaken. Ik heb het inmiddels voor elkaar dat ik samples digitale audio binnenkrijg (momenteel steeds 256 samples van een 11khz stream), maar nu moet ik dus zo'n set samples omzetten in een VU meter. Het algorithme dat ik zelf bedacht had berekent hoever het geluid gemiddeld van de '0-lijn' afzit, maar dit werkt verre van ideaal.
Ik heb al het halve Internet afgezocht naar een oplossing, en ik zie overal berekeningen om echo's en pitch shifting enzo te doen, maar zoiets simpels als een VU meter staat nergens.
Alvast bedankt :)

  • Harrie
  • Registratie: November 2000
  • Laatst online: 08:55

Harrie

NederVlaming

Wat ik zou doen, is de samples in het kwadraat doen, en deze middelen over de laatste halve seconde ofzo. Dit is een maat voor het vermogen in het signaal, gedurende die laatste halve sec. Dit netjes op een logaritmische as voor je VU-meter en je bent klaar.

edit: halve seconde is misschien wat lang, probeer wat minder.. bijv 0,1 sec.

[ Voor 16% gewijzigd door Harrie op 25-02-2004 15:20 ]


  • Henk007
  • Registratie: December 2003
  • Laatst online: 06-04-2025
Als je het helemaal perfect wil doen zou je je eens moeten verdiepen in het ReplayGain projekt van o.a. David Robinson. Hier vind je veel informatie over de waargenomen geluidssterkte als funktie van de frequentie en de energie van een signaal. Als voorbeeld zou je de sourcecode van WaveGain kunnen bestuderen om een idee te krijgen hoe het werkt. Als je de frequentieafhankelijkheid achterwege wil laten kun je je beperken tot een average RMS waarde (link)

  • hilbren
  • Registratie: Augustus 2000
  • Laatst online: 02-08 18:13
dsp hebben we pa op school gehad:
voor een vu meter heb je een lowpass filter nodig, die kun je maken door een aantal waarde van de vorige samples te bewaren en daar het gemiddelde van te nemen, en bij een vu meter wil je natuurlijk alleen maar positieve waardes dus de negatieve moet je dan even inverteren.

  • TheLemon
  • Registratie: Augustus 2001
  • Laatst online: 01-07 13:56

TheLemon

daddy cool, crazy like a fool

Dit is precies wat een rms-waarde doet: Root Mean Square, oftewel de wortel uit de gemiddelde kwadraten. Door het kwadrateren (Square) haal je alle negatieve waarden eruit, dan neem je van een x-aantal samples het gemiddelde (Mean) en vervolgens neem je daar de wortel van (Root), om de waarden weer binnen de juiste schaal te krijgen.
Om de hoeveel samples je dat het beste doet weet ik niet. Je zou een aantal 'refresh-rates' kunnen pakken en dan kiezen. Voor een refreshrate van 5x per seconde moet je dan bijv. bij een samplerate van 44.1KHz de rms-berekening doen van 8820 samples. Dan kun je nog kiezen om het links en rechts apart te doen en daar weer het gemiddelde van nemen of apart weergeven.

Voor een 'peak'-meter moet je eigenlijk de hoogste sample uit een groep van (laten we weer ff zeggen) 8820 samples pakken en die gebruiken (wederom ff absolute waarde pakken).

Verwijderd

Topicstarter
Ik heb het eens met de RMS methode geprobeerd, en die werkt redelijk, maar ik kreeg betere resultaten door gewoon het verschil tussen maximumwaarde en minimumwaarde van de sample te berekenen (staat in de laatste link van Henk007).
Resultaat ervan kun je hier bekijken (WMV filmpje).
Bedankt allemaal :*
Pagina: 1