파이썬으로 녹음하는 것이 더 쉬워졌습니다... 방법이 있습니다.!
...알았어, 충분히 얘기해
소개
한 달 전에 저는 단어 목록을 감지할 수 있는 딥 러닝 모델(Google 명령 Dataset)을 작업하고 있었습니다. 저는 모델에 1초 .wav 파일을 제공하고 프로젝트를 완료하는 동안 모델이 마법을 부립니다. 내 마이크에서 모델에게 직접 입력을 제공할 수 없는 이유를 생각해 보세요.
그래서 웹에서 마이크에서 입력을 받고 .wav 파일에 저장된 동일한 데이터를 출력하는 방법을 솔직히 검색하기 시작했습니다.
pythonic 쉬운 방법을 전혀 찾지 못했습니다. 여기에 내가 찾은 것과 마이크에서 출력을 얻는 방법이 있습니다.
파이썬으로 마이크에서 출력 얻기
먼저 내 방식을 보여주고 후드 아래에서 어떻게 작동하는지 볼 수 있습니다 (Long raw python CODE)
pyaudio
를 설치합니다..zip 파일을 리포지토리하고 추출합니다
from record import Mic
mic = Mic() # inialize the the Mic class
mic.record_toFile(duration=10) # record a 10-sec wav file
이제 10초 .wav 파일을 녹음할 수 있는 python으로 녹음기 앱을 빌드하는 것만큼 간단합니다.
실제로 추가 작업이 전혀 필요하지 않습니다. 여기에서 문서를 참조하세요.
이제 이 두 줄이 후드 아래에서 작동하는 방식입니다.
먼저
numpy
및 pyaudio
패키지를 가져옵니다.그 다음에
p = pyaudio.PyAudio() # inialize the PyAudio
# then configure how pyaudio will handle the mic input and out streem of data
data_chunk = 4 # simply divide the data 4 times for easy processing
stream = p.open(
format=pyaudio.paInt16, #every sample from the mic is of type INT16 (-2**15, (2**15)-1)
channels= 1, # one channel or stereo channels
rate= 44100, # number of samples recorded every second
input=True, # get input from your mic
output=True, # and give us the output please
frames_per_buffer=data_chunck)
이제 마이크에서 출력을 얻을 수 있습니다 ... 오른쪽? 예, 아니요, 제가 의미하는 바를 보여드리겠습니다.
byte_data = stream.read()
위의 행은 정수로 변환하는 데 필요한 바이트로 데이터를 제공합니다.
int_data = np.frombuffer(byte_data, dtype=np.int16)
print(int_data)
# output [12,0,-1,...,458,13547]
예🎉🎉...마이크에서 출력만 하면 됩니다.
이제 계속 진행하겠습니다. NumPy 정수 배열을 가져옵니다. 아니요. 파일에 저장하는 데 사용할 수 있습니다. 앞으로 나올 모든 배열을 1초 동안 수집해야 합니다...예, 위의 작업은 몇 밀리초 정도 소요될 수 있습니다.
Frames = []
for _ in range(0, int(RATE / CHUNK * 1)):
byte_data = stream.read()
int_data = np.frombuffer(byte_data, dtype=np.int16)
Frames.append(int_data) # append every array of data to list
# now we need all these arrays to be one big list (stack them together)
Frames= np.concatenate(Frames,axis=0)
이제 1초 동안의 모든 마이크 출력을 포함하는 하나의 큰 어레이가 있으므로 웨이브 파일에 저장하기만 하면 됩니다.
import wave
output_file = "demo_recoderded.wav"
# configure the wavfile by setting some parameter which we defined before
wf = wave.open(output_file,'wb')
wf.setnchannels(1) # number of channels
wf.setsampwidth(p.get_sample_size(pyaudio.paInt16))
wf.setframerate(44100) # the frame rate
wf.writeframes(b''.join(frames)) # join the data frames we stored
in the list
샘플의 너비는 스토리지의 값을 나타내는 데 필요한 비트 수를 정의합니다.
이제 폴더 디렉토리를 확인하면 "demo_recoderded.wav"라는 오디오 파일이 보일 것입니다 💥🎉🎉....붐! 훌륭해
정리하고 결론을 내리자
저장소에 별표를 표시하고 복제한 다음 이 섹션에서 예상한 대로 단 두 줄의 코드로 마이크를 켜고 실행하세요. 🤔😂
리포지토리에 대한 자세한 정보 및 문서는 클릭here
내 인생에서 처음으로 글을 쓰는 것입니다. 어떻게 생각하시는지 말씀해 주시고 피드백을 주세요...감사합니다.
크레딧:
Robinson Recalde에 Unsplash의 사진
그리고 멋진 튜토리얼
Reference
이 문제에 관하여(파이썬으로 녹음하는 것이 더 쉬워졌습니다... 방법이 있습니다.!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/yossefdawoad/did-you-try-recording-with-python-before-here-is-how-it-can-be-easy-2m86
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(파이썬으로 녹음하는 것이 더 쉬워졌습니다... 방법이 있습니다.!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/yossefdawoad/did-you-try-recording-with-python-before-here-is-how-it-can-be-easy-2m86텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)