[PYTHON] Essayez de produire de l'audio avec M5 STACK

Écrivez une note de ce que vous avez appris de nouveau lors de la sortie de musique avec un micro-ordinateur

En réalisant la technologie, je me suis référé à l'article suivant de "M. Chikuwa". http://nn-hokuson.hatenablog.com/entry/2017/09/01/092945

Qu'est-ce que le son

Pour le moment, je savais que le son était un composite de sinusoïdes de différentes fréquences. J'ai commencé par le vérifier en Python.

sumsound.PNG

D'une manière ou d'une autre, cela ressemble à un signal vocal.

Le code réalisé est indiqué ci-dessous.


import numpy as np
import matplotlib.pyplot as plt

#la fréquence[Hz]
f1 = 100
f2 = 500
f3 = 1000
f4 = 10000
f = [f1,f2,f3,f4]

#amplitude[V]
A1 = 5
A2 = 3
A3 = 1
A4 = 0.1
A = [A1,A2,A3,A4]

#temps
t = np.arange(0,0.01,0.00001)

#une fonction
fig = plt.figure()
#Ajouter des axes
ax = fig.add_subplot(111)

y = []

for i in range(4):
    y.append(A[i]*np.sin(2*np.pi*f[i]*t))
    plt.plot(t,y[i])
    #Exécution de dessin

#Paramètres d'étiquette d'axe
ax.set_xlabel("time[s]", size = 14, weight = "light")
ax.set_ylabel("Volatage[V]", size = 14, weight = "light")
plt.show()

La synthèse des ondes est réalisée par la somme des ondes sinusoïdales de chaque fréquence

plt.plot(t,sum(y))

Sortie audio

Si vous faites vibrer l'air avec une sorte de signal, il doit être reconnu comme une sorte de son.

Nous utilisons un haut-parleur comme méthode pour faire vibrer l'air. (Il semble que ce haut-parleur convertit les signaux électriques en vibrations)

Un signal PWM est généralement utilisé pour donner un signal électrique à un haut-parleur.

スピーカー.PNG

** Image de l'onde composite appliquée comme entrée au haut-parleur **

Flux de mise en œuvre

Cette fois, nous visions à produire des fichiers MP3 sous forme audio. J'ai utilisé M5STACK comme micro-ordinateur pour la commande vocale.

** 1. Convertir le format de fichier MP3 ** En faisant ce travail, je me suis référé au site suivant. http://nn-hokuson.hatenablog.com/entry/2017/09/01/092945

J'ai préparé le fichier MP3 que je veux lire et je l'ai converti sur le site suivant. https://audacity.softonic.jp/

Ici, changez le format de fichier des données originales (fichier MP3 préparé) Il est possible de déterminer une fréquence d'échantillonnage arbitraire et de créer des données avec une capacité plus légère que les données d'origine. Parce que la capacité de la mémoire est limitée lors du montage sur un micro-ordinateur tel que M5STACK Il est nécessaire de consulter la durée de lecture et la fréquence d'échantillonnage.

** 2. Convertir en fichier texte **

Prenant comme exemple la musique échantillonnée Enregistrer dans le format d'enregistrement suivant save.PNG

Ensuite, le nom de fichier .raw sera généré. Mettez-le sur le terminal Linux

xxd -i nom de fichier.raw

(Nommez provisoirement le fichier sound.raw)

unsigned char sound_raw[] ={
//Le résultat de l'échantillonnage de la musique
}

unsigned int  sound_raw_len = xx

Il est sorti avec. Transformez ce résultat en un script Arduino En copiant, le fichier audio est stocké dans la mémoire d'Arduino. Vous pouvez maintenant l'enregistrer.

** 3. Implémenté dans M5 STACK **

Avec M5STACK, il était possible de réaliser avec le code suivant.

#include <M5Stack.h>
unsigned char sound_raw[] ={
//Entrez le résultat de l'échantillonnage de la musique
}

unsigned int  sound_raw_len = xx; //Nombre d'échantillons
unsigned char pwm;

void play() {
  for (int i = 0; i < sound_raw_len; i++) {
    pwm = sound_raw[i];
    dacWrite(25, pwm); //Pour M5STACK, 25PIN est connecté au haut-parleur.
    delayMicroseconds(xx);// xx:Dépend de la fréquence d'échantillonnage
  }
   dacWrite(25, 0); //speakeroff
} 

void setup() {

  M5.begin();

  delay(500);

  M5.Lcd.fillScreen(WHITE);
}

void loop()
{
   if(M5.BtnA.wasPressed())//Son lorsque vous appuyez sur le bouton A
    {
        play();
    }

    M5.update();
}

** Supplément ** J'ai exécuté ce code sur Arduino Nano et cela n'a pas fonctionné. En termes simples, c'était comment définir la fréquence porteuse et la séquence de pwm. J'espère pouvoir écrire à ce sujet dans un autre article.

Recommended Posts

Essayez de produire de l'audio avec M5 STACK
Essayez de défier le sol par récursif
Essayez la sortie Python avec Haxe 3.2
Essayez d'exploiter Facebook avec Python
Sortie vers un fichier csv avec Python
Essayez le traitement du signal audio avec librosa-Beginner
Essayez de reproduire un film couleur avec Python
Sortie du journal Python vers la console avec GAE
Essayez de prédire les fleurs de cerisier avec XG Boost
Essayez rapidement de visualiser votre ensemble de données avec des pandas
Premier YDK à essayer avec Cisco IOS-XE
Essayez de générer une image avec aliénation
Essayez de créer votre propre AWS-SDK avec bash
Essayez de résoudre le problème du fizzbuzz avec Keras
3.14 π jour, alors essayez de sortir en Python
Essayez d'agréger les données de musique doujin avec des pandas
Essayez de résoudre le diagramme homme-machine avec Python
Essayez d'extraire le document Azure document DB avec pydocumentdb
Essayez de dessiner une courbe de vie avec python
Essayez de communiquer avec EV3 et PC! (MQTT)
Comment essayer l'algorithme des amis d'amis avec pyfof
Essayez de créer un code de "décryptage" en Python
J'ai essayé de sortir LLVM IR avec Python
Essayez de générer automatiquement des documents Python avec Sphinx
Essayez de créer un groupe de dièdre avec Python
Sortez la docstring de la fonction de test dans le rapport avec pytest-html
Essayez de rendre le client FTP le plus rapide avec Pythonista
Essayez de détecter les poissons avec python + OpenCV2.4 (inachevé)
Essayez de gratter avec Python.
Procédure pour charger MNIST avec python et sortie en png
Essayez de résoudre le livre des défis de programmation avec python3
Sortie PDF avec Django
Sortie Markdown avec Django
Convertir 202003 en 2020-03 avec les pandas
Faisons un outil de veille de commande avec python
Essayez de créer un Checkbutton dynamiquement avec Tkinter en Python
Visualisons la pièce avec tarte aux râpes, partie 1
Essayez de résoudre le problème d'affectation du médecin de formation avec Python
Essayez de prédire le taux de change (FX) avec un apprentissage automatique non approfondi
Essayez de créer une API RESTful avec MVC à l'aide de Flask 1.0.2
Développement basé sur les schémas avec Responder: essayez d'afficher l'interface utilisateur Swagger
Sortie PDF avec WeasyPrint
Comment générer un CSV d'en-tête multiligne avec des pandas
Entrée / sortie audio Python
Essayez d'obtenir le contenu de Word avec Golang
Essayez d'implémenter yolact
[Neo4J] ④ Essayez de gérer la structure du graphe avec Cypher
Essayez SNN avec BindsNET
Un échantillon pour essayer rapidement les machines de factorisation avec fastFM
Essayez de falsifier les demandes de l'iPhone avec Burp Suite
[Python-pptx] Afficher les informations de police PowerPoint au format csv avec python
Essayez de créer une forme d'onde (spectre audio) qui se déplace en fonction du son avec python
Essayez la régression avec TensorFlow
Essayez de créer un réseau de neurones / d'apprentissage en profondeur avec scratch