python手记(12)

这篇博客主要探讨了音频处理的相关知识,包括声音的数字化过程、采样位数、采样频率等概念,以及WAV音频格式的计算。文章还介绍了声音的基本属性——振幅、周期和频率,以及脉冲编码调制(PCM)在声音数字化中的作用。通过实例解释了声音的振幅、频率和包络如何影响音量和音调,并提到了Adobe Audition作为音频处理软件的应用。
摘要由CSDN通过智能技术生成
# -*- coding: utf-8 -*-
import wave
import pylab as pl
import numpy as np
# 打开WAV文档
f = wave.open(r"f:\test.wav", "rb")
# 读取格式信息
# (nchannels, sampwidth, framerate, nframes, comptype, compname)
params = f.getparams()
nchannels, sampwidth, framerate, nframes = params[:4]
# 读取波形数据
str_data = f.readframes(nframes)
f.close()
#将波形数据转换为数组
wave_data = np.fromstring(str_data, dtype=np.short)
wave_data.shape = -1, 2
wave_data = wave_data.T
time = np.arange(0, nframes) * (1.0 / framerate)
# 绘制波形
pl.subplot(211)
pl.plot(time, wave_data[0])
pl.subplot(212)
pl.plot(time, wave_data[1], c="g")
pl.xlabel("time (seconds)")
pl.show()

读取声音波形

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

http://blog.csdn.net/u010255642



减少音量

# -*- coding: utf-8 -*-
import wave
import pylab as pl
import numpy as np
# 打开WAV文档
print "open wav files...."
f1 = wave.open(r"f:\speak.wav", "rb")
f2 = wave.open(r"f:\11.wav", "wb")
# 读取格式信息
# (nchannels, sampwidth, framerate, nframes, comptype, compname)
print "read wav data...."
params = f1.getparams()
nchannels, sampwidth, framerate, nframes = params[:4]
# 读取波形数据
str_data = f1.readframes(nframes)
#将波形数据转换为数组,并更改,减少音量

print "update wav data...."
wave_data = np.fromstring(str_data, dtype=np.short)
wave_data =wave_data/100
str_data=wave_data.tostring()
#写波形数据参数
print "save new wav files...."
f2.setnchannels(nchannels)
f2.setframerate(framerate)
f2.setsampwidth(sampwidth)
f2.writeframes(str_data)
print "close  wav files...."
f2.close()
f1.close()


将音量控制在某个范围内

# -*- coding: utf-8 -*-
import wave
import pylab as pl
import numpy as np

def wavechange(x,dwmax,dwmin):
    if x!=0:
        if abs(x)>dwmax:
            x=x/abs(x)*dwmax
        elif abs(x)<dwmin:
            x=x/abs(x)*dwmin
        else:
            x=x*1.5
    return x
# 打开WAV文档
print "open wav files...."
f1 = wave.open(r"f:\speak.wav", "rb")
f2 = wave.open(r"f:\11.wav", "wb")
# 读取格式信息
# (nchannels, sampwidth, framerate, nframes, comptype, compname)
print "read wav data...."

# 读取波形数据
params = f1.getparams()
nchannels, sampwidth, framerate, nframes = params[:4]
str_data = f1.readframes(nframes)
#将波形数据转换为数组,并更改
print "update wav data...."
wave_data = np.fromstring(str_data, dtype=np.short)

change_dwmax=wave_data.max()/100*88
change_dwmin=wave_data.max()/100*14
wave_change = np.frompyfunc(wavechange,3,1)
new_wave_data =wave_change(wave_data,change_dwmax,change_dwmin)
new_wave_data =new_wave_data.astype(wave_data.dtype)
str_data=new_wave_data.tostring()
#写波形数据参数
print "save new wav files...."
f2.setnchannels(nchannels)
f2.setframerate(framerate)
f2.setsampwidth(sampwidth)
f2.writeframes(str_data)
print "close  wav files...."
f2.close()
f1.close()


    
    




    
    

音频采样 AD

数码音频系统是通过将声波波形转换成一连串的二进制数据来再现原始声音的,实现这个步骤使用的设备是模/数转换器(A/D)它以每秒上万次的速率对声波进 行采样,每一次采样都记录下了原始模拟声波在某一时刻的状态,称之为样本。将一串的样本连接起来,就可以描述一段声波了,把每一秒钟所采样的数目称为采样 频率或采率,单位为HZ(赫兹)。采样频率越高所能描述的声波频率就越高。采样率决定声音频率的范围(相当于音调),可以用数字波形表示。以波形表示的频 率范围通常被称为带宽。要正确理解音频采样可以分为采样的位数和采样的频率。 


采样位数 采样精度

采样位数可以理解为采集卡处理声音的解析度。这个数值越大,解析度就越高,录制和回放的声音就越真实。我们首先要知道:电脑中的声音文件是用数字0和1来 表示的。所以在电脑上录音的本质就是把模拟声音信号转换成数字信号。反之,在播放时则是把数字信号还原成模拟声音信号输出。采集卡的位是指采集卡在采集和 播放声音文件时所使用数字声音信号的二进制位数。采集卡的位客观地反映了数字声音信号对输入声音信号描述的准确程度。8位代表2的8次方--256,16 位则代表2的16次方--64K。比较一下,一段相同的音乐信息,16位声卡能把它分为64K个精度单位进行处理,而8位声卡只能处理256个精度单位, 造成了较大的信号损失,最终的采样效果自然是无法相提并论的。 


音频采样频率 Fs

数码音频系统是通过将声波波形转换成一连串的二进制数据来再现原始声音的,实现这个步骤使用的设备是模/数转换器(A/D)它以每秒上万次的速率对声波进 行采样,每一次采样都记录下了原始模拟声波在某一时刻的状态,称之为样本。将一串的样本连接起来,就可以描述一段声波了,把每一秒钟所采样的数目称为采样 频率或采率,单位为HZ(赫兹)。采样频率越高所能描述的声波频率就越高。 采样频率是指录音设备在一秒钟内对声音信号的采样次数,采样频率越高声音的还原就越真实越自然。在当今的主流采集卡上,采样频率一般共分为 22.05KHz、44.1KHz、48KHz三个等级,22.05 KHz只能达到FM广播的声音品质,44.1KHz则是理论上的CD音质界限,48KHz则更加精确一些。对于高于48KHz的采样频率人耳已无法辨别出 来了,所以在电脑上没有多少使用价值


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值