2010年12月09日 星期四 22:43
最近看了一下PIL这个库,知道了每个像素点上的值都可以打印出来
我想问一下RY老师,不知道您有没处理过音频文件?音频文件也能通过什么处理一下然后用十进制打印出来吗?
谢谢
2010年12月10日 星期五 09:36
音频文件就说WAV文件吧,其中保存的是没有压缩的PCM数据。
在《用Python做科学计算》的第13.1节有介绍如何读写WAV文件。
最简单的方法是使用scipy.io.wavfile模块:
按照下面的方法读入数据之后,用十进制显示data数组的内容即可:
>>> import scipy.io.wavfile as wavfile
>>> rate,data = wavfile.read(r"c:\WINDOWS\Media\ding.wav")
>>> rate
22050
>>> data.shape
(20191,2)
>>> data.dtype
dtype('int16')
或者用numpy.savetxt将data数组的内容保存成CSV文件:
>>> np.savetxt("wave.txt", data, fmt="%d", delimiter=",")
2010年12月10日 星期五 10:23
RY老师,我看到的是15章的那个版本。。。但是对于mp3的处理,只有一个用pymedia播放mp3的标题。。。
2010年12月10日 星期五 18:30
pymedia很久没更新了,因此没有写这一段。如果要处理mp3的话可以用其它的mp3解码程序先转换为wav文件。google一下的话也许可以找到python可调用解码库。
2010年12月12日 星期日 15:06
python科学计算里的例子:
.......
t = np . arange ( 0 , time , 1.0 / framerate )
wave_data = signal . chirp ( t , 100 , time , 1000 , method = 'linear' ) * 10000
wave_data = wave_data . astype ( np . short )
.......
这段话里的chirp函数的结果是很多数经过cos运算后的一个数组,后面 * 10000这个数我不太明白是什么意思。
如果量化位数是2bytes,采样值的范围就是-32768~32767, *10000是跟这个有关吗?
我也是这两天才看了点有关音频文件的介绍,还不太懂,希望RY老师帮忙解答一下。
2010年12月12日 星期日 17:58
signal.chrip计算结果的范围是-1到1。*10000只是将它扩大,转换成2byte的整数时有波形出现。如果想做满振幅的波形的话,应该乘以32767。
Zeuux © 2024
京ICP备05028076号