Simple Audio Efects in Python
Um código simples, que demonstra como inverter um sinal de áudio gravado em python e como criar samples com Pitch alterado …
import pyaudio
import numpy as np
import wave
import struct
chunk = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 41000
RECORD_SECONDS = 5
swidth = 2
p = pyaudio.PyAudio()
stream = p.open(format = FORMAT,
channels = CHANNELS,
rate = RATE,
input = True,
output = True,
frames_per_buffer = chunk)
print “***gravando”,RECORD_SECONDS,”Segundo(s)***”
all = []
signal=[]
for i in range(0, RATE / chunk * RECORD_SECONDS):
data = stream.read(chunk)
all.append(data)
stream.write(data, chunk)
print “***Pronto***”
stream.stop_stream()
stream.close()
p.terminate()
WAVE_OUTPUT_FILENAME = “Original.wav”
data = ”.join(all)
wf = wave.open(WAVE_OUTPUT_FILENAME, ‘wb’)
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(data)
wf.close()
####Bad Voice####
WAVE_OUTPUT_FILENAME = “bad_voice.wav”
data = ”.join(all)
data = np.array(wave.struct.unpack(“%dh”%(len(data)/swidth), data))*2
wf = wave.open(WAVE_OUTPUT_FILENAME, ‘wb’)
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(data)
wf.close()
spf = wave.open(‘bad_voice.wav’, ‘rb’)
p = pyaudio.PyAudio()
stream = p.open(format =
p.get_format_from_width(spf.getsampwidth()),
channels = spf.getnchannels(),
rate = spf.getframerate(),
output = True)
data = spf.readframes(chunk)
print “***Escutando bad voice***”
while data != ”:
stream.write(data)
data = spf.readframes(chunk)
stream.close()
p.terminate()
print “Aguarde…”
####Inverse sample####
spf = wave.open(‘Original.wav’, ‘rb’)
Getsignal = spf.readframes(-1)
Getsignal = np.fromstring(Getsignal, ‘Int16′)
spf.close
for resultado in np.flipud(Getsignal):
signal.append(resultado)
signal = np.array(signal)
WAVE_OUTPUT_FILENAME = “inverse.wav”
wf = wave.open(WAVE_OUTPUT_FILENAME, ‘wb’)
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
for s in signal:
wf.writeframes(struct.pack(‘h’, int(s)))
wf.close()
spf = wave.open(‘inverse.wav’, ‘rb’)
p = pyaudio.PyAudio()
stream = p.open(format =
p.get_format_from_width(spf.getsampwidth()),
channels = spf.getnchannels(),
rate = spf.getframerate(),
output = True)
data = spf.readframes(chunk)
#se vc gravar alo escutara ola
print “***Escutando em modo inverso***”
while data != ”:
stream.write(data)
data = spf.readframes(chunk)
stream.close()
p.terminate()
Eng Eder de Souza