[Einführung in den Klang] Lassen Sie uns die Einführung in den Klang von Python und R arrange arrangieren. Hören Sie sich den Klang der Explosion von Nikkei 255 an.

Ich werde die Einführung in den Klang in R-Sprache zusammenfassen. Ich habe Python schon mehrmals zusammengefasst, aber ich werde es zum Vergleich schreiben. Gleichzeitig möchte ich den Klang der Explosion von Nikkei 225 hören, bei der es sich um aperiodische Zeitreihendaten handelt. Die Referenz ist wie folgt. Referenz ③ zeigt, wie tuneR installiert wird. ①How to get started with sound in R (pdf) Play sound in PythonBasic Sound Processing with R

・ Ausgabe als Ton

Umgebung
Windows10
RStudio;Version 1.2.5042
python3.6.10
mic;hdmi

Machen Sie einen Sound mit Python

Ich habe es schon mehrmals gemacht, aber speichere die CSV-Datei und die zuletzt vorbereitete numerische Zeichenfolge als Sound mit dem folgenden Code als WAV-Datei und gebe sie aus.

CSV schreiben und lesen

import csv
with open('pl3_seasonal.csv', 'w') as f:
    fieldnames = ['seasonal']
    writer = csv.DictWriter(f, fieldnames=fieldnames)
    writer.writeheader()
    writer = csv.writer(f, delimiter='\n')
    for i in range(20):
        writer.writerow(pl3)

Ich konnte 4 Daten in Pandas für einen etwas allgemeineren Zweck wie folgt speichern und verwenden.

df = pd.DataFrame({'seasonal': pl3,
                   'trend': pl2,
                   'resid':pl4,
                   'observed':pl1})
df.to_csv('seasonal_trend.csv', index=False)

Ich habe unten 20 Mal hinzugefügt.

for i in range(20):
    df.to_csv('seasonal_trend.csv', mode='a', header=False, index=False)

Das Lesen der CSV-Datei ist wie folgt.

df = pd.read_csv('seasonal_trend.csv')
pl3_seasonal = df['seasonal']

Erstellung und Wiedergabe von Audiodateien

Erstellen und speichern Sie die Sounddatei des Hauptteils mit dem folgenden Code.

import wave
import numpy as np
import struct
import pyaudio

fs = 800 #Abtastfrequenz
#Sinus-Konvertieren Sie von 32768 in 32767 Integer-Wert(zu signierten 16bit pcm)
pl3_n = 32767*pl3_seasonal/max(pl3_seasonal)
swav = [int(x ) for x in pl3_n]
#Binär
binwave = struct.pack("h" * len(swav), *swav)
#Sinuswelle als WAV-Datei exportieren
w = wave.Wave_write("pl3_seasonal.wav")
params = (1, 2, fs, len(binwave), 'NONE', 'not compressed')
w.setparams(params)
w.writeframes(binwave)
w.close()

Und Sie können den Sound mit dem folgenden Code abspielen. Im Folgenden wird die oben gespeicherte 'pl3_seasonal.wav' abgespielt.

from playsound import playsound

playsound('pl3_seasonal.wav')

Machen Sie einen Ton mit R.

Die Tonausgabe ist die erste in R, aber einfach. Lesen Sie einfach die Audiodatei "mywave.wav" im Verzeichnis und machen Sie einen Ton.

library(tuneR) #load tuenR package

mwav = readWave("mywave.wav")
play(mwav)

Im Folgenden wird die Welle mit einer Sinuswelle berechnet, in eine WAV-Datei konvertiert und ausgegeben.

#make a simple sine wave and play
t = seq(0, 3, 1/8000)
u = (2^15-1)*sin(2*pi*440*t)
w = Wave(u, samp.rate = 8000, bit=16)
play(w)

Es wird unten als "w_1.wav" gespeichert, dann geladen und abgespielt.

writeWave(w, 'w_1.wav')
rw = readWave("w_1.wav")
play(rw)

Ich habe oben festgestellt, dass Sie mit einer numerischen Zeichenfolge eine WAV-Datei erstellen und speichern können. Daher werde ich im Folgenden die vom Zeitreihenelement zerlegten decompose_seasonal-Daten in eine WAV-Datei konvertieren und als Sound ausgeben. Und schließlich speichern Sie die WAV-Datei.

ds <- read.csv(file = 'decompose_seasonal.csv')
ds_w = Wave(32678/max(abs(ds))*ds, samp.rate = 8000, bit=16)
play(ds_w)
writeWave(ds_w, 'ds_w.wav')

Hören Sie das Geräusch der durchschnittlichen Explosion von Nikkei

Obwohl es sich um aperiodische Daten handelt, ist der Aktienkurs ein typisches Beispiel für etwas, das sich beim Vibrieren ändert. Zerlegen wir also die jüngsten Kursschwankungen, wandeln sie in Sounds um und hören uns diesen Sound an. ** * Bitte imitieren Sie dies nicht, da ich mich darauf freue ** Vorerst werden wir es mit dem R-Code implementieren. Laden Sie die neuesten Daten für Nikkei 225 herunter und bereiten Sie sie vor. hz = 18 hat keine Periode, ist jedoch als Variable definiert, damit es in verschiedenen Periodenintervallen analysiert werden kann. Da die Anzahl der Daten nicht immer ein ganzzahliges Vielfaches von hz ist, haben wir ls eingeführt, um die Anzahl der Daten anzupassen.

data <- read.csv("./industrial/nikkei_225_.csv",encoding = "utf-8")
hz=18
ls = round(908/hz)*hz
IIP <- ts(data,start=c(1),frequency=1)
IIP=IIP[0:ls]
IIP <- ts(IIP,start=c(1),frequency=hz)

decompose_IIP <- decompose(IIP)

Trend, zufällig, saisonal, beobachtet (IIP) sind wie folgt

plot(decompose_IIP$trend)
plot(decompose_IIP$random)
plot(decompose_IIP$seasonal[0:72])
lines(decompose_IIP$seasonal[0:72])
seasonal random
plot_seasonal18.png random.png
trend observed
trend.png observed.png

Gleiches Bild wie oben, aber finden Sie saisonales_Bier, indem Sie m_Bier wie unten gezeigt mitteln und 3 davon ausgeben.

m_beer = t(matrix(data = decompose_IIP$seasonal, nrow = hz))
seasonal_beer = colMeans(m_beer, na.rm = T)
plot(as.ts(rep(seasonal_beer,3)))

Im Gegensatz zum obigen Diagramm wurde es als Liniendiagramm erhalten. Der Inhalt ist der gleiche. seasonal18.png Dies wurde als 130 Stück an csv ausgegeben.

write.csv(as.ts(rep(seasonal_beer,130)), file = 'decompose_seasonal130.csv')

Von hier aus ist es der gleiche Akkord wie bei der obigen Klangerzeugung. Lesen Sie also die CSV-Datei wie folgt.

ds <- read.csv(file = 'decompose_seasonal130.csv')

Auch hier wird die tuneR-Bibliothek verwendet, um die folgenden Sounds zu erzeugen. Auf diese Weise könnte ein Ton erzeugt werden. Ich möchte den Klang maximieren, also standardisiere ich die Zahlen wie Python.

library(tuneR)
ds_w = Wave(32678/max(abs(ds[2]))*ds[2], samp.rate = 150*hz, bit=16)
play(ds_w)

Speichern Sie es schließlich in einer Datei.

file_n <- paste('ds_',hz,'.wav')
writeWave(ds_w, file_n)

Auf diese Weise ändert sich die typische Schallwellenform wie folgt, wenn hz geändert wird. Mit anderen Worten, es sieht so aus, als ob der Vokal irgendwann reproduziert wird. Der tatsächliche Klang klingt ähnlicher als die Wellenform, daher bezweifle ich buchstäblich meine Ohren.

hz Vokal schließen Wellenform Vokal
18 Ah seasonal18.png a_real.jpg
40 e 2_e_ds_ 40 .png e_real.jpg
128 ich 3_i_ds_ 128 .png i_real.jpg
16 Oh 5_o_ds_ 16 .png o_real.jpg
17 U. 5_u_ds_ 17 .png u_real.jpg

Die erhaltenen Sounddaten werden unten platziert

R_Audio / data / Unter dem oben genannten R_Audio/data/1_a_ds_ 18 .wav Bitte herunterladen und spielen.

Über Daten

Ich frage mich, warum dies geschieht. Schauen wir uns also die Datenstruktur an. Setze hz = 16 wie unten gezeigt und zerlege () in Gruppen von jeweils 16. Erstens, wenn Sie die Daten ausgeben

hz=16
ls = round(908/hz)*hz
IIP <- ts(data,start=c(1),frequency=1)
IIP=IIP[0:ls]
IIP <- ts(IIP,start=c(1),frequency=hz)
print(IIP[0:ls])
> source('C:/R_data/decompose_audio.R')
  [1] 16820 17200 16930 16970 16820 16870 17030 16560 16800 16790 17410 17510 16870 16790 17230 17280
 [17] 17460 17780 18180 17980 17700 17120 17220 17560 17520 17710 17920 17920 17200 17140 17240 17270
...
[897] 20070 19940 19920 19930 20010 19940 19990 20010 20050 20000 20020 20010    NA    NA    NA    NA

Und der wichtige Teil ist wie folgt

decompose_IIP <- decompose(IIP)
print(decompose_IIP$seasonal)

Mit anderen Worten, decompose_IIP $ saisonal wird wie unten gezeigt durch 16 Teile gemittelt.

Time Series:
Start = c(1, 1) 
End = c(57, 16) 
Frequency = 16 
  [1]  16.659497  17.697443  16.413961  16.955256 -14.905540  -7.621449  13.458097  10.605824
  [9]  -2.302557 -11.895191   4.550122  17.479809 -19.166396 -26.945414 -21.738941  -9.244521
...
[897]  16.659497  17.697443  16.413961  16.955256 -14.905540  -7.621449  13.458097  10.605824
[905]  -2.302557 -11.895191   4.550122  17.479809 -19.166396 -26.945414 -21.738941  -9.244521

In der Grafik sieht es folgendermaßen aus: Wenn Sie die Diagramme zählen, können Sie sehen, dass es 16 Zyklen gibt. 5_o_ds_ 16_seasonal .png

Diese Daten werden abgespielt. Und das Wichtigste ist, dass wenn Sie die Aktienkursdaten als periodisch betrachten und sie als Gruppe mit einer geeigneten Anzahl mitteln, einige Daten eine Datenzeichenfolge ähnlich einem Vokal ergeben. Selbst wenn dieselbe Verarbeitung für eine vollständige Zufallszahlenfolge durchgeführt wird, wird ein solches Ergebnis nicht erhalten, aber ich denke, dass es vorkommt, dass die Aktienkursdaten eine solche Struktur enthalten.

** Ah ~, Sie können mit dieser Methode das ursprüngliche Explosionsgeräusch nicht hören. .. .. ** **.

Zusammenfassung

・ Ich habe die R- und Python-Soundeinführung verglichen ・ Ich habe versucht zu generieren, indem ich den Aktienkurs, bei dem es sich um aperiodische Daten handelt, zerlegt und die saisonalen Schwankungen, die zu periodischen Daten wurden, in Schall umgewandelt habe. ・ Es wurde festgestellt, dass durch Abtasten in einem geeigneten Zyklus ein Vokal erzeugt wird, der einem Vokal ähnlich ist.

・ Ich werde etwas mehr entwickeln und versuchen, mithilfe von decompose () und Klangerzeugung Vorhersagen zu treffen.

Recommended Posts

[Einführung in den Klang] Lassen Sie uns die Einführung in den Klang von Python und R arrange arrangieren. Hören Sie sich den Klang der Explosion von Nikkei 255 an.
[Einführung in die Elementzerlegung] Lassen Sie uns Zeitreihenanalysemethoden in R und Python arrange anordnen
[Einführung in Python] Ich habe die Namenskonventionen von C # und Python verglichen.
Einführung in Python Bereiten wir die Entwicklungsumgebung vor
[Einführung in Python] Grundlegende Verwendung der Bibliothek matplotlib
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit dplyr von R und pandas von Python zu vergleichen
[Einführung in Data Scientists] Grundlagen von Python ♬ Funktionen und Klassen
Ich möchte die Natur von Python und Pip kennenlernen
[Einführung in Python] Kombinieren Sie Nikkei-Durchschnitts- und NY Dow-CSV-Daten
[Raspi4; Einführung in den Sound] Stabile Aufzeichnung der Toneingabe mit Python ♪
Vergleichen wir die Fourier-Transformation der synthetisierten Schallquelle und die Zusammensetzung der Fourier-Transformation
[Einführung in Python3 Tag 1] Programmierung und Python
[Python] PCA-Scratch im Beispiel "Einführung in die multivariate Analysemethode"
[Python] So erhalten Sie den ersten und den letzten Tag des Monats
[Einführung in Python] Verwenden wir Pandas
[Einführung in die Udemy Python3 + -Anwendung] 69. Import des absoluten Pfads und des relativen Pfads
[Einführung in die Udemy Python3 + -Anwendung] 12. Indizieren und Schneiden von Zeichenketten
Von der Einführung von JUMAN ++ bis zur morphologischen Analyse von Japanisch mit Python
[Einführung in Python] Verwenden wir Pandas
Konvertieren Sie das Ergebnis von Python Optparse, um es zu diktieren und zu verwenden
[Einführung in Data Scientists] Grundlagen von Python ♬ Bedingte Verzweigung und Schleifen
[Einführung in Python] Verwenden wir Pandas
[Einführung in Python] Verwendung des Booleschen Operators (und ・ oder ・ nicht)
[Einführung in Data Scientists] Grundlagen von Python ♬ Funktionen und anonyme Funktionen usw.
[Python] So legen Sie die Position und Größe der Fensteranzeige von matplotlib fest
[Einführung in Python] Was ist der Unterschied zwischen einer Liste und einem Taple?
[Einführung in Python] So sortieren Sie den Inhalt einer Liste effizient mit Listensortierung
Ich habe versucht, die Beschleunigung von Python durch Cython zu verifizieren und zu analysieren
[Einführung in Python] Eine ausführliche Erklärung der in Python verwendeten Zeichenkettentypen!
[Einführung in Python] Wie wird mit der continue-Anweisung wiederholt?
[Einführung in Python] Verwenden wir foreach mit Python
Einfache Einführung in die Python3-Serie und OpenCV3
[Einführung in Data Scientist] Grundlagen von Python ♬
Lassen Sie uns mit Python Receive spielen und den Text des Eingabeformulars speichern / anzeigen
Erstellen Sie eine Python-Umgebung, um die Theorie und Implementierung von Deep Learning zu erlernen
Einführung in die Zeitreihenanalyse ~ Saisonales Anpassungsmodell ~ In R und Python implementiert
[Einführung in Python] So erhalten Sie den Datenindex mit der for-Anweisung
[Einführung in Python3 Tag 12] Kapitel 6 Objekte und Klassen (6.3-6.15)
Zusammenfassung der Unterschiede zwischen PHP und Python
Die Antwort von "1/2" unterscheidet sich zwischen Python2 und 3
[Einführung in die Udemy Python3 + -Anwendung] 19. Kopie der Liste
Angeben des Bereichs von Ruby- und Python-Arrays
[Einführung in Python3, Tag 22] Kapitel 11 Parallele Verarbeitung und Vernetzung (11.1 bis 11.3)
Vergleichen Sie die Geschwindigkeit von Python Append und Map
[Einführung in Python3 Tag 11] Kapitel 6 Objekte und Klassen (6.1-6.2)
[Einführung in Python3 Tag 20] Kapitel 9 Enträtseln des Webs (9.1-9.4)
Einführung in Python mit Atom (unterwegs)
R- und Python-Schreibvergleich (euklidische Methode der gegenseitigen Teilung)
Liste des zu verschiebenden und zu merkenden Python-Codes
[Einführung in den Algorithmus] Finden Sie den kürzesten Weg [Python3]
Berücksichtigung der Stärken und Schwächen von Python
Von der Einführung von Pyethapp bis zur Vertragsabwicklung
Eine Einführung in die GUI-Software der Klassenplattform, die mit Python / Tkinter erstellt wurde! (Und viele Try and Error)! (Während des Schreibens)
[Einführung in Python] Grundlegende Verwendung von Lambda-Ausdrücken
[Einführung in Python] Grundlegende Verwendung der Bibliothek scipy, die Sie unbedingt kennen müssen
Extrahieren Sie Bilder und Tabellen mit Python aus PDF, um die Berichtslast zu verringern
Ich habe versucht, das Artikel-Update des Livedoor-Blogs mit Python und Selen zu automatisieren.
[Maschinelles Lernen] "Erkennung von Abnormalitäten und Erkennung von Änderungen" Zeichnen wir die Abbildung von Kapitel 1 in Python.
[Einführung in Python] Zusammenfassung der Funktionen und Methoden, die häufig in Python vorkommen [Problemformat]
Einführung in das maschinelle Lernen ~ Zeigen wir die Tabelle der K-Methode für den nächsten Nachbarn ~ (+ Fehlerbehandlung)