Pythonでリサンプリングテスト

Python
Python
Table of Content

つくりかけ。 Work in progress.

# coding: utf-8

import wave

import matplotlib.pyplot as plt
import numpy as np
import scipy.interpolate
from numpy

file_name = "E://TESTDATA.wav"

if __name__ == "__main__":
    """読み込み作業"""
    wave_file = wave.open(file_name, "r")  # Open

    CH = wave_file.getnchannels()  # モノラルorステレオ
    f1 = wave_file.getframerate()  # サンプリング周波数
    N = wave_file.getnframes()     # フレームの総数
    dt = 1 / f1  # サンプリング周期 [s]

    print("モノラルorステレオ")
    print(CH)

    print("サンプリング周波数")
    print(f1)

    print("フレームの総数")
    print(N)
    print(wave_file.getparams())

    original = wave_file.readframes(N)                 # フレームの読み込み
    original = np.frombuffer(original, dtype="int16")  # numpy.arrayに変換
    targetLen = wave_file.getnframes()

    # original = np.sin(np.arange(256) / 10.0)
    # targetLen = 100

    # 方法1: scipy interp1d(線形補間)を使用します
    # これは、線形補間を使用するだけなので、概念的には最も簡単です
    # 他のさまざまな補間方法も提供します
    # f = interp1d(np.arange(256), original, 'linear')
    # plt.plot(np.apply_along_axis(f, 0, np.linspace(0, 255, num=targetLen)))

    # 方法3: scipyのリサンプルを使用します
    # 信号を周波数空間に変換し(フーリエ法)、その後戻します
    # これは周期関数では効率的に機能しますが、非周期関数では不十分です
    plt.plot(resample(original, targetLen))
    plt.show()

コメント

タイトルとURLをコピーしました