본문 바로가기
개발Study/raspberry pi

rpi 마이크 확인 및 녹음

by happy90 2022. 2. 28.
SMALL

먼저 마이크 기능 확인하기.

1. 마이크 인식 확인
명령어를 통해 연결된 mic를 확인할 수 있다.
$ arecord -l

card1의 device0로 인식된 것을 확인할 수 있다.

card0이면 상관없는데 1로 인식되어 있다면 alsa.conf 파일을 수정해주어야 한다.
sudo vi /usr/share/alsa/alsa.conf

card를 1로 수정.


그럼 녹음을 해보자.

$ arecord -D plughw:1,0 -d 5 test.wav

arecord 명령어로 녹음할 수 있고, -D는 device, -d는 초단위의 녹음할 시간, 마지막에 파일명을 적어준다.
device에는 plughw: 다음에 위에서 인식한 card1, device0의 1,0을 적어준다.
그러면 5초동안 녹음이 된다. 재생해서 녹음이 되었는지 확인. 잘되었다.

2. python으로 음성녹음 코드 구현

sudo apt-get install libasound-dev
sudo apt-get install python3-pyaudio

import pyaudio
import wave


def find_audio_index(audio):

    for i in range(audio.get_device_count()):

        info = audio.get_device_info_by_index(i)

        print("DEVICE: %s INDEX: %s RATE: %s " %
              (info["name"], i, info["defaultSampleRate"]))

def record(audio):

    FORMAT = pyaudio.paInt16
    CHANNELS = 1
    RATE = 44100
    CHUNK = 4096
    RECORD_SECONDS = 5
    WAVE_OUTPUT_FILENAME = "record_test.wav"

    # start Recording
    stream = audio.open(format=pyaudio.paInt16,
                    channels=CHANNELS,
                    rate=RATE,
                    input=True,
                    frames_per_buffer=CHUNK)

    print("start recording")

    frames = []

    for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
        data = stream.read(CHUNK)
        frames.append(data)

    print("finished recording")

    # stop Recording
    stream.stop_stream()
    stream.close()
    audio.terminate()

    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()

aud = pyaudio.PyAudio()
find_audio_index(aud)
record(aud)

이렇게 구현하면 아래와 같이 출력이 된다.

에러가 발생하는것처럼 보이지만 녹음은 잘 된다.
5초동안 녹음하는 코드이고, sample rate 입력은 find_audio_index함수를 통해 audio info를 보고 알맞게 넣어주면 된다.

LIST

'개발Study > raspberry pi' 카테고리의 다른 글

Ubuntu core on raspberry pi  (0) 2020.09.18

댓글