Comment développer un Analyseur de Spectre à partir d'un audio temps réel?
Je développe une application qui obtiennent une source audio à partir de mic en temps réel, sans stockage de fichiers. En gros, j'utilise:
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mRecorder.setOutputFile("/dev/null");
Ma question est, comment je peux faire un spectre graphique à partir de ce audio temps réel, sans fichiers. Cela peut être fait?
Tous les post que j'ai lu sont l'analyse d'un tampon de fichier.
Merci, et désolé pour mon anglais.
- hilarant faute de frappe dans le titre Maintenant corrigé 😉
- Désolé, Marko 🙂
- Pas besoin de s'excuser! Beaucoup de respect pour poser des questions ici, dans une langue qui n'est pas votre première.
- À ma connaissance il n'y a pas d'API pour cela. Vous êtes probablement à la recherche à la construction d'une taille raisonnable de la mémoire tampon de données PCM dans la RAM et de la transformer pour le domaine fréquentiel à l'aide d'une FFT de la bibliothèque. Voir, par exemple, stackoverflow.com/questions/4675457/... pour un peu plus d'informations.
Vous devez vous connecter pour publier un commentaire.
oui, il peut être fait.
Tous vous avez besoin est un rapide algorithme de FFT !
D'abord décider de la résolution de fréquence que vous souhaitez, par exemple, vous pouvez définir la fréquence d'échantillonnage à partir de votre micro à 8000hz, maintenant, choisissez une taille de bloc comme 1024 ou 2048 pour capturer à partir de votre micro.
Si vous choisissez de 2048 points et le taux d'échantillonnage de 8000, ne vous aura une résolution de fréquence = 3.9063 (8000 /2048).
Appliquer une fonction de fenêtre au-dessus de votre 2048 points, puis appliquer la FFT et d'obtenir de l'ampleur !
Souvenez-vous de théorème de Nyquist fréquence d'échantillonnage = 8000 /2 = 4000, maintenant, connaissez-vous votre FFT pouvez obtenir des fréquences entre 3.9063 Hz à 4000 Hz.
FFT Bin de fréquences correspondantes:
Pour cela, vous avez juste besoin de la première moitié des valeurs de la FFT, pour ce cas 1024.
Maintenant, si vous tracez ces données à partir de votre FFT, vous aurez un spectre !
MODIFIER
Pseudo-code:
Il y a un open source Android de l'analyseur de spectre sur Github les ordinateurs FFT sur l'audio à partir du microphone et affiche un 2D spectrogramme.
L'Analyseur de Spectre projet est trouvé dans la v2.x/Vitrine app
Vous pouvez voir une vidéo de lui en action à https://youtu.be/yU05fsgOYO4
Vous pouvez voir une vidéo avec des instructions de compilation ici: https://youtu.be/tVgn30uss2k?t=1m37s
La cartographie est fourni par le SciChart Android graphique de la bibliothèque qui est un contrôle commercial, mais le code source pour lire le mic, calcul de la FFT et le spectrogramme est gratuit & open source sous Licence MIT.
Comme une divulgation: je suis le tech lead sur le SciChart projet
J'ai développé un open source FFT en fonction de l'analyseur de spectre. Jetez un oeil à
http://som-itsolutions.blogspot.in/2012/01/fft-based-simple-spectrum-analyzer.html.
Vous pouvez également obtenir le code source de
https://github.com/sommukhopadhyay/FFTBasedSpectrumAnalyzer
Espère que cela va vous aider.