ジャックに接続されたマイクから音声信号を取得し、そのデータをPythonでの即時処理に使用する必要があります。
処理および後続のステップは明確です。私はプログラムから信号を取得することでのみ失われます。チャネルの数は無関係で、1つで十分です。サウンドを再生するつもりはないので、サウンドカードにASIOは必要ありません。
私の質問は、どのようにPythonからJackオーディオをキャプチャできますか? (パッケージ、よく文書化された例、ニッチな例があれば素晴らしいでしょう:-)。
pyaudio を試しましたか?
インストールするには:python -m pip install pyaudio
公式ウェブサイトからの記録例:
"""PyAudio example: Record a few seconds of audio and save to a WAVE file."""
import pyaudio
import wave
CHUNK = 1024
FORMAT = pyaudio.Paint16
CHANNELS = 2
RATE = 44100
RECORD_SECONDS = 5
WAVE_OUTPUT_FILENAME = "output.wav"
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
print("* recording")
frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data)
print("* done recording")
stream.stop_stream()
stream.close()
p.terminate()
wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()
この例は、Windows 8.1、pyaudio 0.2.9でPython 2.7.11(および3.5.1)を使用してラップトップで動作します。
マイクから音声を分割してストリーミングする予定ですか、それともストリーミングする予定ですか?どちらの場合でも、 sounddevice を使用できます。
pythonモジュールを使用してインストールできますpip install sounddevice --user
APIの詳細については、公式サイトを参照してください。
sounddeviceは、ラップトップマイクから音声を録音し(標準音声入力)、スピーカーまたはヘッドフォンで再生します(標準音声出力)。サウンドオブジェクトを使用して、さらに処理することができます。
import sounddevice as sd
import numpy as np
import scipy.io.wavfile as wav
fs=44100
duration = 5 # seconds
myrecording = sd.rec(duration * fs, samplerate=fs, channels=2,dtype='float64')
print "Recording Audio"
sd.wait()
print "Audio recording complete , Play Audio"
sd.play(myrecording, fs)
sd.wait()
print "Play Audio Complete"
出力は次のとおりです。Python 2.7.9(デフォルト、2014年12月10日、12:24:55)] [MSC v.1500 32ビット(Intel)] win32タイプ「copyright」、「詳細については、「credits」または「license()」。=============================== RESTART ===== ===============
オーディオを録音する
録音完了、音声再生
オーディオの再生完了
pysox 、libsoxのpythonバインディングを使用することを検討します。
PyPIから pysoxパッケージ を取得できます。
要件が Jack の場合、 PyJack を使用できます。これはPython Jackのバインディングです。
さらに、ソースコードには、実行したいこと、つまりオーディオをキャプチャするための例があります。ファイルを参照してください capture.py
ブロックの欠落を回避するには、500 *(buffer_size/sample_rate)
ミリ秒ごとにjack.process
を呼び出す必要があることを考慮する必要があります。 jack.process
は、オーディオブロックを見逃した場合に例外をスローします(jack.InputSyncError
およびjack.OutputSyncError
)。