Python 生成10秒1khz的音频

89 阅读1分钟

用以下代码可以生成 16000 采样率,10秒长度,1khz 的音频

核心代码

import wave
import numpy as np

# 生成音频文件
def generate_audio(sample_rate=16000, freq=1000, duration=1, num_channels=1, sample_width=2, num_frames=0, comptype= 'NONE', compname= 'not compressed'):
    '''
    生成一个正弦波的音频文件

    sample_rate: 采样率, 每秒的样本数\n
    freq: 正弦波频率\n
    duration: 时长(s)\n
    num_channels: 通道数 1=单声道, 2=立体声\n
    sample_width: 采样宽度 字节数, 例如16位音频应该设置为 2\n
    num_frames: 帧数\n
    comptype: 压缩类型\n
    compname: 压缩名称\n
    '''
    #生成[0,1]区间44100个点
    x=np.linspace(0,duration, sample_rate * duration, endpoint=False)
    #计算正弦值,频率是1000Hz
    y=np.sin(x*2*np.pi*freq)
    #y的幅值是[-1,1]太小了,把振幅扩大10000倍声音听得更清楚
    z=y*10000
    #z是小数,需要把小数转成int16的整数
    z=z.astype(np.int16)
    #创建一个空的音频文件
    f=wave.open('{}khz_{}s.wav'.format(freq/1000, duration),'wb')
    #设置音频格式,分别为单通道,16bits,采样率 sample_rate Hz,0帧,后两个不管
    f.setparams((num_channels,sample_width,sample_rate,num_frames,comptype,compname))
    #把正弦数据写入音频文件里
    f.writeframes(z)
    #关闭保存文件
    f.close()
    print("finish")

使用方法

generate_audio(sample_rate=16000, freq=1000, duration = 10)