python 오디 오 재생 및 녹음 기능 예제 코드 구현

오디 오 예비 처리
이 강 의 는 주로 음성 기본 처리 방식 을 소개 하여 다음 음성 인식 에 기반 을 다 져 준다.
세 가지 오디 오 재생 방식
python 을 사용 하여 오디 오 를 재생 하 는 방법 은 다음 과 같은 몇 가지 가 있 습 니 다.
os.system()
os.system(file)호출 시스템 응용 프로그램 으로 파일 을 엽 니 다.file 은 그림 이나 오디 오 파일 로 사용 할 수 있 습 니 다.
단점:구체 적 인 애플 리 케 이 션 을 열 려 면 배경 에서 오디 오 를 재생 할 수 없습니다.
pyaudio
설치:pip install pyaudio공식 적 으로 오디 오 와 녹음 을 재생 하 는 api 를 제공 합 니 다.사용 하기에 매우 편리 합 니 다.Filename 을 오디 오 파일 의 문자 로 바 꾸 면 오디 오 를 재생 할 수 있 습 니 다.

"""PyAudio Example: Play a WAVE file."""

import pyaudio
import wave


CHUNK = 1024
FILENAME = '      '

def play(filename = FILENAME):
 wf = wave.open(filename, 'rb')

 p = pyaudio.PyAudio()

 stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
   channels=wf.getnchannels(),
   rate=wf.getframerate(),
   output=True)

 data = wf.readframes(CHUNK)

 while data != b'':
 stream.write(data)
 data = wf.readframes(CHUNK)

 stream.stop_stream()
 stream.close()

 p.terminate()
jupyter notebook
jupyer notebook 에서 오디 오 를 재생 할 때 다음 함 수 를 사용 할 수 있 습 니 다.

import IPython.display as ipd
ipd.Audio(   )
오디 오 를 읽 는 몇 가지 방식
python 은 오디 오 파일 을 읽 는 방법 이 많 습 니 다.내 장 된 라 이브 러 리 웨 이브,과학 컴 퓨 팅 라 이브 러 리 scipy,그리고 사용 하기 쉬 운 음성 처리 라 이브 러 리 librosa 가 있 습 니 다.
이 라 이브 러 리 를 사용 하여 오디 오 파일 을 읽 는 방법 을 소개 합 니 다.
설치:
4.567917.웨 이브 는 내장 라 이브 러 리 로 직접 가 져 오 면 됩 니 다
  • scipy: pip install scipy
  • librosa: pip install librosa
  • 사용:
    wave.open:
    매개 변수 path 는 파일 이름 이 고 mode 는 열 림 방식 입 니 다.
    'rb'방식 으로 파일 을 열 고 Wave 를 되 돌려 줍 니 다.read 대상,'wb'방식 으로 파일 을 열 고 Wave 되 돌려 줍 니 다.write 대상.
    scipy.io.wavfile:
    매개 변수 path 파일 이름
    반환 rate:샘플링 율(초당 샘플링 포인트 의 개수),data:오디 오 데이터
    librosa.load:
    매개 변수 path 파일 이름
    y 를 오디 오 데이터 로 되 돌려 주 고 sr 는 샘플링 율 입 니 다.
    
    # read wav file from path
    from scipy.io import wavfile
    import librosa
    import pyaudio
    
    # wave
    file = wave.open(path,'rb')
    # wavfile
    rate, data = wavfile.read(path)
    # librosa
    y, sr = librosa.load(path)
    wavfile 로 오디 오 파일 을 읽 고 파형 을 그 리 는 예 를 보 여 줍 니 다.
    먼저 오디 오 가 얼마나 지속 되 었 는 지 계산 해 야 한다.웨 이브 의 shape 는 전체적인 샘플링 포인트 갯 수 이다.샘플링 빈 도 를 나 누 면 지속 적 인 총 시간(초)을 얻 을 수 있 고 1000 을 곱 하면 총 지속 시간(밀리초)을 얻 을 수 있다.이 어 np.linsapce 를 통 해 시간 서열 을 만 들 고 마지막 으로 matplotlib 를 사용 하여 그림 을 그립 니 다.
    
    from scipy.io import wavfile
    import matplotlib.pyplot as plt
    import numpy as np
    %matplotlib inline
    
    #      
    sr, wave = wavfile.read('D://QQPCMgr/Desktop/python3/skip.wav')
    sample_number = wave.shape[0]
    total_time = int(sample_number / sr * 1000)
    time_series = np.linspace(0,total_time,sample_number)
    fig, ax = plt.subplots(1, 1)
    ax.plot(time_series, wave)
    ax.set_title('Time*Amplitude')
    ax.set_xlabel('Time/ms')
    ax.set_ylabel('Amplitude/dB')

    마지막 으로 pyaudio api 를 빌 리 면 연속 녹음 기능 을 실현 할 수 있 습 니 다.
    python 녹음 기능 구현
    그 중,함수 multirecord 는 녹음 이 끝 날 때마다"다음 녹음 을 진행 하 시 겠 습 니까?"라 고 묻는다.돌아 오 는 차 를 누 르 면 다음 녹음 을 진행 할 수 있다.
    
    import wave
    import pyaudio
    import matplotlib.pyplot as plt
    import time
    
    CHUNK = 1024
    FORMAT = pyaudio.paInt16
    CHANNELS = 2
    RATE = 44100
    RECORD_SECONDS = 5
    
    
    def record(filename='output.wav'):
     """      
     """
     
     p = pyaudio.PyAudio()
     
     stream = p.open(format=FORMAT,
       channels=CHANNELS,
       rate=RATE,
       input=True,
       frames_per_buffer=CHUNK)
     
     print("* recording")
     
     frames = []
    
     for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
     data = stream.read(CHUNK)
     frames.append(data)
     
     print("* done recording")
     
     stream.stop_stream()
     stream.close()
     p.terminate()
     
     wf = wave.open(filename, 'wb')
     wf.setnchannels(CHANNELS)
     wf.setsampwidth(p.get_sample_size(FORMAT))
     wf.setframerate(RATE)
     wf.writeframes(b''.join(frames))
     wf.close()
    
    
    def multi_record(num=3):
     """implement     """
     for i in range(1,num+1):
     print(' {}     '.format(i))
     filename = 'record_{}.wav'.format(i)
     record(filename)
     time.sleep(second)
     _ = input('       ?')
    
    
    def main():
     multi_record()
    
    if __name__ == '__main__':
     main()
    총결산
    이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

    좋은 웹페이지 즐겨찾기