Reconnaissant le ton de l'audio
J'ai une guitare et j'ai besoin de mon pc pour être en mesure de dire quelle note est jouée, en reconnaissant le ton. Est-il possible de le faire en python, aussi est-il possible avec pygame? Être en mesure de le faire dans pygame serait très utile.
- Serez-vous de brancher votre ordinateur directement dans l'ordinateur ou en s'appuyant sur le microphone de l'ordinateur?
- à partir du microphone
Vous devez vous connecter pour publier un commentaire.
De reconnaître la fréquence d'un signal audio, vous devez utiliser la FFT (la transformée de Fourier rapide) de l'algorithme. Aussi loin que je peux dire, PyGame n'a pas les moyens d'enregistrer de l'audio, ni ne prend en charge la FFT transformer.
Tout d'abord, vous avez besoin pour capturer les premières données d'échantillonnage de la carte son; ce type de données est appelé PCM (Pulse Code Modulation). La façon la plus simple de capturer l'audio en Python à l'aide de la PyAudio bibliothèque (liaisons Python pour PortAudio). GStreamer pouvez aussi le faire, c'est probablement un overkill pour vos besoins. La capture des échantillons de 16 bits à une fréquence de 48000 Hz est assez typique et probablement le meilleur un son normal de la carte vous donnera.
Une fois que vous avez cru données audio PCM, vous pouvez utiliser le
fftpack
module à partir de la scipy bibliothèque pour exécuter les échantillons par la FFT à transformer. Cela vous donnera une distribution de fréquence de l'analyse du signal audio, c'est à dire, quelle est la force du signal dans certaines bandes de fréquences. Ensuite, c'est une question de trouver la fréquence qui a le signal le plus fort.Vous pourrait besoin supplémentaire de filtrage pour éviter fréquences harmoniques je ne suis pas sûr.
Une fois, j'ai écrit un utilitaire qui est exactement ce que fait - il d'analyser ce que les sons sont joués.
Vous pouvez regarder le code ici (ou vous pouvez télécharger l'ensemble du projet. intégré avec Frets on Fire, un héros de la guitare open source clone pour créer un véritable guitar hero). Il a été testé à l'aide d'une guitare, un harmonica et de sifflets 🙂 Le code est moche, mais ça fonctionne 🙂
J'ai utilisé pymedia à l'enregistrement, et scipy de la FFT.
Sauf pour les notions de base que les autres déjà noté, je peux vous donner quelques conseils:
Vous aurez besoin d'utiliser une bibliothèque audio tels que le haut -audioop.
L'analyse de la note jouée est pas trivial, mais peut être fait en utilisant les Api.
Pourrait également être d'utilisation: http://wiki.python.org/moin/PythonInMusic
audioop
module ne peut le faire tout à fait primitif de l'analyse et des techniques de compression. Ce n'est pas du tout adéquat pour le demandeur de fins. Le lien wiki est une longue liste de liens qui est probablement la cause de la confusion qu'il évite.Très similaire questions:
Tournant son en une séquence de notes n'est pas une chose facile à faire, surtout avec plusieurs notes à la fois. Lire à travers les résultats de Google pour "la fréquence d'estimation" et "note de reconnaissance".
J'ai quelques Python fréquence d'estimation des exemples, mais ce n'est qu'une partie de ce que vous devez résoudre pour obtenir des notes à partir d'enregistrements de guitare.
Ce lien montre quelques une de le faire dans VB.NET mais les bases de ce qui doit être fait pour atteindre votre objectif est pris en compte dans les liens ci-dessous.