2009-05-15 7 views
6

E 'possibile con FFT trovare un'occorrenza di un piccolo campione wav all'interno di un wav più lungo, se è noto che quel campione esatto esiste da qualche parte nel wav (ma può essere mescolato con altri suoni)?Trova un'occorrenza di un campione WAV all'interno di un altro WAV?

modificare

(dopo aver ricevuto due risposte): Cosa succede se ho una biblioteca di tutti i suoni conosciuti che possono essere nel più grande e WAV desiderare di trovare occorrenze di ciascuno di essi all'interno di tale WAV? In altre parole, conosco lo ogni suono possibile che può essere mescolato nel grande wav e desidera trovarne le occorrenze?

+0

(dopo aver ricevuto due risposte): Cosa succede se ho una libreria di tutti i suoni noti che possono essere nel WAV più grande e desidero trovare le occorrenze di ognuno di essi all'interno di quel WAV? In altre parole, conosco * ogni * suono possibile che può essere mescolato nel grande wav e desidero trovarne le occorrenze? –

+0

@ZomCoder: le applicazioni WAV-to-MIDI sono terribili perché questo è un problema problematico, non perché i programmatori che lavorano su di esso non sono dei buoni programmatori. Anche se tu fossi il miglior programmatore al mondo (e non sto dicendo che non lo sei), ci vorrebbe molto tempo e un sacco di sforzi per produrre risultati migliori di quelli che sono là fuori. – MusiGenesis

+0

Se si dispone di una libreria di ogni suono possibile, e non sono sfalsati, penso che la correlazione incrociata funzionerebbe al meglio. – endolith

risposta

3

Suppongo che per esattezza non intenda il valore del campione esatto. Se fosse esatto il valore campione, sarebbe semplice cercare i valori campione, che è veloce ed efficiente.

Se siete alla ricerca di bit di suono che contribuiscono, l'approccio migliore è utilizzare un processo matematico chiamato "convoluzione". Fondamentalmente, prendi il campione che stai cercando di trovare all'interno del grande campione, posizionalo efficacemente accanto al grande campione e correlalo. Fallo per ogni posizione campione. Da questo otterrete una curva che avrà punte distinte in cui si trova il campione. È abbastanza computazionalmente intensivo, ma i computer sono diventati abbastanza veloci, quindi è fattibile.

Tuttavia, si presume che il campione provenisse dalla stessa registrazione per entrambi i casi. Unendo un suono di batteria, anche lo stesso suono di batteria, proveniente da due posizioni diverse, non produrrà una correlazione molto buona.

Spero che questo aiuti.

+0

Questo aiuta molto. Il mio obiettivo è quello di trascrivere le vecchie registrazioni WAV di un piano digitale che ho realizzato in MIDI. Quel pianoforte digitale ha un insieme finito di campioni che suona. Se potessi afferrare ogni possibile campione che può suonare e usare la convoluzione con le vecchie registrazioni, sembra che potrei riuscire a farlo. Un ostacolo che posso pensare è che ho registrato in diversi volumi. Mi chiedo quanto mi potrebbe influenzare? In realtà non mi interessa se è assolutamente perfetto, a patto che sia migliore della maggior parte delle app "sound to midi" che sono TERRIBILI. Grazie. –

+0

Il volume più debole provocherà una correlazione più debole. Un suono accordato come un piano produrrà comunque molti picchi, in quanto la nota si correla a se stessa, più l'offset di una lunghezza d'onda. Quindi dovrai usare solo il picco che è un massimo locale tra gli altri picchi. Dovrai correlare con ogni nota che potresti aver suonato, quindi potrebbe essere un po 'lento. –

+0

Per questa attività, si utilizzerà la correlazione incrociata e non la convoluzione. Molto simile, ma un po 'diverso. – tom10

0

Non esattamente come l'hai definito, se è combinato con altri suoni, ed ecco il motivo; considera l'effetto di un'onda mista esattamente al suo inverso; il risultato è una risposta piatta. La miscelazione delle onde può avere una funzione monotona, cioè per mascherare efficacemente un'onda con un'altra in modo che la prima non sia recuperabile.

Detto questo, è probabile che sia possibile caratterizzare la "firma" di un'onda in modo tale che sia probabilmente presente in un file wave composito risultante, ma tale firma dipenderebbe dalla lunghezza del file wave e in qualche misura, ci si aspettava che il tipo di combinazioni fosse fatto su di esso.

La tua domanda probabilmente ha qualcosa a che fare con determinare se campioni di una opera esistono all'interno di un'altra, composita, opera. In generale, sì, le FFT sono utili per determinare una "firma" per una determinata onda e per poter estrarre quella "firma" da un'altra ondata; sono buoni per alcune cose (come il cambio di frequenza, si presenta come uno spostamento sulla FFT), ma non così grande per altre cose (modulazione di frequenza variabile, per una, compressione della larghezza di banda alta (o non uniforme) dell'originale segnale). Per dirla in un altro modo: le FFT sono un buon modo per rilevare l'uso "ingenuo" di campioni, ma un resampler determinato può modificare il campione originale per renderlo difficile da rilevare tramite FFT se sa che questa è la tecnica di rilevamento utilizzata.

0

Se si conosce la natura esatta del campione (lunghezza in bit, ecc.), Allora è molto possibile. Se altera in qualche modo, avrai molto lavoro da fare prima.

A causa del modo in cui i file WAV sono codificati (sequenzialmente per traccia - quindi si ottiene il primo lotto di bit per la prima traccia, quindi il primo lotto di bit per la seconda traccia, quindi il secondo lotto di bit dal primo traccia)

Questo può ovviamente ripetersi per il maggior numero di tracce. Se sai che il file WAV che stai cercando è codificato specificamente in una di queste tracce, puoi isolare ogni traccia ed eseguire operazioni su di esse.

Ovviamente se il campione differisce per velocità, tempo, altezza, ecc. Allora avrà una firma bit diversa, quindi sarà necessario normalizzare le tracce.

4

Esso dipende esattamente quello che stai cercando di trovare e che cosa si sta cercando di trovare in.

  • Se siete alla ricerca di un campione che è esattamente la stessa di un pezzo di un più ampio File WAV, bit per bit, quindi è possibile cercare direttamente i valori.
  • Se è esattamente lo stesso suono, ma non accurato al campione (ad esempio, abbinando una clip di un MP3 a un WAV della stessa canzone), è possibile trovarlo facilmente utilizzando cross-correlation. La correlazione incrociata può essere accelerata in modo significativo utilizzando un metodo FFT invece di un metodo "ingenuo" che moltiplica e somma in modo esplicito i campioni.
  • Se si sta cercando un breve esempio combinato con altri suoni, potrebbe comunque essere possibile utilizzare la correlazione incrociata, ma dipende se gli altri suoni influenzano la corrispondenza. Per il piano digitale con campioni semplici e senza effetti, direttamente in un registratore digitale, questo potrebbe funzionare.
  • Se il suono ha subito qualsiasi tipo di filtraggio, inversione di polarità o sfasamento, tuttavia, questo non funzionerà molto bene, poiché le forme d'onda saranno modificate. Quindi, se il pianoforte è stato riprodotto tramite altoparlanti e quindi registrato con microfoni, questa non è una soluzione praticabile.

Che cosa potrebbe funzionare meglio, in questo caso è quello di creare un spectrogram della registrazione utilizzando il short-time Fourier transform (STFT), e uno spettrogramma della cosa che stai cercando, e poi fare un cross-correlazione tempo-saggio delle due immagini. Lo spettrogramma è un'immagine 2D dell'ampiezza degli spettri dei suoni nel tempo, che è quindi possibile abbinare. (Questo è probabilmente un modo indiretto di fare qualcosa per cui esistono algoritmi più specializzati, ma non so come si chiamerebbe.)

Puoi caricare qualche clip audio da qualche parte?