Ich habe die Soundeingabe mehrmals behandelt, aber dieses Mal konnte ich auch mit Rasipi4 stabil ein- und ausgeben, daher habe ich beschlossen, sie zusammenzufassen. Das Wichtigste ist, wie in Referenz 1 gezeigt. Letztes Jahr habe ich mit so etwas wie Referenz 2 gespielt. Ich denke darüber nach, dieses Jahr etwas anderes zu machen. 【Referenz】 1.PyAudio Input overflowed 2. [Scipy] Gespielt mit FFT-, STFT- und Wavelet-Konvertierung ♬ ~ ⑦ Echtzeitspektrogramm; Beschleunigung
Mit anderen Worten, wenn Sie beim Lesen die folgende Magie schreiben, tritt kein Überlauf auf und Sie können endlos aufnehmen.
# -*- coding:utf-8 -*-
import pyaudio
import matplotlib.pyplot as plt
import numpy as np
import wave
import struct
Speichern Sie den gelesenen Sound als WAV-Datei mit der folgenden Funktion.
def savewav(sig,sk):
RATE = 44100 #Abtastfrequenz
#Sinus-Konvertieren Sie von 32768 in 32767 Integer-Wert(zu signierten 16bit pcm)
swav = [(int(32767*x)) for x in sig] #32767
#Binär
binwave = struct.pack("h" * len(swav), *swav)
#Sinuswelle als WAV-Datei exportieren
w = wave.Wave_write("./wine/"+str(sk)+".wav")
params = (1, 2, RATE, len(binwave), 'NONE', 'not compressed')
w.setparams(params)
w.writeframes(binwave)
w.close()
Die Ein- und Ausgabe von Sound ist auf True eingestellt. Da Sprache (Satz) eingegeben wird, zeichnen Sie eine lange Zeit auf (102400/44100 = 2,3 Sekunden).
RATE=44100
p=pyaudio.PyAudio()
N=100
CHUNK=1024*N
stream=p.open(format = pyaudio.paInt16,
channels = 1,
rate = RATE,
frames_per_buffer = CHUNK,
input = True,
output = True) #Setzen Sie Input und Output gleichzeitig auf True
Und schließlich hat die kontinuierliche Aufnahme begonnen. Exception_on_overflow ist auf False gesetzt. sig wird durch 32768 geteilt.
sk=0
while stream.is_active():
input = stream.read(CHUNK, exception_on_overflow = False)
print(len(input))
sig =[]
sig = np.frombuffer(input, dtype="int16") / 32768
savewav(sig,sk)
fig, (ax1,ax2) = plt.subplots(2,1,figsize=(1.6180 * 4, 4*2))
lns1=ax1.plot(sig[0:1024] ,".-",color="red")
ax1.set_xticks(np.linspace(0, 882, 3))
ax1.set_ylabel("sig0")
ax1.set_title('short plot')
lns2=ax2.plot(sig[0:CHUNK], "-",color="blue")
ax2.set_xticks(np.linspace(0, 44100*2, 5))
ax2.set_ylabel("sig1")
ax2.set_title('long plot')
ax1.grid()
ax2.grid()
plt.pause(0.5)
plt.savefig("./wine/sound_{}.png ".format(sk))
plt.close()
sk+=1
output = stream.write(input)
Ah, äh, wie. .. Kontinuierliches Messergebnis von x-Achsenspeicher; 44100 = 1 Sek
・ Kontinuierliche Messung ist jetzt möglich
・ Ich möchte R-Python mit Sound verknüpfen.
Recommended Posts