Timbre (音色)#

音源を読み込む#

import librosa
Fs = 11025
x, Fs = librosa.load('FMP_C1_F23_Piano.wav', sr=Fs)
len(x), len(x)/Fs
(45504, 4.12734693877551)

音源を再生する#

import IPython.display as ipd
ipd.display(ipd.Audio(data=x, rate=Fs))

波形を表示する#

import libfmp.c1
%matplotlib inline
import matplotlib.pyplot as plt
libfmp.b.plot_signal(x, Fs=Fs, figsize=(8,2), ylabel='Amplitude', title='Piano')
plt.show()
../../_images/4eb6c231eb8f16fda278a7a4b9ca0d2908be4274de39581b7a527a7697812625.png
libfmp.b.plot_signal(x, Fs=Fs, figsize=(8,2), ylabel='Amplitude', title='Piano')
plt.xlim(1.2, 1.3)
plt.show()
../../_images/61c11b9b832c08de05962f9bc18be9379862a38e75a0835f3c13eeda077984eb.png

スペクトログラムを表示する#

import numpy as np
import matplotlib.pyplot as plt
def plot_spectrogram(x, Fs=11025, N=4096, H=2048, figsize=(4, 2)):
    """Computation and subsequent plotting of the spectrogram of a signal

    Notebook: C1/C1S3_Timbre.ipynb

    Args:
        x: Signal (waveform) to be analyzed
        Fs: Sampling rate (Default value = 11025)
        N: FFT length (Default value = 4096)
        H: Hopsize (Default value = 2048)
        figsize: Size of the figure (Default value = (4, 2))

    """
    # N, H = 2048, 1024
    X = librosa.stft(x, n_fft=N, hop_length=H, win_length=N, window=np.hanning)  # not 'hamming'
    Y = np.abs(X)
    plt.figure(figsize=figsize)
    librosa.display.specshow(librosa.amplitude_to_db(Y, ref=np.max),
                             y_axis='linear', x_axis='time', sr=Fs, hop_length=H) # cmap='gray_r'
    plt.ylim([0, 3000])
    # plt.colorbar(format='%+2.0f dB')
    plt.xlabel('Time (seconds)')
    plt.ylabel('Frequency (Hz)')
    plt.tight_layout()
    plt.show()
plot_spectrogram(x, Fs=Fs, N=1024, H=256, figsize=(4, 3))
../../_images/a9d243ffcd86d3ce38622fc11597ec841e34e4bf3a760669900fde40c16c3f16.png

Note

スペクトログラムは、時間 (横軸)、周波数(縦軸)、信号成分の強さ(色)の三次元グラフです

他の音源についてもやってみる#

  • FMP_C1_F23_Piano.wav

  • FMP_C1_F23_Trumpet.wav

  • FMP_C1_F23_Violin.wav

  • FMP_C1_F23_Flute.wav

x, Fs = librosa.load('FMP_C1_F23_Trumpet.wav', sr=Fs)
plot_spectrogram(x, Fs=Fs, N=1024, H=256, figsize=(4, 3))
../../_images/9b49fb3d46174dd31f6c7550279dfd772110cb6f30461f7f81f841de10819439.png
x, Fs = librosa.load('FMP_C1_F23_Violin.wav', sr=Fs)
plot_spectrogram(x, Fs=Fs, N=1024, H=256, figsize=(4, 3))
../../_images/d4ccb5f0c0950e9b81e680ab0dc0d3014d44d184eadf4f83556751ab39fbcc61.png
x, Fs = librosa.load('FMP_C1_F23_Flute.wav', sr=Fs)
plot_spectrogram(x, Fs=Fs, N=1024, H=256, figsize=(4, 3))
../../_images/eeda851487ed64ea07d546ad7b22ba9ca76a21910a49e4c13693f2eeb79aa387.png