音を鳴らす - sounddevice python realtime




リアルタイムオーディオデータをぎこちない配列に読み込む (2)

PyAudioというライブラリがあります。 あなたはそれをリアルタイムで記録するために使うことができます。 加えてnumpy.fromstring()numpy.hstack()の助けを借りて、あなたは望ましい出力を得ることができます。 次のスニペットはMONO-CHANNELです。

import pyaudio
import numpy

RATE=16000
RECORD_SECONDS = 2.5
CHUNKSIZE = 1024

# initialize portaudio
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paInt16, channels=1, rate=RATE, input=True, frames_per_buffer=CHUNKSIZE)

frames = [] # A python-list of chunks(numpy.ndarray)
for _ in range(0, int(RATE / CHUNKSIZE * RECORD_SECONDS)):
    data = stream.read(CHUNKSIZE)
    frames.append(numpy.fromstring(data, dtype=numpy.int16))

#Convert the list of numpy-arrays into a 1D array (column-wise)
numpydata = numpy.hstack(frames)

# close stream
stream.stop_stream()
stream.close()
p.terminate()

これはテスト済みのコードです。 それは魅力として働くべきです。 記録したデータがnumpydataで正しく利用できるかどうかを確認するために、前のコードの後に​​次のスニペットを追加できます。

import scipy.io.wavefile as wav
wav.write('out.wav',RATE,numpydata)

これらの行はあなたのnumpydataを "out.wav"に書くでしょう。 ファイルを再生してデータを確認してください。

シモンズ:これはStackOverflowで私の最初の応答です。 それが役に立てば幸い。

どうやってリアルタイムオーディオをnumpy配列に読み込んで、matplotlibを使ってプロットすることができますか?

今、私はwavファイルにオーディオを録音しています。それからscikits.audiolab.wavreadを使ってそれを配列に読み込みます。 リアルタイムでこれを直接実行できる方法はありますか?


あなたはnp.fromstringを使ってオーディオを録音し、 np.fromstringを使ってそれをnp.fromstringに変換することができます。

import pyaudio
import numpy as np
from matplotlib import pyplot as plt

CHUNKSIZE = 1024 # fixed chunk size

# initialize portaudio
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paInt16, channels=1, rate=44100, input=True, frames_per_buffer=CHUNKSIZE)

# do this as long as you want fresh samples
data = stream.read(CHUNKSIZE)
numpydata = np.fromstring(data, dtype=np.int16)

# plot data
plt.plot(numpydata)
plt.show()

# close stream
stream.stop_stream()
stream.close()
p.terminate()






audio