Python制作任意音频文件

本文件示例了如何用python脚本来生成任意波形的Wav音频文件,用来做为声音源帮助听力产品的测试。

python中需要安装wave、nump、scipy库;

下面为一生成无声音的脚本:

import wave
import numpy as np
import scipy.signal as signal

# sample frequency, unit = hz
frameRate = 16000
time = 60  # unit = second
volumn =  0 # 30000,音量设置

# 通过调用 scipy.signal库中的 chrip 函数,产生长度为10秒、取样频率为44.1kHz、100Hz到1kHz的频率扫描波
t = np.arange(0, time, 1.0 / frameRate)

#
# Save time line into xls file.
#
'''
ft = open("ti.xls", "w")
for item in t:
    ft.write(str(item)+'\n')
ft.close()
'''

# chirp(t,f0,t1,f1,method='linear', phi=0, vertex_zero=True)
#    t = array of time
#    f0 = start frequency from t[0]
#    t1 = end time
#    f1 = frequency of t1
# for linear method: f(t) = f0 + (f1 - f0) * t/t1
wave_data = signal.chirp(t, 100, time, 100, method='linear') * volumn
# 由于chrip函数返回的数组为float64型,需要调用数组的astype方法将其转换为short型。
wave_data = wave_data.astype(np.short)

#
# Save time line into xls file.
#
maxVal = 0
minVal = 32768
fwave = open("wave.xls", "w")
for item in wave_data:
    fwave.write(str(item)+'\n')
    if maxVal < item:
        maxVal = item
    if minVal > item:
        minVal = item
fwave.close()
print('[min,max] value=[' + str(minVal) + ',' + str(maxVal) + ']' )

'''
#data = 2+np.sin(np.random.rand(160000)) # random noise
data = 2+np.sin(np.array(range(160000))) # sin wave sound

data = data*10000  # increase volumn
data = data.astype(np.short) # convert wave dat to int16 from float64
print(type(data[0]))
# print(len(data))
# print(data[:3])
'''

f = wave.open(r"000.wav", "wb")

# 配置声道数、量化位数和取样频率
f.setnchannels(1)  # 声道数
f.setsampwidth(2)  # 量化位数
f.setframerate(frameRate)  # 采样频率
f.writeframes(wave_data.tostring())  # 将wav_data转换为二进制数据写入文件
f.close()

 

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值