Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - WaveForm
Forum - C# / VB.NET - WaveForm

Avatar
orma674 (Normal User)
Pro


Messaggi: 66
Iscritto: 02/06/2008

Segnala al moderatore
Postato alle 10:29
Sabato, 08/06/2019
Buongiorno,
qualcuno mi sa aiutare a trovare un metodo per velocizzare il disegno di una waveform.

Attualmente apro il file wav e dopo aver letto i valori dei byte li passo alla classe graphics e poi li visualizzo.

Dim bp as new bitmap(width, height)
dim g as graphics = graphics.fromImage(bp)

dim x1 as int64
dim y1 as int32

for count as int 64 = 0 to data.count -1
dim x2 as int64 = count
dim y2 as int32 = data(count)
g.drawLine(pen.red, x1, y1, x2, y2)
next

picturebox1.image = bp
g.dispose()

Il problema che ho è che una volta costruita la waveform, se io voglio spostare il punto di partenza la deve ricostruire sempre e parlando di grosse quantità di dati, questo genera un rallentamento nella visualizzazione della stessa.

Se qualcuno ha dei suggerimenti su come posso snellire questa procedura.

Io devo implementare lo zoom e lo spostamento.

per lo zoom non vorrei ricorrere alla lettura a step dei dati della waveform ma ad allargare la distanza x tra i punti.

Grazie per l'aiuto.
Marcello


Orma674 by Marcello
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5910
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:22
Sabato, 08/06/2019
Devi usare DirectX. Ovviamente non posso dirti di più in una risposta perché l'argomento è vasto e complesso.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
orma674 (Normal User)
Pro


Messaggi: 66
Iscritto: 02/06/2008

Segnala al moderatore
Postato alle 12:16
Venerdì, 04/10/2019
Ciao, scusa se non ho continuato la discussione ma ho dovuto combattere con un problema più serio.

Riprendendo da dove abbiamo lasciato, ho acquisito i dati con directsound.
Adesso per realizzare il vuMeter per il file 16bit ho addizionato tutti i valori rendendoli positivi e li ho divisi per il numero dei valori addizionati.
Dopo ho convertito il tutto in decibel e verificando il suono in parallelo con un software adobe questo corrisponde in tutto.

Il problema ora mi nasce sul file 8 bit.
Ho preso i byte e li ho trasformati in int16 -> byte - 127
Ho reso tutti i int16 < 0 come numero positivo -> if int16 < 0 then int16 * -1
Ho addizionato tutti i valori e li ho divisi per il numero dei valori.
Ho convertito il valore in decibel -> db = 20*log10(valore / 127).
Controllando con un software parallelo ho notato che i db sono completamente inesatti.

Riesci a darmi un suggerimento inerente questo calcolo.
Grazie
Marcello


Orma674 by Marcello
PM Quote
Avatar
Carlo (Member)
Expert


Messaggi: 460
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 22:25
Venerdì, 04/10/2019
Ciao, anche io tempo fa ho affrontato questo argomento, con buoni risultati nella visualizzazione della forma d'onda, quando ho cercato di approfondire ho trovato questi due programmi scritti da Totem, che da una parte ti schiude un mondo, dall'altra ti fa capire cosa stai per affrontare.

Forse un po' fuori tema, ma interessante.
http://www.pierotofy.it/pages/sorgenti/dettagli/18027-TWav ...

In questo forse trovi risposte alle tue domande.
http://www.pierotofy.it/pages/sorgenti/dettagli/17972-Wave ...

I programmi sono affetti da piccoli bug, facilmete correggibili, se non ricordo male uno era che un file Wave mono a 16Bit, veniva visualizzato con una forma d'onda errata, un altro era che il salvataggio della forma d'onda su HD, non controllava se il percorso esisteva.

Purtroppo per i dubbi che hai non ti posso aiutare, è passato troppo tempo, ma ricordo che dei problemi li avevo risolti padroneggiando l'endian dei byte

https://it.wikipedia.org/wiki/Ordine_dei_byte

Ultima modifica effettuata da Carlo il 05/10/2019 alle 4:39


In programmazione tutto è permesso
PM Quote