파이썬으로 오디오 파형 표시

소개



오디오 파형을 표시하는 코드를 작성할 때의 메모.
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할 필요가 있다고 생각됩니다.

좋은 웹페이지 즐겨찾기