如何使用SciPy以不同的采样率读取.wav文件?

use*_*621 3 python audio scipy

默认情况下,scipy.io.wavfile.read每秒采样44100个样本。是否可以更改此值,使其每秒捕获较少的样本量?

Fra*_*kow 5

的第一个返回值scipy.io.wavfile.read是采样率,它取自音频文件的标题。如果要更改采样率,则必须进行一些采样率转换

这里有一些基本代码可以通过插值来更改采样率。请注意,这仅在原始采样率低于新采样率的情况下才是无害的。反之,如果音频文件包含的频率高于奈奎斯特频率,则可以引入混叠。如果是这种情况,则应在插值之前应用过滤器。

import numpy as np
from scipy.io import wavfile
from scipy import interpolate

NEW_SAMPLERATE = 48000

old_samplerate, old_audio = wavfile.read("test.wav")

if old_samplerate != NEW_SAMPLERATE:
    duration = old_audio.shape[0] / old_samplerate

    time_old  = np.linspace(0, duration, old_audio.shape[0])
    time_new  = np.linspace(0, duration, int(old_audio.shape[0] * NEW_SAMPLERATE / old_samplerate))

    interpolator = interpolate.interp1d(time_old, old_audio.T)
    new_audio = interpolator(time_new).T

    wavfile.write("out.wav", NEW_SAMPLERATE, np.round(new_audio).astype(old_audio.dtype))
Run Code Online (Sandbox Code Playgroud)