2010-10-03 12 views
2

Je veux développer un outil qui fait les choses suivantes.La combinaison Python + Qt peut-elle produire un outil d'analyse spectrale en temps réel?

  1. prendre une voix en direct l'enregistrement
  2. produire un temps réel spectrogramme
  3. montrent le signal dans le domaine temporel
  4. sortie quelques valeurs extraites de l'analyse spectrale

Tous ces éléments ont à garder à jour dans une fenêtre lorsque la voix est enregistrée.

J'ai travaillé avec numpy. Mais je suis complètement nouveau à Qt et d'autres outils de construction GUI. Quelle est la meilleure façon de procéder compte tenu de cette situation? Mes pairs ont recommandé Qt après leur avoir expliqué la tâche. Si quelqu'un connaissait un meilleur outil à utiliser avec python pour cette tâche, s'il vous plaît faites le moi savoir. Aussi, s'il vous plaît aidez-moi avec des détails techniques sur la façon de capturer le flux en direct et le traiter en python qui doit être montré dans une fenêtre GUI. Un lien qui m'a donné un peu d'espoir est http://www.swharden.com/blog/2010-03-05-realtime-fft-graph-of-audio-wav-file-or-microphone-input-with-python-scipy-and-wckgraph/. Mais c'est un peu difficile à comprendre. Peut être une solution moins intensive m'aidera à démarrer.

+0

L'audio est assez spécifique à la plate-forme. Sur quel OS travaillez-vous? –

+0

Windows 7 et Linux (Ubuntu 10.04), j'ai la configuration prête sur les deux machines. – gopalkoduri

Répondre

2

Dans Qt 4.6, l'API QAudioInput a été ajoutée. Ceci fournit une abstraction multiplateforme pour obtenir un signal d'entrée audio, et serait donc utile pour atteindre le point (1).

Comme pour (2) et (3), le Spectrum Analyzer demo livré avec Qt peut être d'intérêt.

Screenshot of Spectrum Analyzer demo running on Symbian http://labs.trolltech.com/blogs/wp-content/uploads/2010/05/spectrum.png

La mise en œuvre est en C++ plutôt que dans Python, mais il peut être utilisé comme référence. Fondamentalement, ce dont vous avez besoin (2) est de calculer la transformée de Fourier rapide du signal d'entrée. Vous voudrez probablement utiliser une bibliothèque qui fournit une implémentation FFT plutôt que d'écrire la vôtre - c'est l'approche que j'ai suivie lors de l'écriture de la démo :)

Comme pour (3), c'est conceptuellement assez simple, mais nécessite un un peu de réflexion afin d'obtenir une forme d'onde qui défile doucement. Jetez un oeil à l'approche de carrelage utilisée dans la classe Waveform dans la démo pour quelques conseils.

Je pense par (4) que vous voulez dire: réduire le grand nombre de points dans la sortie FFT à un petit nombre de valeurs. C'est ce que fait la démo pour tracer un diagramme à barres pour le spectre. Encore une fois, reportez-vous au code de démonstration pour voir comment le binning des amplitudes de fréquence est implémenté.

+0

Merci beaucoup! c'est à peu près ce que je cherche. – gopalkoduri

1

Sur Linux, c'est certainement faisable. D'autres plateformes aussi, mais je ne peux vraiment répondre qu'à Linux. Python n'est pas forcément votre outil le plus pointu pour les DSP en temps réel, mais sur une machine convenablement moderne et des objectifs convenablement modestes, tout ira bien. D'abord, vous avez besoin d'une interface pour les pilotes audio Linux. ALSA est assez universel. Il existe plusieurs wrappers Python différents pour les bibliothèques ALSA, voir Python In Music pour une liste des bibliothèques et applications qui les utilisent.

Ensuite, vous faites votre analyse spectrale. SciPy et NumPy ont tout cela.

Ensuite, vous dessinez dans votre fenêtre Qt. Mon expertise est dans GTK mais vous voulez probablement créer un QtCanvas (tutorial), qui est une zone de dessin orientée objet conçue pour ce genre d'utilisation.

Ou vous pouvez simplement utiliser SciPy, qui peut probablement être convaincu de faire tout cela! AudioLab en particulier semble que cela pourrait être d'une grande aide.

+0

Merci Bill Gribble! Je vais garder cela à l'esprit. – gopalkoduri

2

Another example d'un analyseur de spectre audio en temps réel utilisant PyAudio, scipy, Chaco dans un script peut être trouvé dans la liste des exemples pour Chaco. (Travaillé out-of-the-box sur mon Précis).

Screenshot