[python] 파이썬을 사용하여 마이크 입력 처리하기

이번 포스트에서는 파이썬을 사용하여 마이크 입력을 처리하는 방법에 대해 알아보겠습니다. 파이썬은 여러 가지 오디오 처리 라이브러리를 사용하여 마이크 입력을 받고 처리할 수 있습니다.

마이크 입력 받기

먼저, 파이썬에서 마이크 입력을 받기 위해 PyAudio 라이브러리를 사용할 수 있습니다. PyAudio는 다양한 오디오 입력 장치를 지원하며, 간편한 인터페이스를 제공합니다. 아래는 PyAudio를 사용하여 마이크 입력을 받는 예제 코드입니다.

import pyaudio
import wave

# 녹음할 설정값들
chunk = 1024  # 한 번에 읽어올 샘플의 수
format = pyaudio.paInt16
channels = 1  # 모노로 녹음
sample_rate = 44100  # 샘플링 레이트

# 녹음할 파일명
filename = "recording.wav"

p = pyaudio.PyAudio()

# 마이크 입력 시작
stream = p.open(format=format,
                channels=channels,
                rate=sample_rate,
                input=True,
                frames_per_buffer=chunk)

print("녹음 시작")

frames = []

# 마이크로부터 데이터 읽어오기
while True:
    data = stream.read(chunk)
    frames.append(data)

# 마이크 입력 종료
stream.stop_stream()
stream.close()
p.terminate()

print("녹음 종료")

# 데이터를 WAV 파일로 저장
wf = wave.open(filename, 'wb')
wf.setnchannels(channels)
wf.setsampwidth(p.get_sample_size(format))
wf.setframerate(sample_rate)
wf.writeframes(b''.join(frames))
wf.close()

위의 예제 코드는 PyAudio를 사용하여 마이크 입력을 받고, 받은 데이터를 WAV 파일로 저장하는 기능을 수행합니다. 이 예제를 실행하면 recording.wav라는 파일에 녹음된 내용이 저장됩니다.

음성 데이터 처리하기

마이크로부터 입력받은 음성 데이터를 처리하기 위해 파이썬에서는 다양한 오디오 처리 라이브러리를 제공합니다. 예를 들어 librosa 라이브러리를 사용하면 오디오 데이터의 스펙트로그램, 멜 스펙트로그램 등 다양한 특성을 추출할 수 있습니다. 아래는 librosa를 사용하여 마이크로부터 입력받은 음성 데이터의 스펙트로그램을 그리는 예제 코드입니다.

import pyaudio
import librosa
import librosa.display
import matplotlib.pyplot as plt

# 마이크 입력 설정값들
chunk = 1024  # 한 번에 읽어올 샘플의 수
format = pyaudio.paInt16
channels = 1  # 모노로 녹음
sample_rate = 44100  # 샘플링 레이트

p = pyaudio.PyAudio()

# 마이크 입력 시작
stream = p.open(format=format,
                channels=channels,
                rate=sample_rate,
                input=True,
                frames_per_buffer=chunk)

print("입력 시작")

frames = []

# 마이크로부터 데이터 읽어오기
while True:
    data = stream.read(chunk)
    frames.append(data)

    # 스펙트로그램 그리기
    y, sr = librosa.load(data, sr=sample_rate)
    D = librosa.stft(y)
    plt.figure()
    librosa.display.specshow(librosa.amplitude_to_db(D, ref=np.max),
                             y_axis='log', x_axis='time')
    plt.title('Power spectrogram')
    plt.colorbar(format='%2.0f dB')
    plt.tight_layout()
    plt.show()

# 마이크 입력 종료
stream.stop_stream()
stream.close()
p.terminate()

print("입력 종료")

위의 예제 코드는 librosa를 사용하여 입력받은 음성 데이터의 스펙트로그램을 그리는 기능을 수행합니다. 실행하면 입력 음성 데이터의 스펙트로그램이 그려집니다.

결론

이번 포스트에서는 파이썬을 사용하여 마이크 입력을 처리하는 방법에 대해 알아보았습니다. PyAudio를 사용하여 마이크 입력을 받고 저장하는 방법부터, librosa를 사용하여 음성 데이터를 처리하는 방법까지 다양한 기능을 소개했습니다.

이러한 기능들을 사용하면 파이썬을 활용하여 오디오 처리 프로그램을 개발할 수 있습니다. 추가적으로 해당 라이브러리들의 문서를 참고하여 더 다양한 기능을 사용해보세요.

참고 자료