2010-01-12 18 views
8

Chcę programowo nagrywać dźwięk pochodzący z mojego laptopa w python. Znalazłem PyAudio i wpadł następnego programu, który zezwoli na osiągnięcie zadania:Nagrywanie dźwięku wyjściowego w 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() 

problem jest muszę podłączyć gniazdo słuchawkowe do gniazda mikrofonu. Próbowałem zastępując te linie:

input = True, 
input_host_api_specific_stream_info = stream_info, 

z nich:

output = True, 
output_host_api_specific_stream_info = stream_info, 

ale potem dostaję ten błąd:

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

czy istnieje sposób do wystąpienia strumień PyAudio tak aby wejść z wyjścia komputera i nie muszę podłączać gniazda słuchawkowego do mikrofonu? czy jest lepszy sposób na zrobienie tego? wolałbym trzymać się aplikacji Pythona i unikać kakao.

+1

Dźwięk jest już w laptopie? Co jest nie tak z "zapisz jako ..." to Macintosh. –

+0

Czy istnieje łatwy sposób na zapisanie plików odtwarzanych w odtwarzaczu Flash w przeglądarce (domyślam się, że są to pliki .flv)? Wiem, że wiele razy witryny takie jak youtube i vimeo mają linki do pobrania pliku .flv, ale wiele razy nie mają łącza do tego. – aaronstacy

Odpowiedz

5

Można zainstalować Soundflower, który umożliwia tworzenie dodatkowych urządzeń audio i przesyłanie dźwięku między nimi. W ten sposób możesz zdefiniować wyjście systemu do urządzenia Soundflower i odczytać z niego dźwięk za pomocą PyAudio.

Można również spojrzeć na PyJack, klienta audio dla Jack.

0

Niestety, nie ma na to niezawodny sposób, ale Audio Hijack i Wiretap to najlepsze dostępne narzędzia.

+0

czy mają programowanie API lub inny sposób programowania? – aaronstacy

0

Mogę udzielić odpowiedzi, nie używając metody programowej. Panel> Dźwięk> Nagrywanie >> włączanie miksu stereo. To wymaga obsługi sterownika. Odkryłem również, że to sprawia, że ​​moje prawdziwe echo brzmi. Przynajmniej to rozwiązuje mój problem.

Powiązane problemy