生成扫频音频(也可以生成单频点音频)
import numpy as np
import scipy.signal as signal
from scipy.io import wavfile
def generate_sweep_wav(file_name, sampwidth, framerate, frequency_begin, frequency_end, nchannels, time,
amplifier=2 ** -1, method='linear'):
"""
生成扫频信号
amplifier=2 ** -1(刚好居中一半,正常范围是-1~1)
注释掉wave_data = wave_data.astype(np.short)
"""
# generate the time bar
t = np.arange(0, time, 1.0 / framerate)
# generate the chirp signal from 300 to 3300Hz
wave_data = signal.chirp(t, frequency_begin, time, frequency_end,
method=method) * amplifier # method{‘linear’, ‘quadratic’, ‘logarithmic’, ‘hyperbolic’}, optional--Kind of frequency sweep.
# cast to the type of short
# wave_data = wave_data.astype(np.short) # 不能加,加了都是0了。(本来是-1~1的范围)
print("wave_data.shape:{}".format(wave_data.shape))
if nchannels > 1:
if wave_data.ndim == 1:
wave_data.shape = (-1, 1)
wave_data = np.tile(wave_data, int(nchannels))
print("wave_data.shape:{}".format(wave_data.shape))
print("np.min(wave_data):{}".format(np.min(wave_data)))
print("np.max(wave_data):{}".format(np.max(wave_data)))
if file_name:
wavfile.write(file_name, framerate, wave_data)
dtype = wave_data.dtype #
return wave_data, framerate, dtype, nchannels
file_name, sampwidth, framerate, frequency_begin, frequency_end, nchannels, time = "3000Hz.wav", 8, 44100, 3000, 3000, 2, 0.2
generate_sweep_wav(file_name, sampwidth, framerate, frequency_begin, frequency_end, nchannels, time, amplifier=0.5, method='linear')