web-dev-qa-db-ja.com

Pythonを使用した入力音声信号の読み取り

ジャックに接続されたマイクから音声信号を取得し、そのデータをPythonでの即時処理に使用する必要があります。

処理および後続のステップは明確です。私はプログラムから信号を取得することでのみ失われます。チャネルの数は無関係で、1つで十分です。サウンドを再生するつもりはないので、サウンドカードにASIOは必要ありません。

私の質問は、どのようにPythonからJackオーディオをキャプチャできますか? (パッケージ、よく文書化された例、ニッチな例があれば素晴らしいでしょう:-)。

26
Victor Pira

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)を使用してラップトップで動作します。

32
alr

マイクから音声を分割してストリーミングする予定ですか、それともストリーミングする予定ですか?どちらの場合でも、 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 ===== ===============

オーディオを録音する
録音完了、音声再生
オーディオの再生完了

15
Anil_M

pysox 、libsoxのpythonバインディングを使用することを検討します。

PyPIから pysoxパッケージ を取得できます。

3
wrkyle

要件が Jack の場合、 PyJack を使用できます。これはPython Jackのバインディングです。

さらに、ソースコードには、実行したいこと、つまりオーディオをキャプチャするための例があります。ファイルを参照してください capture.py

ブロックの欠落を回避するには、500 *(buffer_size/sample_rate)ミリ秒ごとにjack.processを呼び出す必要があることを考慮する必要があります。 jack.processは、オーディオブロックを見逃した場合に例外をスローします(jack.InputSyncErrorおよびjack.OutputSyncError)。

2
gpoo