语音识别(四):音频合成

import os
import sys
import sys
import numpy as np 
import scipy.io.wavfile as wf 

def read_tone_freq(filename):
    with open(filename,'r') as f:
        tone_freqs = json.loads(f.read())
    print(tone_freqs)
    return tone_freqs

def make_signals(duration,sample_rate,signal_freq,amp):
    times = np.linspace(0,duration,duration*sample_rate)
    sigs = amp*np.sin(2*np.pi*signal_freq*times)
    return sigs


def save_signals(filename,sample_rate,sigs):
    wf.write(filename,sample_rate,(sigs/np.max(sigs)*2**15).astype(np.int16))

def synthesizer(tone_freq,tones,sample_rate,amp):
    music_sigs = np.empty(shape=1)
    for tone,duration in tones:
        sigs = make_signals(duration,sample_rate,tone_freqs[tone],amp)
        music_sigs = np.append(music_sigs,sigs)
    return music_sigs


def main(argc,argv,envp):
    tone_freq = read_tone_freq('equal_tempered_scale.json')
    tones = [('C5',1.0),('D5',0.5),('E5',0.5),('F5','0.5'),('G5',0.5),('F5',0.5),('E5',0.5),('D5',0.5),('C5',1.0),('G5',0.5)]
    music_sigs = synthesizer(tone_freq,tones,44100,1)
    save_signals(music_sigs)
    return 0

if __name__ == '__main__':
    sys.exit(main(len(sys.argv),sys.argv,os.environ))

猜你喜欢

转载自blog.csdn.net/weixin_38246633/article/details/80665940