2012-05-07 7 views
5

Estoy tratando de hacer un simple "rascador virtual" pero no conozco la teoría detrás de esto. Como no encontré nada útil en google, lo pido aquí:¿Cómo emular el efecto Scratch de vinilo en el procesamiento de audio?

  • ¿Qué sucede cuando rasco (muevo la canción hacia adelante)? ¿Levanto el tono y/o velocidad de la muestra?
  • ¿Cómo puedo emular este fenómeno con algoritmos de procesamiento de audio?

Código de ejemplo/tutoriales sería apreciada :-) reeeally

+0

P: ¿Cómo está editando sus pistas de audio ahora? ¿Que software estas usando? Simplemente mezclaría algunos efectos de "scratch", "silbido" o "pop" según sea necesario. Por ejemplo: http://free-loops.com/5174-short-record-scratch.html – paulsm4

+0

Estoy usando Java porque lo estoy desarrollando como una aplicación de Android. Aún no sé si debería usar el procesamiento de audio Java por defecto o OpenSL. Esto depende si emular "scratch" significa cambiar tono/velocidad u otras funciones que Java no tiene. EDITAR: mi aplicación permitirá al usuario tener el control de la pista como un vinilo real. Dejándolo moverlo hacia adelante/atrás mientras juega y adquirir el efecto "cero" – user1118094

+0

Puede que le resulte un poco difícil, ya que Android no le permitirá tener acceso directo a sus muestras de audio (descargo de responsabilidad: no soy un desarrollador de Android, esto es justo lo que he escuchado. Puedo estar equivocado acerca de esto). Dicho esto, el efecto específico que estás buscando se llama "Varispeed", que debería darte suficiente información para comenzar a investigar. Probablemente también quieras agregar algo de ruido extra para completar el efecto. – admsyn

Respuesta

5

¿Qué sucede cuando rasco (muevo la canción hacia adelante)? ¿Levanto el tono y/o tasa de la muestra?

Piensa en lo que realmente está sucediendo: Un registro contiene datos de audio. La aguja de registro lee los datos de audio del registro. A medida que la grabación gira, la posición de reproducción cambia. (Es muy similar a ver el movimiento de la cabeza lectora a través de un archivo de audio en un editor de audio digital.)

Cuando gira físicamente más rápido la grabación, está aumentando la velocidad de reproducción. El audio es más rápido y más alto en tono. Aumenta la velocidad de reproducción en dos y el audio reproducirá una octava más alta.

Cuando gira físicamente el registro más lento, está disminuyendo la velocidad de reproducción. El audio es más lento y más bajo en tono. Disminuya la velocidad de reproducción en dos y el audio reproducirá una octava más baja.

Los registros solo pueden modificar la reproducción de audio al acelerar o ralentizar la grabación física, esto afecta tanto el tono como la velocidad de reproducción. Algunos software de audio pueden cambiar el tono y la velocidad de forma independiente. Los jugadores de discos no pueden.

(Obtener un tocadiscos y experimentar para escuchar lo que suena.)

Como puedo emular este fenómeno con algoritmos de procesamiento de audio?

Para emular a un DJ que rasca un disco, necesita poder ajustar la velocidad de reproducción del audio mientras el usuario está "rascando".

Cuando el usuario acelera la grabación, acelera la velocidad de reproducción. Cuando el usuario ralentiza el registro, reduce la velocidad de reproducción.

Cuando el usuario detiene la grabación, detenga la reproducción por completo.

Cuando el usuario gira la grabación en reversa, invierta la reproducción.

No necesita cambiar el tono del audio. Cambiar la velocidad de reproducción lo hará automáticamente. Cualquier otro ajuste al tono sonará incorrecto.

No tengo ningún consejo con respecto a las bibliotecas, pero algo como esto no es demasiado difícil de implementar si se toma su tiempo.

1

Cuando se rasca, sólo estás moviendo el registro de ida y vuelta debajo de la aguja. Por lo tanto, es equivalente a avanzar repetidamente hacia adelante y hacia atrás sobre la misma parte del archivo de audio. Supongo que la velocidad está en algún lugar entre una onda sinusoidal y una onda triangular. Tendrá que hacer una interpolación lineal en la muestra.

Para una aplicación móvil, comenzaría mapeando un eje de la pantalla a un rango de tiempo en el archivo de audio. Mantenga un buffer que contenga el último MotionEvent. Cuando llegue el siguiente MotionEvent, calcule las posiciones de inicio y final asignadas según las coordenadas (X,Y). Luego, calcule el tiempo transcurrido entre los dos MotionEvents. Esto le brinda suficiente información para reproducir desde el archivo en la posición y velocidad correctas, actualizándose constantemente con cada evento de movimiento.

Es posible que necesite hacer algún tipo de suavizado en los datos, pero este es un punto de partida.

1

Un remuestreador de velocidad variable puede ser apropiado. Esto acelerará la velocidad de reproducción y aumentará el tono en la misma proporción.

Haría un seguimiento de la relación entre la velocidad angular del movimiento "cero" y la velocidad normal de rotación del plato, y la usará como la relación de remuestreo local.

Hay métodos DSP mucho mejores (calidad de audio superior) para hacer un remuestreo de frecuencia que la interpolación lineal, como el uso de un kernel de interpolación Sinc de ancho variable.

Cuestiones relacionadas