class Monitor(threading.Thread): '''audio monitor thread''' def __init__(self, device, rate, period): threading.Thread.__init__(self) self.pcm = PCM(PCM_PLAYBACK, PCM_NORMAL, device) self.pcm.setformat(PCM_FORMAT_S16_LE) self.pcm.setchannels(2) self.pcm.setrate(rate) self.pcm.setperiodsize(period) self.queue = Queue.Queue(256) self.__stop = False def run(self): '''run loop''' while True: qsize = self.queue.qsize() if qsize == 0 and self.__stop: break try: block = self.queue.get(False) self.pcm.write(block) except Queue.Empty: time.sleep(0.01) def stop(self): '''set stop flag''' self.__stop = True
class AudioCapture(object): def __init__(self): os = system() if os == 'Windows': self.usuario = environ['USERNAME'] else: self.usuario = environ['USER'] try: self.capturarAudio() self.guardarAudio() except Exception as e: print e def capturarAudio(self): self.captura = PCM(PCM_CAPTURE) self.captura.setchannels(1) # default 2 self.captura.setrate(44100) # default 44100 self.captura.setformat(PCM_FORMAT_S16_LE) # default PCM_FORMAT_S16_LE self.captura.setperiodsize(1024) # default 32 def guardarAudio(self): if not 'audio' in listdir('./'): mkdir('audio') tiempo = strftime("%d %b %Y_%H:%M:%S", gmtime()) miAudio = './audio/' + self.usuario + '_' + tiempo + '.wav' audio = wave.open(miAudio, 'w') audio.setnchannels(1) audio.setsampwidth(2) audio.setframerate(44100) while True: try: length, data = self.captura.read() audio.writeframes(data) except KeyboardInterrupt: break
#!/usr/bin/python2.7 # # Robot Standard Language # v0.1 # # Copyright(C) Joshua Davis # http://covert.codes # Open source, do what you want with it. import numpy from numpy.fft import fft, ifft from numpy.random import random_sample from alsaaudio import PCM, PCM_NONBLOCK, PCM_FORMAT_FLOAT_LE pcm = PCM() #mode = PCM_NONBLOCK) pcm.setrate(4000) pcm.setformat(PCM_FORMAT_FLOAT_LE) pcm.setchannels(1) pcm.setperiodsize(4096) def sin_wave(x, freq=100): sample = numpy.arange(100*4096, (x+1)*4096, dtype=numpy.float32) sample *= numpy.pi * 2 / 44100 sample *= freq return numpy.sin(sample) for x in xrange(1000): sample = sin_wave(x, 100) pcm.write(sample.tostring())
import numpy from numpy.fft import fft, ifft from numpy.random import random_sample from alsaaudio import PCM, PCM_NONBLOCK, PCM_FORMAT_FLOAT_LE pcm = PCM() #mode=PCM_NONBLOCK) pcm.setrate(44100) pcm.setformat(PCM_FORMAT_FLOAT_LE) pcm.setchannels(1) pcm.setperiodsize(4096) def sine_wave(x, freq=100): sample = numpy.arange(x * 4096, (x + 1) * 4096, dtype=numpy.float32) sample *= numpy.pi * 2 / 44100 sample *= freq return numpy.sin(sample) for x in xrange(1000): sample = sine_wave(x, 100) pcm.write(sample.tostring())