10

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,

しかし、私はこのエラーが発生します:

トレースバック (最新の呼び出しが最後):
ファイル "./test.py"、25 行目、
データ = stream.read(chunk)
ファイル "/Library/Python/2.5/site-packages/pyaudio.py"、562 行目、 in read
paCanNotReadFromAnOutputOnlyStream)
IOError: [Errno Not input stream] -9975

PyAudioストリームをインスタンス化して、コンピューターの出力から入力し、ヘッドフォンジャックをマイクに接続する必要がないようにする方法はありますか? これについてもっと良い方法はありますか?私はPythonアプリに固執し、ココアを避けたいと思います。

4

5 に答える 5

5

Soundflowerをインストールすると、追加のオーディオ デバイスを作成し、それらの間でオーディオをルーティングできます。このようにして、Soundflower デバイスへのシステムの出力を定義し、PyAudio を使用してそこからオーディオを読み取ることができます。

Jackのオーディオ クライアントであるPyJackも参照してください。

于 2011-01-05T10:50:12.610 に答える
0

残念ながら、確実な方法はありませんが、Audio HijackWiretapはそのための最良のツールです。

于 2010-01-12T04:15:24.487 に答える