2012-05-07 11 views
5

Sto provando a creare un semplice "scratcher virtuale" ma non conosco la teoria alla base. Dal momento che ho trovato nulla di utile su google mi sto chiedendo qui:Come emulare l'effetto Vinyl Scratch nell'elaborazione audio?

  • Cosa accade quando mi gratto (spostare la traccia in avanti)? Alzo il tono e/o la velocità del campione?
  • Come posso emulare questo fenomeno con algoritmi di elaborazione audio?

Codice di esempio/tutorial sarebbe apprezzato reeeally :-)

+0

Q: Come state modificando le tracce audio ora? Che software stai usando? Vorrei semplicemente mixare alcuni effetti "scratch", "hiss" o "pop" come necessario. Ad esempio: http://free-loops.com/5174-short-record-scratch.html – paulsm4

+0

Uso Java da quando lo sviluppo come applicazione Android. Ancora non so se dovrei usare l'elaborazione audio Java predefinita o OpenSL. Ciò dipende se emulare "scratch" significa cambiare pitch/rate o altre funzioni che Java non ha. EDIT: la mia app permetterà all'utente di avere il controllo della traccia come un vero vinile. Lasciandolo spostarlo avanti/indietro mentre si gioca e acquisire l'effetto "scratch" – user1118094

+0

Potresti trovarlo un po 'difficile, dal momento che Android non ti consente di accedere direttamente ai tuoi campioni audio (dichiarazione di non responsabilità: non sono uno sviluppatore Android, questo è proprio quello che ho sentito. Potrei sbagliarmi su questo). Detto questo, l'effetto specifico che stai cercando si chiama "Varispeed", che dovrebbe darti informazioni sufficienti per iniziare le ricerche. Probabilmente vorrai aggiungere anche del rumore extra per completare l'effetto. – admsyn

risposta

5

Cosa succede quando graffio (sposta la traccia in avanti)? Sollevo il pitch e/o la frequenza del campione?

Pensa a cosa sta realmente accadendo: un record contiene dati audio. L'ago del record legge i dati audio dal record. Mentre il record gira, la posizione di riproduzione cambia. (È molto simile a quando la testina si muove attraverso un file audio in un editor audio digitale.)

Quando si ruota fisicamente il record più velocemente, si aumenta la velocità di riproduzione. L'audio è sia più veloce sia più acuto. Aumenta la velocità di riproduzione di due e l'audio riprodurrà un'ottava più alta.

Quando si ruota fisicamente il record più lentamente, si riduce la velocità di riproduzione. L'audio è più lento e più basso. Diminuisce la velocità di riproduzione di due e l'audio riproduce un'ottava più bassa.

I record possono modificare la riproduzione audio solo accelerando o rallentando la registrazione fisica, questo ha effetto sia sull'altezza che sulla velocità di riproduzione. Alcuni software audio possono modificare l'intonazione e la frequenza in modo indipendente. I giocatori di record non possono.

(Prendi un giradischi e sperimentare per sentire come suona.)

Come posso emulare questo fenomeno con algoritmi di elaborazione audio?

Per emulare un DJ che graffia un disco, è necessario essere in grado di regolare la velocità di riproduzione dell'audio mentre l'utente sta "grattando".

Quando l'utente accelera la registrazione, velocizza la velocità di riproduzione. Quando l'utente rallenta il record, rallenta la velocità di riproduzione.

Quando l'utente interrompe la registrazione, interrompere completamente la riproduzione.

Quando l'utente gira la registrazione in ordine inverso, inverte la riproduzione.

Non è necessario modificare l'intonazione dell'audio. La modifica della velocità di riproduzione lo farà automaticamente. Qualsiasi ulteriore regolazione del tono suonerà in modo errato.

Non ho alcun consiglio in merito alle librerie, ma qualcosa di simile non è troppo difficile da attuare se si prende il tempo.

1

Quando si gratta, si sta solo spostando il record avanti e indietro sotto l'ago. Quindi è equivalente al looping in avanti e all'indietro ripetutamente nella stessa parte del file audio. Direi che la velocità è da qualche parte tra un'onda sinusoidale e un'onda triangolare. Avrai bisogno di fare interpolazione lineare sul campione.

Per un'applicazione mobile, inizierei mappando un asse dello schermo in un intervallo di tempo nel file audio. Conserva un buffer contenente l'ultimo MotionEvent. Quando arriva il prossimo MotionEvent, calcolare le posizioni di inizio e fine mappate in base alle coordinate (X,Y). Quindi, calcolare il tempo trascorso tra i due MotionEvents. Questo ti dà abbastanza informazioni per giocare dal file nella giusta posizione e velocità, aggiornando costantemente con ogni evento di movimento.

Potrebbe essere necessario eseguire una sorta di livellamento dei dati, ma questo è un punto di partenza.

1

Un ricampionatore a velocità variabile potrebbe essere appropriato. Questo accelera la velocità di riproduzione e aumenta il tono dello stesso rapporto.

Si dovrebbe tracciare il rapporto tra la velocità angolare del movimento "scratch" e la velocità normale di rotazione del piatto e usarlo come rapporto di ricampionamento locale.

Esistono metodi DSP molto migliori (qualità audio superiore) per eseguire il ricampionamento della frequenza rispetto all'interpolazione lineare, ad esempio l'utilizzo di un kernel di interpolazione Sinc a larghezza variabile.