запись выходного звука в питоне - PullRequest
8 голосов
/ 12 января 2010

Я хочу программно записывать звук, выходящий из моего ноутбука в Python. я нашел PyAudio и нашел следующую программу, которая выполняет задачу:

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

проблема в том, что я должен подключить разъем для наушников к разъему для микрофона. я попытался заменить эти строки:

input = True,
input_host_api_specific_stream_info = stream_info,

с этими:

output = True,
output_host_api_specific_stream_info = stream_info,

но тогда я получаю эту ошибку:

Traceback (последний последний вызов):
Файл "./test.py", строка 25, в
data = stream.read (chunk)
Файл "/Library/Python/2.5/site-packages/pyaudio.py", строка 562, для чтения
paCanNotReadFromAnOutputOnlyStream)
IOError: [Errno не входной поток] -9975

есть ли способ создать экземпляр потока PyAudio, чтобы он поступал с выхода компьютера, и мне не нужно было подключать разъем наушников к микрофону? Есть ли лучший способ пойти по этому поводу? Я бы предпочел придерживаться приложения Python и избегать какао.

Ответы [ 3 ]

5 голосов
/ 05 января 2011

Вы можете установить Soundflower , что позволяет создавать дополнительные аудиоустройства и маршрутизировать аудио между ними. Таким образом, вы можете определить вывод вашей системы на устройство Soundflower и прочитать аудио с него, используя PyAudio.

Вы также можете взглянуть на PyJack , аудио-клиент для Jack .

0 голосов
/ 14 января 2017

Я могу дать ответ, не используя программный способ. Панель> Звук> Запись >> включение стерео микса. Это нуждается в поддержке драйвера. Я также обнаружил, что это делает мой настоящий звук эхом. По крайней мере, это решает мою проблему.

0 голосов
/ 12 января 2010

к сожалению, нет надежного способа сделать это, но Audio Hijack и Wiretap - лучшие инструменты, доступные для этого.

...