Domanda

Voglio scrivere un app per trasporre la chiave di un file WAV gioca a (per divertimento, so che ci sono applicazioni che già fanno questo) ... la mia comprensione principale di come questo potrebbe essere realizzato è quello di

1) tagliare il file audio in molto piccoli blocchi (ad esempio 1/10 secondo)

2) eseguire una FFT su ogni blocco

3) Phase Shift lo spazio di frequenza su o giù a seconda di ciò che voglio chiave

4) utilizzare una FFT inversa per tornare ciascun blocco nel dominio del tempo

5) incollare tutti i blocchi insieme

Ma ora mi chiedo se i blocchi trasformati non sarebbero più continuo quando cerco di incollare di nuovo insieme. Ci sono idee come devo fare questo per garantire la continuità, o sto solo preoccuparsi di nulla?

È stato utile?

Soluzione

Sovrapposizione campioni di tempo per ogni blocco di metà in modo che ogni blocco dopo il primo consiste dell'ultimo N / 2 campioni dal blocco precedente e N / 2 campioni. Assicurarsi di applicare alcuni finestra per i campioni prima della trasformazione.

Dopo spostando la frequenza, eseguire una FFT inversa e utilizzare le medie / 2 N campioni di ogni blocco. Avrete bisogno per regolare il guadagno finale dopo l'IFFT.

Naturalmente, mescolando i campioni temporali con un'onda sinusoidale e poi il filtraggio passa basso fornirà lo stesso spostamento nel dominio del tempo pure. La frequenza del mixer sarebbe la differenza di frequenza desiderata.

Altri suggerimenti

Per il discorso si potrebbe desiderare di guardare PSOLA - questo è un algoritmo popolare per pitch-shifting e / o time stretching/compression che è un po 'più sofisticato rispetto al metodo di sovrapposizione-add di base, ma non molto di più complesso.

Se è necessario trattare i campioni non vocali, per esempio la musica, poi ci sono diverse possibilità , tuttavia la sovrapposizione-add FFT / Modifica / IFFT approccio detto in altre risposte è probabilmente la soluzione migliore.

questo grande articolo in materia, per chi cerca in futuro!

Si può trovare un incrocio zero tra i blocchi per incollare i singoli wavs di nuovo insieme. In caso contrario, si potrebbe scoprire che si stanno ottenendo clic o pop tra i blocchi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top