2010-01-12 22 views
8

quiero programar programáticamente el sonido que sale de mi computadora portátil en python. He encontrado PyAudio y se acercó con el siguiente programa que lleva a cabo la tarea:sonido de salida de grabación en python

import pyaudio, wave, sys 

chunk = 1024 
FORMAT = pyaudio.paInt16 
CHANNELS = 1 
RATE = 44100 
RECORD_SECONDS = 5 
WAVE_OUTPUT_FILENAME = sys.argv[1] 

p = pyaudio.PyAudio() 
channel_map = (0, 1) 

stream_info = pyaudio.PaMacCoreStreamInfo(
    flags = pyaudio.PaMacCoreStreamInfo.paMacCorePlayNice, 
    channel_map = channel_map) 

stream = p.open(format = FORMAT, 
       rate = RATE, 
       input = True, 
       input_host_api_specific_stream_info = stream_info, 
       channels = CHANNELS) 

all = [] 
for i in range(0, RATE/chunk * RECORD_SECONDS): 
     data = stream.read(chunk) 
     all.append(data) 
stream.close() 
p.terminate() 

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() 

el problema es que tengo que conectar el conector de auriculares a la toma de micrófono. He intentado reemplazar estas líneas:

input = True, 
input_host_api_specific_stream_info = stream_info, 

con éstos:

output = True, 
output_host_api_specific_stream_info = stream_info, 

pero luego me sale este error:

Traceback (most recent call last):
File "./test.py", line 25, in
data = stream.read(chunk)
File "/Library/Python/2.5/site-packages/pyaudio.py", line 562, in read
paCanNotReadFromAnOutputOnlyStream)
IOError: [Errno Not input stream] -9975

hay una manera de crear una instancia de la corriente PyAudio de modo que introduce desde la salida de la computadora y no tengo que conectar la toma de auriculares al micrófono? ¿hay una mejor manera de hacerlo? Preferiría quedarme con una aplicación de Python y evitar el cacao.

+1

¿El sonido ya está en su computadora portátil? ¿Qué pasa con "guardar como ..." es Macintosh. –

+0

¿hay alguna manera fácil de guardar los archivos que se reproducen en el reproductor flash en su navegador (supongo que son archivos .flv)? Sé que muchas veces sitios como youtube y vimeo tienen enlaces para descargar el archivo .flv, pero muchas veces no tienen un enlace para hacer esto. – aaronstacy

Respuesta

5

Puede instalar Soundflower, que le permite crear dispositivos de audio adicionales y enrutar el audio entre ellos. De esta forma puede definir la salida de su sistema al dispositivo Soundflower y leer el audio desde allí usando PyAudio.

También puede echar un vistazo a PyJack, un cliente de audio para Jack.

0

lamentablemente, no hay una forma infalible de hacerlo, pero Audio Hijack y son las mejores herramientas disponibles para eso.

+0

tienen API o alguna otra forma de hacer el trabajo programáticamente? – aaronstacy

0

Puedo dar una respuesta al no usar una forma programática. Panel> Sonido> Grabación >> habilitación de mezcla estéreo. Esto necesita un controlador de soporte. También encontré que esto hace que mi eco de sonido real. Al menos esto resuelve mi problema.

Cuestiones relacionadas