Python和科学计算认证群组  - 讨论区

标题:纯粹好奇,一个无聊的问题

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哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号