Arquivos

Archive for julho \21\UTC 2011

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

CategoriasDSP, Programação
Seguir

Obtenha todo post novo entregue na sua caixa de entrada.