[PYTHON] [Développement à distance] Application d'analyse vocale (pratique 4)

Dans l'exercice 3 de Dernière fois, nous avons pratiqué les composants du système "d'analyse vidéo". Cette fois, nous expliquerons les composants du système d'analyse de la voix en utilisant le "compteur de niveau" comme sujet. Les composants du système d'analyse audio sont presque les mêmes que ceux du système d'analyse vidéo. En analyse vidéo, les données à analyser sont données par la fonction new_video_frame (), alors qu'en analyse audio, la fonction new_audio_frame () La différence est qu'il est donné par (: //www.remotte.jp/ja/user_guide/program/functions).

Créer une nouvelle application

Créez une nouvelle application comme vous l'avez fait dans les exercices précédents. 1 アプリの新規作成.png

Ajout d'une source audio

Sélectionnez "Média" dans le menu en bas à gauche de l'écran "Configuration", et ajoutez un élément à utiliser comme entrée vocale. 2 標準マイクの追加.png

Analyse vocale ajoutée

Une fois que vous avez ajouté la source audio, il est temps d'ajouter les composants d'analyse audio. En tant que "type d'entrée / sortie" Analyse vocale (sortie de valeur uniquement) Analyse vocale (sortie vocale uniquement) Analyse vocale (sortie à la fois de la valeur et de la voix) Dans cet exercice d'indicateur de niveau, il vous suffit de trouver le niveau de l'entrée du son stéréo comme sortie après l'analyse (valeur maximale de l'amplitude dans l'image). Par exemple, vous pouvez déplacer le son lui-même vers le haut ou vers le bas d'une octave. Puisqu'il n'émet pas le son sans bruit, sélectionnez "Sortie audio (sortie de valeur uniquement)". De plus, pour afficher les niveaux maximaux gauche et droit comme résultat de l'analyse, sélectionnez «sens binaire général» comme «type de compatibilité». 3 音声解析の追加.png Ensuite, écrivez le code Python sur l'écran "Code". Dans l'analyse vocale, les fonctions   new_audio_frame(self, audio_frame, time_sec) Les données vocales à analyser sont notifiées côté Python, le processus d'analyse est effectué dans cette fonction et le résultat est notifié côté plateforme. Ici, les données audio sont stockées dans l'argument audio_frame en tant que type numpy.ndarray, et le temps écoulé (en secondes) depuis le début de l'application est stocké en tant que type float dans time_sec. Les données audio sont de 16 bits, 2 canaux, la fréquence d'échantillonnage est de 48 kHz et la fonction new_audio_frame () est appelée toutes les 20 millisecondes. En d'autres termes, cette fonction est appelée 50 fois par seconde et audio_frame stocke 960 valeurs d'amplitude stéréo pour chaque canal. Pour référence, au début de la fonction new_audio_frame (),   print(type(audio_frame), len(audio_frame), type(audio_frame[0])) Lorsque l'application est exécutée avec la description, ce qui suit est sorti sur la console.   <class 'numpy.ndarray'> 1920 <class 'numpy.int16'> De même, au début de la fonction,   print(time_sec) Lorsqu'elle est exécutée, 50 éléments d'information de temps sont émis toutes les secondes.

Attention! En tant que spécification de plate-forme, les composants d'analyse audio et vidéo n'apparaissent pas sur la console lorsque print () est exécuté dans la fonction \ _ \ _ init \ _ \ _ (). </ font>

Étant donné que la charge est trop lourde pour afficher la valeur maximale du niveau de voix sur l'écran du navigateur 50 fois par seconde, réglez-la sur 1/10 et placez un contrôle pour mettre à jour les données seulement 10 fois par seconde. Entrez ce qui suit comme code source dans le cas de.

python


    def __init__(self, sys, opt, log):
        self._sys = sys
        self._opt = opt
        self._log = log
        self._count = 0

    def new_audio_frame(self, audio_frame, time_sec):
        if self._count == 0:
            left = audio_frame[0::2]
            right = audio_frame[1::2]
            max_left = int(left.max() / 32767 * 100)
            max_right = int(right.max() / 32767 * 100)
            self._sys.set_value({'value': [max_left, max_right]})
        self._count += 1
        if self._count == 5:
            self._count = 0

4 コード.png Toutes les 0,1 seconde, la valeur maximale de chaque niveau à gauche et à droite est mise à l'échelle de 0 à 100 et sortie.

Modifier la page d'utilisation

Sur l'écran «Afficher l'élément», réglez comme suit. 5 表示項目.png Il convient de noter ici que le «nombre d'affichages» est réglé sur 4 comme dernière valeur de «l'indicateur de niveau». Ensuite, sélectionnez l'écran «Disposition». Comme indiqué ci-dessous, par défaut, le format d'expression de "deux affichage numérique" est défini pour les quatre éléments d'affichage. 6 デフォルトのレイアウト.png Comme vous pouvez le voir dans le code Python ci-dessus, comme résultat de l'analyse [Valeur maximale à gauche, valeur maximale à droite] Est une sortie, mais il existe une méthode pour extraire la valeur de gauche et la valeur de droite. Il existe un groupe appelé "Paramètres avancés" dans les paramètres des options sur le côté droit de l'écran. 7 高度な設定.png En définissant une valeur entière sur l'option "Extraire du tableau", l'élément à une position arbitraire peut être extrait des données du tableau. Par exemple, dans l'exemple de cette application, si vous entrez "0", si le nom de la clé est la valeur de "valeur" et qu'il s'agit d'un tableau, vous pouvez obtenir l'élément avec l'index "0", c'est-à-dire "gauche". Vous pouvez obtenir la valeur maximale de. De même, si "1" est défini, la "valeur maximale à droite" peut être obtenue. Utilisons cette option pour créer une mise en page comme celle ci-dessous. En d'autres termes, deux éléments d'affichage sont utilisés pour chacun des niveaux gauche et droit, l'un est affiché avec une valeur de 0 à 100 en utilisant le format d'expression «affichage d'une valeur numérique», et l'autre est affiché. Utilise un "compteur de pas (zone horizontale, colorée)" pour afficher graphiquement. 8 1つの数値の表示.png 9 段階メーター.png

Courir!

Lorsque vous exécutez l'application et que vous faites une voix forte dans le microphone, le niveau varie considérablement. 10 実行中.png

Résumé

Dans cet exercice, nous avons expérimenté les composants du système «d'analyse vocale». La fonction new_audio_frame () donne les données audio de la plateforme et je veux apprendre à les analyser. Bien qu'elle ne soit pas utilisée dans cet exercice, si le résultat de l'analyse produit une voix différente de la voix d'entrée, la fonction set_audio_frame () notifie le côté plateforme des données vocales.

Jusqu'à présent, j'ai expliqué le développement d'applications en utilisant Remotte avec l'approche de «s'y habituer plutôt que d'apprendre» en quatre exercices. La prochaine fois, j'organiserai les connaissances que j'ai acquises jusqu'à présent en programmation d'informations techniques.

Recommended Posts

[Développement à distance] Application d'analyse vocale (pratique 4)
[Développement à distance] Application d'analyse vidéo (Pratique 3)
[Développement à distance] Application de contrôle (pratique 2)
[Développement à distance] Commençons par le faire !! (Pratique 1)
Analyse vocale par python
Analyse vocale par python
Développement d'applications WEB à l'aide de django-development partie 1-
Développement d'applications Web avec Flask