파이썬으로 오디오 파형 표시
6579 단어 librosa음악파이썬matplotlib음성 처리
소개
오디오 파형을 표시하는 코드를 작성할 때의 메모.
librosa라는 라이브러리의 librosa.display.waveplot을 사용하기 쉽지만 음성 파일의 데이터 수가 많은 경우 오류가 발생하기 때문에 matplotlib.pyplot을 사용하여 솔직하게 표시하는 방법도 적는다.
librosa.display.waveplot을 사용하는 방법
가장 쉬운 방법.
코드
import librosa
def make_waveform_librosa(filename):
y, sr = librosa.load(filename)
librosa.display.waveplot(y, sr=sr)
make_waveform_librosa("test.mp3")
결과
그러나, 읽어들이는 음성 파일의 데이터수가 큰 경우, OverflowError: Exceeded cell block limit이 되어, 잘 파형을 표시할 수 없는 경우가 있다.
matplotlib.pyplot을 사용하는 방법
matplotlib의 백엔드에서 움직이는 agg의 chunksize를 변경할 수 있기 때문에 음성 파일의 데이터 수가 큰 경우에도 대응할 수 있다.
코드
import matplotlib.pyplot as plt
import matplotlib
import librosa
def make_waveform_pyplot(filename):
y, sr = librosa.load(filename)
totaltime = len(y)/sr
time_array = np.arange(0, totaltime, 1/sr)
mpl.rcParams['agg.path.chunksize'] = 100000
fig, ax = plt.subplots()
formatter = mpl.ticker.FuncFormatter(lambda s, x: time.strftime('%M:%S', time.gmtime(s)))
ax.xaxis.set_major_formatter(formatter)
ax.set_xlim(0, totaltime)
ax.set_xlabel("Time")
ax.plot(time_array, y)
plt.show()
make_waveform_pyplot("test.mp3")
chunksize는 여기을 참조하면 다음과 같이 쓰여졌으므로 적당히 100000으로 두었습니다.
### Agg rendering
### Warning: experimental, 2008/10/10
#agg.path.chunksize : 0 # 0 to disable; values in the range
# 10000 to 100000 can improve speed slightly
# and prevent an Agg rendering failure
# when plotting very large data sets,
# especially if they are very gappy.
# It may cause minor artifacts, though.
# A value of 20000 is probably a good
# starting point.
결과
librosa.display.waveplot와 같은 것을 출력할 수 있었다.
결론
librosa.display.waveplot도 내부에서 matplotlib를 사용하고 있기 때문에, 마찬가지로 chunksize를 Fuck하면 표시할 수 있다고 생각합니다만, 직접 라이브러리의 코드를 Fuck할 필요가 있다고 생각됩니다.
Reference
이 문제에 관하여(파이썬으로 오디오 파형 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/oknix/items/6cdbf853de6aeb474657
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
가장 쉬운 방법.
코드
import librosa
def make_waveform_librosa(filename):
y, sr = librosa.load(filename)
librosa.display.waveplot(y, sr=sr)
make_waveform_librosa("test.mp3")
결과
그러나, 읽어들이는 음성 파일의 데이터수가 큰 경우, OverflowError: Exceeded cell block limit이 되어, 잘 파형을 표시할 수 없는 경우가 있다.
matplotlib.pyplot을 사용하는 방법
matplotlib의 백엔드에서 움직이는 agg의 chunksize를 변경할 수 있기 때문에 음성 파일의 데이터 수가 큰 경우에도 대응할 수 있다.
코드
import matplotlib.pyplot as plt
import matplotlib
import librosa
def make_waveform_pyplot(filename):
y, sr = librosa.load(filename)
totaltime = len(y)/sr
time_array = np.arange(0, totaltime, 1/sr)
mpl.rcParams['agg.path.chunksize'] = 100000
fig, ax = plt.subplots()
formatter = mpl.ticker.FuncFormatter(lambda s, x: time.strftime('%M:%S', time.gmtime(s)))
ax.xaxis.set_major_formatter(formatter)
ax.set_xlim(0, totaltime)
ax.set_xlabel("Time")
ax.plot(time_array, y)
plt.show()
make_waveform_pyplot("test.mp3")
chunksize는 여기을 참조하면 다음과 같이 쓰여졌으므로 적당히 100000으로 두었습니다.
### Agg rendering
### Warning: experimental, 2008/10/10
#agg.path.chunksize : 0 # 0 to disable; values in the range
# 10000 to 100000 can improve speed slightly
# and prevent an Agg rendering failure
# when plotting very large data sets,
# especially if they are very gappy.
# It may cause minor artifacts, though.
# A value of 20000 is probably a good
# starting point.
결과
librosa.display.waveplot와 같은 것을 출력할 수 있었다.
결론
librosa.display.waveplot도 내부에서 matplotlib를 사용하고 있기 때문에, 마찬가지로 chunksize를 Fuck하면 표시할 수 있다고 생각합니다만, 직접 라이브러리의 코드를 Fuck할 필요가 있다고 생각됩니다.
Reference
이 문제에 관하여(파이썬으로 오디오 파형 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/oknix/items/6cdbf853de6aeb474657
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import matplotlib.pyplot as plt
import matplotlib
import librosa
def make_waveform_pyplot(filename):
y, sr = librosa.load(filename)
totaltime = len(y)/sr
time_array = np.arange(0, totaltime, 1/sr)
mpl.rcParams['agg.path.chunksize'] = 100000
fig, ax = plt.subplots()
formatter = mpl.ticker.FuncFormatter(lambda s, x: time.strftime('%M:%S', time.gmtime(s)))
ax.xaxis.set_major_formatter(formatter)
ax.set_xlim(0, totaltime)
ax.set_xlabel("Time")
ax.plot(time_array, y)
plt.show()
make_waveform_pyplot("test.mp3")
### Agg rendering
### Warning: experimental, 2008/10/10
#agg.path.chunksize : 0 # 0 to disable; values in the range
# 10000 to 100000 can improve speed slightly
# and prevent an Agg rendering failure
# when plotting very large data sets,
# especially if they are very gappy.
# It may cause minor artifacts, though.
# A value of 20000 is probably a good
# starting point.
librosa.display.waveplot도 내부에서 matplotlib를 사용하고 있기 때문에, 마찬가지로 chunksize를 Fuck하면 표시할 수 있다고 생각합니다만, 직접 라이브러리의 코드를 Fuck할 필요가 있다고 생각됩니다.
Reference
이 문제에 관하여(파이썬으로 오디오 파형 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/oknix/items/6cdbf853de6aeb474657텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)