티스토리 뷰

pyaudio는 음성 데이터를 다루는 라이브러리인 portaudio를 파이썬에서 사용할 수 있도록 한 모듈이다. 음성 데이터를 파일로 저장하거나, 파일로 부터 음성데이터를 불러올 수 있다. 파일 뿐만 아니라 실시간으로 음성데이터를 다루는 것도 가능하다. 먼저 컴퓨터로부터 음성 데이터를 입력받아 간단히 볼륨의 크기를 출력하는 프로그램을 만들어보자.


코드 : 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import pyaudio
import numpy as np
 
CHUNK = 2**10
RATE = 44100
 
p=pyaudio.PyAudio()
stream=p.open(format=pyaudio.paInt16,channels=1,rate=RATE,input=True,
              frames_per_buffer=CHUNK,input_device_index=2)
 
while(True):
    data = np.fromstring(stream.read(CHUNK),dtype=np.int16)
    print(int(np.average(np.abs(data))))
 
stream.stop_stream()
stream.close()
p.terminate()
cs

결과 : 

값이 출력되는 것을 볼 수 있다.


코드 설명 :


import pyaudio
import numpy as np

이 두줄은 간단하게 pyaudio 모듈과 numpy 모듈을 import한다. numpy 모듈은 음성 데이터를 처리하는데 매우 궁합이 잘 맞다.


CHUNK = 2**10
RATE = 44100

CHUNK는 음성데이터를 불러올 때 한번에 몇개의 정수를 불러올 지를 뜻한다. 여기서는 2**10 이므로 한번 불러올 때마다 1024개의 정수를 불러온다. RATE는 음성 데이터의 샘플링 레이트이다. 여기서는 일반적인 샘플링 레이트인 44100hz를 선택했다.


p=pyaudio.PyAudio()
stream=p.open(format=pyaudio.paInt16,channels=1,rate=RATE,input=True,

              frames_per_buffer=CHUNK,input_device_index=2) 

위 두줄은 음성 데이터 스트림을 여는 코드이다. 


매개변수 설명 : 

format 매개변수에는 비트 깊이를 설정한다. 여기서는 pyaudio.paInt16이므로 비트 깊이가 16비트가 된다.

rate은 샘플링 레이트가 들어간다. 아까 설정했던 RATE를 넣는다.

input은 입력 스트림인지 아닌지 설정하는 매개 변수이다. 우리가 열려고 하는 것은 입력 스트림이므로 참(True)를 넣어준다.

frame_per_buffer에는 아까 설정한 청크의 크기를 넣는다.

input_device_index에는 원하는 입력 장치의 번호를 넣는다. 나는 2를 넣었는데, 내 컴퓨터에서 스테레오믹스의 장치 번호가 2번이기 때문이다. 이 매개변수를 설정하지 않는다면 pyaudio에서 자동으로 입력장치를 세팅해준다.


while(True):
    data = np.fromstring(stream.read(CHUNK),dtype=np.int16)

음성 데이터를 입력받아 출력하는 소스이다. 

stream.read(CHUNK)는 음성 데이터를 문자열로 반환한다. 이 문자열을 np.fromstring()함수로 16비트 정수 numpy 배열로 바꿔주면 되는 것이다. 이제 이 정수 배열을 푸리에 변환을 하던 평균값을 구하던 하면 되는 것이다. 여기서는 간단하게 평균값의 처리만 할 것이다.


print(int(np.average(np.abs(data))))

이 부분은 간단하게 아까 입력받은 data의 절댓값의 평균을 구해서 출력하는 부분이다.


오늘은 이렇게 pyaudio로 음성을 입력 받는 방법을 한번 알아보았다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함