1
파이썬을 사용하여 랩톱 컴퓨터에서 마이크 입력을 스트리밍하고 있습니다. 현재 PyAudio 및 .wav를 사용하여 2 초 배치 (아래 코드)를 작성한 다음 새로 작성한 .wav 파일의 프레임 표현을 루프에서 읽습니다.Python에서 스트리밍 마이크 입력 유지
그러나 실제로는 .wav 파일의 Int16 표현 인 코드에서 "signal"로 표시되는 np.ndarray
을 원합니다. .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.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 형식입니다. –