python手记(50)

#!/usr/bin/env python  
# -*- coding: utf-8 -*-
#http://blog.csdn.net/myhaspl  
#code:myhaspl@qq.com 
import wave
import pylab as pl
import numpy as np


print 'http://blog.csdn.net/myhaspl'  
print 'myhaspl@qq.com'  
print  
  
print 'working...' 



print "generate wav data...."
# 打开WAV文档

fo = wave.open(r"plpl1.wav", "wb")


# 设置波形参数
#采样率
framerate = 22050
#声道数
nchannels=2
#每位宽度
sampwidth=2
#长度
nframes =framerate
#频率
freq=440
#最大振幅
max_amplitude = 4000
#每样本秒数
interval=1.0/freq
#每周期样本数
samplepercycle=interval*framerate#=interval/(1/framerate)

wave_data=np.zeros((nframes), dtype=np.short)


maxcycle=2*np.pi
for curpos in xrange(0,nframes):
    possamp=np.sin((curpos/samplepercycle)*maxcycle)
    sampleval=int(max_amplitude*possamp)
    wave_data[curpos]=sampleval

str_data=wave_data.tostring()








#频率
freq=880
#最大振幅
max_amplitude = 2000
#每样本秒数
interval=1.0/freq
#每周期样本数
samplepercycle=interval*framerate#=interval/(1/framerate)

new_wave_data=np.zeros((nframes), dtype=np.short)


maxcycle=2*np.pi
for curpos in xrange(0,nframes):
    possamp=np.sin((curpos/samplepercycle)*maxcycle)
    sampleval=int(max_amplitude*possamp)
    new_wave_data[curpos]=sampleval







# 绘制波形
wave_data.shape = -1, 2
wave_data = wave_data.T
new_wave_data.shape = -1, 2
new_wave_data = new_wave_data.T
time = np.arange(0, nframes/2)[:100]# * (1.0 / framerate)
pl.subplot(323)
pl.plot(time, new_wave_data[0][:100])
pl.subplot(324)
pl.plot(time, new_wave_data[1][:100], c="g")
pl.xlabel("time (seconds)")
#波形叠加
new_wave_data+=wave_data




# 绘制波形

time = np.arange(0, nframes/2)[:100]# * (1.0 / framerate)
pl.subplot(321)
pl.plot(time, wave_data[0][:100])
pl.subplot(322)
pl.plot(time, wave_data[1][:100], c="g")
pl.xlabel("time (seconds)")

time = np.arange(0, nframes/2)[:100]# * (1.0 / framerate)
pl.subplot(325)
pl.plot(time, new_wave_data[0][:100])
pl.subplot(326)
pl.plot(time, new_wave_data[1][:100], c="g")
pl.xlabel("time (seconds)")
#写波形数据参数
print "save new wav files...."
new_str_data=new_wave_data.tostring()
fo.setnchannels(nchannels)
fo.setframerate(framerate)
fo.setsampwidth(sampwidth)
fo.setnframes(nframes)

fo.writeframes(new_str_data)
fo.close()

本博客所有内容是原创,未经书面许可,严禁任何形式的转载

http://blog.csdn.net/u010255642

python 产生声音的正弦波并叠加

>>> runfile(r'K:ook_progaudio_hy.py', wdir=r'K:ook_prog')
http://blog.csdn.net/myhaspl
myhaspl@qq.com


working...
generate wav data....
save new wav files....


原文地址:https://www.cnblogs.com/suncoolcat/p/3290036.html