[PYTHON] Versuchen Sie, Audio mit M5 STACK auszugeben

Schreiben Sie auf, was Sie bei der Musikausgabe mit einem Mikrocomputer neu gelernt haben

Bei der Realisierung der Technologie habe ich auf den folgenden Artikel von "Mr. Chikuwa" verwiesen. http://nn-hokuson.hatenablog.com/entry/2017/09/01/092945

Was ist Ton?

Vorläufig wusste ich, dass der Klang aus Sinuskurven verschiedener Frequenzen zusammengesetzt war. Ich habe es zunächst in Python überprüft.

sumsound.PNG

Irgendwie sieht es aus wie ein Sprachsignal.

Der realisierte Code wird unten gezeigt.


import numpy as np
import matplotlib.pyplot as plt

#Frequenz[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]

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

#Funktion
fig = plt.figure()
#Achsen hinzufügen
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])
    #Ausführung zeichnen

#Einstellungen für die Achsenbeschriftung
ax.set_xlabel("time[s]", size = 14, weight = "light")
ax.set_ylabel("Volatage[V]", size = 14, weight = "light")
plt.show()

Die Wellensynthese wird durch die Summe der Sinuswellen jeder Frequenz realisiert

plt.plot(t,sum(y))

Audioausgang

Wenn Sie die Luft mit einem Signal vibrieren lassen, sollte dies als ein Geräusch erkannt werden.

Wir verwenden einen Lautsprecher als Methode, um die Luft zu vibrieren. (Es scheint, dass dieser Lautsprecher elektrische Signale in Vibrationen umwandelt.)

Ein PWM-Signal wird im Allgemeinen verwendet, um einem Lautsprecher ein elektrisches Signal zu geben.

スピーカー.PNG

** Bild einer zusammengesetzten Welle, die als Eingang für den Lautsprecher verwendet wird **

Implementierungsablauf

Dieses Mal wollten wir MP3-Dateien als Audio ausgeben. Ich habe M5STACK als Mikrocomputer für die Sprachsteuerung verwendet.

** 1. MP3-Dateiformat konvertieren ** Bei dieser Arbeit habe ich auf die folgende Seite verwiesen. http://nn-hokuson.hatenablog.com/entry/2017/09/01/092945

Ich habe die MP3-Datei, die ich abspielen möchte, vorbereitet und auf der nächsten Site konvertiert. https://audacity.softonic.jp/

Ändern Sie hier das Dateiformat der Originaldaten (vorbereitete MP3-Datei) und Es ist möglich, eine beliebige Abtastfrequenz zu bestimmen und Daten mit einer geringeren Kapazität als die Originaldaten zu erstellen. Weil die Speicherkapazität bei der Montage auf einem Mikrocomputer wie M5STACK begrenzt ist Es ist notwendig, die Wiedergabezeit und die Abtastfrequenz zu konsultieren.

** 2. In Textdatei konvertieren **

Am Beispiel von gesampelter Musik Speichern Sie im folgenden Speicherformat save.PNG

Dann wird der Dateiname .raw generiert. Legen Sie es auf das Linux-Terminal

xxd -Ich Dateiname.raw

(Benennen Sie vorläufig die Datei sound.raw)

unsigned char sound_raw[] ={
//Das Ergebnis des Samplings von Musik
}

unsigned int  sound_raw_len = xx

Es wird ausgegeben mit. Verwandeln Sie dieses Ergebnis in ein Arduino-Skript Durch das Kopieren wird die Audiodatei im Speicher von Arduino gespeichert. Sie können es jetzt speichern.

** 3. Implementiert in M5 STACK **

Mit M5STACK war es möglich, mit dem folgenden Code zu realisieren.

#include <M5Stack.h>
unsigned char sound_raw[] ={
//Geben Sie das Ergebnis des Samplings von Musik ein
}

unsigned int  sound_raw_len = xx; //Anzahl von Beispielen
unsigned char pwm;

void play() {
  for (int i = 0; i < sound_raw_len; i++) {
    pwm = sound_raw[i];
    dacWrite(25, pwm); //Bei M5STACK ist 25PIN an den Lautsprecher angeschlossen.
    delayMicroseconds(xx);// xx:Hängt von der Abtastfrequenz ab
  }
   dacWrite(25, 0); //speakeroff
} 

void setup() {

  M5.begin();

  delay(500);

  M5.Lcd.fillScreen(WHITE);
}

void loop()
{
   if(M5.BtnA.wasPressed())//Ton, wenn Taste A gedrückt wird
    {
        play();
    }

    M5.update();
}

** Ergänzung ** Ich habe diesen Code auf Arduino Nano ausgeführt und es hat nicht funktioniert. Einfach ausgedrückt war es, wie die Trägerfrequenz und die Sequenz von pwm definiert werden. Ich hoffe, ich kann darüber in einem anderen Artikel schreiben.

Recommended Posts

Versuchen Sie, Audio mit M5 STACK auszugeben
Versuchen Sie, den Boden durch Rekursion herauszufordern
Probieren Sie die Python-Ausgabe mit Haxe 3.2 aus
Versuchen Sie, Facebook mit Python zu betreiben
Ausgabe in eine CSV-Datei mit Python
Probieren Sie die Audiosignalverarbeitung mit librosa-Beginner aus
Versuchen Sie, Farbfilme mit Python zu reproduzieren
Python-Protokoll mit GAE an die Konsole ausgeben
Versuchen Sie, Kirschblüten mit xg Boost vorherzusagen
Versuchen Sie schnell, Ihren Datensatz mit Pandas zu visualisieren
Erster Versuch von YDK mit Cisco IOS-XE
Versuchen Sie, ein Bild mit Entfremdung zu erzeugen
Versuchen Sie, Ihr eigenes AWS-SDK mit bash zu erstellen
Versuchen Sie, das Fizzbuzz-Problem mit Keras zu lösen
3,14 π Tag, versuchen Sie also, in Python auszugeben
Versuchen Sie, Doujin-Musikdaten mit Pandas zu aggregieren
Versuchen Sie, das Mensch-Maschine-Diagramm mit Python zu lösen
Versuchen Sie, das Dokument der Azure-Dokumentdatenbank mit pydocumentdb zu extrahieren
Versuchen Sie, mit Python eine Lebenskurve zu zeichnen
Versuche mit EV3 und PC zu kommunizieren! (MQTT)
So testen Sie den Friends-of-Friends-Algorithmus mit pyfof
Versuchen Sie, in Python einen "Entschlüsselungs" -Code zu erstellen
Ich habe versucht, LLVM IR mit Python auszugeben
Versuchen Sie, Python-Dokumente automatisch mit Sphinx zu generieren
Versuchen Sie, mit Python eine Diedergruppe zu bilden
Geben Sie die Testfunktion docstring mit pytest-html in den Bericht ein
Versuchen Sie, Client-FTP mit Pythonista am schnellsten zu machen
Versuchen Sie, Fische mit Python + OpenCV2.4 (unvollendet) zu erkennen.
Versuchen Sie es mit Python.
Prozedur zum Laden von MNIST mit Python und zur Ausgabe an png
Versuchen Sie, das Programmier-Herausforderungsbuch mit Python3 zu lösen
PDF mit Django ausgeben
Markdown-Ausgabe mit Django
Konvertieren Sie 202003 bis 2020-03 mit Pandas
Lassen Sie uns ein Befehls-Standby-Tool mit Python erstellen
Versuchen Sie, mit Tkinter in Python dynamisch einen Checkbutton zu erstellen
Stellen wir uns den Raum mit Raspeltorte vor, Teil 1
Versuchen Sie, das Problem der Zuweisung von Schulungsärzten mit Python zu lösen
Versuchen Sie, den Wechselkurs (FX) mit nicht tiefem maschinellem Lernen vorherzusagen
Versuchen Sie, mit MVC eine RESTful-API mit Flask 1.0.2 zu erstellen
Schemagesteuerte Entwicklung mit Responder: Versuchen Sie, die Swagger-Benutzeroberfläche anzuzeigen
PDF mit WeasyPrint ausgeben
So geben Sie die CSV eines mehrzeiligen Headers mit Pandas aus
Python-Audioeingabe / -ausgabe
Versuchen Sie, den Inhalt von Word mit Golang zu erhalten
Versuchen Sie, yolact zu implementieren
[Neo4J] ④ Versuchen Sie, die Diagrammstruktur mit Cypher zu handhaben
Versuchen Sie SNN mit BindsNET
Ein Beispiel, um Faktorisierungsmaschinen schnell mit fastFM auszuprobieren
Versuchen Sie, Anfragen von iPhone mit Burp Suite zu manipulieren
[Python-pptx] Gibt PowerPoint-Schriftinformationen mit Python in CSV aus
Versuchen Sie, mit Python eine Wellenform (Audiospektrum) zu erstellen, die sich entsprechend dem Klang bewegt
Versuchen Sie eine Regression mit TensorFlow
Versuchen Sie, ein Deep Learning / Neuronales Netzwerk mit Scratch aufzubauen