Tengo una guitarra y necesito que mi pc pueda saber qué nota se está reproduciendo, reconociendo el tono. ¿Es posible hacerlo en python, también es posible con pygame? Ser capaz de hacerlo en pygame sería muy útil.Reconociendo el tono del audio
Respuesta
Reconocer la frecuencia de una señal de audio, se utiliza la FFT (fast Fourier transform) algoritmo. Por lo que puedo decir, PyGame no tiene medios para grabar audio, ni admite la transformación FFT.
En primer lugar, debe capturar los datos muestreados sin procesar de la tarjeta de sonido; este tipo de datos se llama PCM (Pulse Code Modulation). La forma más sencilla de capturar audio en Python es usar el PyAudio library (enlaces de Python a PortAudio). GStreamer también puede hacerlo, es probablemente una exageración para sus propósitos. La captura de muestras de 16 bits a una velocidad de 48000 Hz es bastante típica y probablemente sea la mejor que una tarjeta de sonido normal le dará.
Una vez que tiene datos de audio PCM en bruto, puede usar el módulo fftpack
del scipy library para ejecutar las muestras a través de la transformación FFT. Esto le dará una distribución de frecuencia de la señal de audio analizada, es decir, qué tan fuerte es la señal en ciertas bandas de frecuencia. Entonces, es cuestión de encontrar la frecuencia que tiene la señal más fuerte.
Usted podría necesita un poco de filtrado adicional para evitar harmonic frequencies No estoy seguro.
¿Existe una forma estándar para manejar una secuencia de notas? – unutbu
No estoy seguro de lo que está preguntando, ¿puede dar más detalles? – intgr
Si realiza una secuencia de notas FFT, obtendrá información acerca de las frecuencias dominantes, pero perderá información sobre la posición de tiempo de las notas. (¿O estoy equivocado?) Supongo que podrías intentar cortar el audio en bruto para aplicar la FFT a notas individuales, pero averiguar dónde cortar parece difícil. – unutbu
Necesitará utilizar una biblioteca de audio como la incorporada audioop.
Analizar la nota específica que se está reproduciendo no es trivial, pero se puede hacer utilizando esas API.
también podría ser de utilidad: http://wiki.python.org/moin/PythonInMusic
El módulo 'audioop' solo puede hacer análisis bastante primitivos y técnicas de compresión. Esto no es en absoluto adecuado para los propósitos del solicitante. El enlace wiki es una larga lista de enlaces que probablemente causa más confusión de la que evita. – intgr
Este link muestra que alguien lo hace en VB.NET, pero los conceptos básicos de lo que se debe hacer para lograr su objetivo se capturan en estos enlaces a continuación.
una vez me escribió una utilidad que hace exactamente eso - se analiza lo que se está reproduciendo sonidos.
Puede ver el código here (o puede descargar todo el proyecto. Está integrado con Frets On Fire, un clon de guitarra y código abierto para crear un verdadero héroe de la guitarra). Fue probado usando una guitarra, una armónica y silbatos :) El código es feo, pero funciona :)
Utilicé pymedia para grabar y scipy para la FFT.
A excepción de los conceptos básicos que otros ya se ha señalado, le puedo dar algunos consejos:
- Si graba desde un micrófono, hay una gran cantidad de ruido. Tendrá que usar una gran cantidad de prueba y error para establecer los umbrales y los métodos de limpieza del sonido para que funcione. Una posible solución es usar una guitarra eléctrica y conectar su salida a la entrada de audio. Esto funcionó mejor para mí.
- Específicamente, hay mucho ruido alrededor de 50Hz. Eso no es tan malo, pero sus armónicos (ver abajo) están en 100 Hz y 150 Hz, y eso está cerca de los G2 y D3 de la guitarra ... Como dije, mi solución fue cambiar a una guitarra eléctrica.
- Existe una compensación entre la velocidad de detección y la precisión. Cuantas más muestras tome, más tiempo le llevará detectar sonidos, pero será más preciso detectar el tono exacto. Si realmente desea hacer un proyecto de esto, probablemente necesite usar varias escalas de tiempo.
- Cuando se reproduce un tono, tiene overtones. A veces, después de unos segundos, los armónicos pueden ser incluso más poderosos que el tono base. Si no lidias con esto, tu programa cree que escuchó E2 por unos segundos, y luego E3. Para superar esto, utilicé una lista de sonidos actualmente en reproducción, y luego, siempre y cuando esta nota, o uno de sus sobretonos tuviera energía, supuse que era la misma nota que se estaba reproduciendo ...
- Es específicamente difícil para detectar cuando alguien toca la misma nota 2 (o más) veces seguidas, porque es difícil distinguir entre eso, y las fluctuaciones aleatorias del nivel de sonido. Verás en mi código que tuve que usar una constante que tenía que configurarse para que coincidiera con la guitarra utilizada (al parecer, cada guitarra tiene su propio patrón de fluctuaciones de potencia).
¿Te importaría subir la fuente de nuevo? Parece que lo tomaron – Sirens
preguntas muy similares:
convertir el sonido en una secuencia de notas no es una cosa fácil de hacer, especialmente con varias notas En seguida. Lea los resultados de Google para "estimación de frecuencia" y "reconocimiento de notas".
Tengo algunos Python frequency estimation examples, pero esto es solo una parte de lo que necesita resolver para obtener notas de grabaciones de guitarra.
- 1. Android audio: cambie el tono
- 2. Modificar el tono de audio del clip grabado (m4v)
- 3. Python: Cambiar el tono del archivo de audio
- 4. playbackRate en AUDIO y tono
- 5. Procesamiento de audio - Reconocimiento de tono
- 6. ¿Cómo grabo audio en Android y cambio el tono?
- 7. Android Audio - Streaming generador de tono sinusoidal comportamiento impar
- 8. configuración de archivo de audio como tono de llamada
- 9. Reconociendo cuándo usar el operador de módulo
- 10. reconociendo "tipo" de claves hash
- 11. incrementar el tono de programación de una serie de muestras de audio
- 12. Audio en el iPhone
- 13. C# Audio - ¿Cómo alargar la duración (diferente ritmo, el mismo tono)
- 14. Reproducción del tono de llamada predeterminado
- 15. ¿Cómo reproduzco el tono de llamada predeterminado del teléfono programáticamente?
- 16. Reconociendo las teclas de flecha con stdin
- 17. Android tono de ajuste de Froyo
- 18. Reconociendo el texto de una imagen en delphi
- 19. ¿Cómo configurar el volumen del audio HTML5?
- 20. Desplazamiento de tono en tiempo real en el iPhone
- 21. Micrófono Android para seleccionar un tono específico
- 22. Cómo reproducir el tono de llamada seleccionado de RingtonePreference
- 23. ¿Disminuye la velocidad de reproducción de un archivo de audio sin cambiar su tono?
- 24. Detección de tono FFT - Extracción de melodía
- 25. Reproducir tono variable con Java?
- 26. Reproducir tono estéreo en android
- 27. Android Strip Audio del video
- 28. SpeechSynthesizer .NET control de tono
- 29. Grabar el sonido y reproducirlo con cambiada de tono
- 30. letras para tocar la salida del número de tono
¿Va a conectar su computadora directamente a la computadora o depender del micrófono de la computadora? – theycallmemorty
desde el micrófono –