[QT] Renderen audiografische editor

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • LauPro
  • Registratie: Augustus 2001
  • Laatst online: 17-09 19:09

LauPro

Prof Mierenneuke®

Topicstarter
Voor een projectje ben ik bezig om een soort van editor te maken welke werkt op basis van een geluidsspoor. Op dit spoor moeten 'keyframes' kunnen worden gelegd. Deze keyframes kunnen ook weer over meerdere sporen worden gelegd. Globaal overzicht:

• Geluidsspoor links
• Geluidsspoor recht
• Keyframespoor 1
• Keyframespoor 2
• Keyframespoor 3
• Keyframespoor 4

Maximaal 16 geluidssporen en maximaal 32 keyframesporen.

De lengte van een audiofragment kan een aantal uur zijn in theorie, voorlopig beperk ik mij tot een uur. Dit wil zeggen dat ik dus in ieder geval een waveform moet inlezen van dit betreffende geluidsspoor. Wat ik nu eigenlijk doe is de Wave (PCM16LE Stereo) in ieder geval in zijn geheel inlezen in het geheugen (3 minuten is ongeveer 22 MB).

Echter dan kom ik op het renderen van het geheel. Meest eenvoudige is om een scrollbar naast dit alles te leggen en de inhoud van de betreffende widgets met een offset te laten verplaatsen tov de data die ze in zich hebben.

Wat ik nu had gemaakt is dat ik de wave in zijn geheel in een QPixmap stop. Echter deze QPixmaps hebben een limiet per OS kwam ik achter, namelijk 32768x32768. Daarna is de QPixmap niet valid meer en wordt hij in zijn geheel niet meer getekend zonder waarschuwing of iets :F .

Ik moet nog benchmarken of het niet sneller is om de Waveforms gewoon direct te tekenen binnen het bereik van het venster. Maar ik heb wel gemerkt dat als je de scrollbar mee laat lopen met muziek dat dit aardig wat cpu gaat vreten. Het cachen met QPixmaps is dan een must.

Eigenlijk kom ik tot de conclusie dat ik niet moet werken met QWidgets die bijvoorbeeld 13.000.000 pixels breed zijn (een volledige waveform van 3 minuten). Intern kan QT het wel aan, echter er valt niets mee te renderen.

Wat is nou wijsheid. Werken met een offset en alle tekenacties in eigen hand houden of de vlakken echt met QWidgets laten vullen. Iets zegt mij dat als ik met Waveforms van een uur ga werken QT de afmetingen niet trekt.

Maar anno 2011 zijn er dus eigenlijk geen toolkits waarmee je zoiets dergelijks kan degelijk kan renderen?

Inkoopacties - HENK terug! - Megabit
It is a war here, so be a general!


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik snap 't probleem niet; zo'n waveform is sowieso maar een "indicatie" of "representatie" van een shitload aan data. Het is niet alsof men per sample de amplitude gaat lopen lezen in zo'n "grafiek". Zo'n ding hoef je dan ook maar eenmalig te plotten (en op "100%" zoom is dat dus gewoon een gemiddelde van het aantal samples binnen die pixel) op een 'canvas' dat hooguit de breedte van je viewport breed is. Als je wil gaan scrollen kun je die canvas als "buffer" voor een sliding window gebruiken door gewoon de 'canvas' steeds te verleggen.

Enige keer wanneer je de waveform opnieuw moet tekenen op een canvas is wanneer je het zoomlevel verandert of wanneer de canvas buitenbeeld gaat voor een nieuwe "ronde".

Als je het goed doet heb je maar eens in de zoveel tijd een nieuwe "plot" van (een deel van) de waveform. De rest van de tijd doe je niets anders dan de canvas(sen) t.o.v. je viewport verplaatsen. In 't ergste geval heb je dus een plot van viewport-breedte pixels. Hoeveel samples die pixels representeren hangt af van 't "zoomniveau". Als je een abstractielaagje maakt die de waveform voor een deel teruggeeft (het deel dat je wil hebben; lees: vanaf een bepaalde offset) waarbij rekening wordt gehouden met het "zoomniveau" en de breedte van je viewport dan maak je 't jezelf wel heel makkelijk. Intern hoeft dat ding alleen maar gemiddeldes te berekenen "per pixel" en dat in een array te mikken.

[ Voor 55% gewijzigd door RobIII op 06-09-2011 10:30 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • LauPro
  • Registratie: Augustus 2001
  • Laatst online: 17-09 19:09

LauPro

Prof Mierenneuke®

Topicstarter
Ik snap het principe van de sliding window. Dit gebruik ik nu ook. Echter vroeg ik mij af of er geen betere alternatieven zijn.

Verder is het scalen enzo niet echt een probleem maar het gaat mij eigenlijk vooral op het renderen op de viewport.

Inkoopacties - HENK terug! - Megabit
It is a war here, so be a general!


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Je zou eens kunnen kijken of QWT er iets voor heeft http://qwt.sourceforge.net/