2010-01-12 17 views
8

Voglio registrare in modo programmato il suono proveniente dal mio laptop in python. ho trovato PyAudio e si avvicinò con il seguente programma che compie l'operazione:suono in uscita da record in 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() 

il problema è che devo collegare il jack delle cuffie alla presa microfono. ho provato sostituzione di queste linee:

input = True, 
input_host_api_specific_stream_info = stream_info, 

con questi:

output = True, 
output_host_api_specific_stream_info = stream_info, 

ma allora ottengo questo errore:

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

c'è un modo per creare un'istanza flusso PyAudio modo che immette dall'uscita del computer e non devo collegare il jack per le cuffie al microfono? c'è un modo migliore per andare su questo? Preferirei attaccare con un'applicazione python ed evitare il cacao.

+1

L'audio è già nel tuo laptop? Cosa c'è di sbagliato in "save as ..." è Macintosh. –

+0

c'è un modo semplice per salvare i file che vengono riprodotti nel flash player nel tuo browser (immagino che siano file .flv)? Conosco un sacco di volte siti come youtube e vimeo hanno link per scaricare il file .flv, ma molte volte non hanno un link per farlo. – aaronstacy

risposta

5

È possibile installare Soundflower, che consente di creare dispositivi audio aggiuntivi e indirizzare l'audio tra di loro. In questo modo puoi definire l'output del tuo sistema sul dispositivo Soundflower e leggerne l'audio usando PyAudio.

È inoltre possibile dare un'occhiata a PyJack, un client audio per Jack.

0

sfortunatamente, non esiste un modo infallibile per farlo, ma Audio Hijack e Wiretap sono i migliori strumenti disponibili per questo.

+0

hanno API o un altro modo di fare il lavoro in modo programmatico? – aaronstacy

0

Posso dare una risposta non utilizzando un modo programmatico. Pannello> Suono> Registrazione >> attivazione mix stereo. Ciò richiede un supporto driver. Ho anche scoperto che questo fa eco al mio vero suono. Almeno questo risolve il mio problema.