1
私はラップトップコンピュータからPythonを使用してマイク入力をストリーミングしています。私は現在、PyAudioと.wavを使って2秒のバッチ(下のコード)を作成し、新しく作成された.wavファイルのフレーム表現をループで読み込みます。Pythonでストリーミングマイク入力を維持する
しかし、私は実際には、np.ndarray
が.wavファイルのInt16表現であるコードに "signal"で表されることを望みます。 .wavに完全に書き込みをバイパスして、アプリケーションをマイクロバッチではなく「リアルタイム」に見えるようにする方法はありますか?
import pyaudio
import wave
#AUDIO INPUT
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
CHUNK = 1024
RECORD_SECONDS = 2
WAVE_OUTPUT_FILENAME = "output.wav"
audio = pyaudio.PyAudio()
# start Recording
stream = audio.open(format=FORMAT, channels=CHANNELS,
rate=RATE, input=True,
frames_per_buffer=CHUNK)
while(1):
print "recording"
frames = []
for i in range(0, int(RATE/CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data)
waveFile = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
waveFile.setnchannels(CHANNELS)
waveFile.setsampwidth(audio.get_sample_size(FORMAT))
waveFile.setframerate(RATE)
waveFile.writeframes(b''.join(frames))
waveFile.close()
spf = wave.open(WAVE_OUTPUT_FILENAME,'r')
#Extract Raw Audio from Wav File
signal = spf.readframes(-1)
signal = np.fromstring(signal, 'Int16')
copy= signal.copy()
#ストップはい、あなたはstream
変数にコールバックを与えることができます
stream.stop_stream()
stream.close() audio.terminate()
データが利用可能なときはいつでもコールバックが実行されるようですか? audio.openに関して、input_dataとは正確に何ですか? stream.read()と同じですか? – knowads
これはnp.int16のようです。 'np.fromstring(input_data、dtype = np.int16)'を使って読むことができます –
もっと一般的には、 'audio.open'に渡される' FORMAT'に基づいていると思います。これは、そのデータ型に対応するnumpy形式になります。 –