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 notebookjupyer notebook 에서 오디 오 를 재생 할 때 다음 함 수 를 사용 할 수 있 습 니 다.
import IPython.display as ipd
ipd.Audio( )
오디 오 를 읽 는 몇 가지 방식python 은 오디 오 파일 을 읽 는 방법 이 많 습 니 다.내 장 된 라 이브 러 리 웨 이브,과학 컴 퓨 팅 라 이브 러 리 scipy,그리고 사용 하기 쉬 운 음성 처리 라 이브 러 리 librosa 가 있 습 니 다.
이 라 이브 러 리 를 사용 하여 오디 오 파일 을 읽 는 방법 을 소개 합 니 다.
설치:
4.567917.웨 이브 는 내장 라 이브 러 리 로 직접 가 져 오 면 됩 니 다
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()
총결산이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.