J'ai couvert l'entrée audio plusieurs fois, mais cette fois j'ai pu entrer et sortir de manière stable même avec Rasipi4, alors j'ai décidé de le résumer. La chose importante est comme indiqué dans la référence 1. L'année dernière, je jouais avec quelque chose comme Reference 2. Je pense faire quelque chose d'un peu différent cette année. 【référence】 1.PyAudio Input overflowed 2. [Scipy] Joué avec la conversion FFT, STFT et ondelettes ♬ ~ ⑦ Spectrogramme en temps réel; Accélérer
En d'autres termes, si vous écrivez la magie suivante lors de la lecture, le débordement ne se produira pas et vous pourrez enregistrer à l'infini.
# -*- coding:utf-8 -*-
import pyaudio
import matplotlib.pyplot as plt
import numpy as np
import wave
import struct
Enregistrez le son lu sous forme de fichier wav avec la fonction suivante.
def savewav(sig,sk):
RATE = 44100 #Fréquence d'échantillonnage
#Onde sinusoïdale-Convertir de 32768 à 32767 valeur entière(à 16 bits pcm signé)
swav = [(int(32767*x)) for x in sig] #32767
#Binaire
binwave = struct.pack("h" * len(swav), *swav)
#Exporter l'onde sinusoïdale sous forme de fichier wav
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()
L'entrée et la sortie du son sont réglées sur True. Puisque la voix (phrase) est entrée, enregistrez une longue durée (102400/44100 = 2,3 s).
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) #Réglez l'entrée et la sortie sur True en même temps
Et enfin, l'enregistrement continu a commencé. Exception_on_overflow est défini sur False. sig est divisé par 32768.
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, euh, eh. .. Résultat de mesure en continu de Mémoire axe x; 44100 = 1sec
・ Une mesure continue est désormais possible
・ Je souhaite associer R-python au son.
Recommended Posts