为什么我在python中写一个wav文件但没有声音播放

时间:2013-10-16 08:33:59

标签: python scipy waveform

我用int32数据类型编写wav文件,采样率为11025,但播放时输出wav文件没有声音。

from scipy.io.wavfile import read
rate, data0 = read('001.wav') #rate type is int     
data = numpy.asarray(data0,dtype=theano.config.floatX)  
for ffp in data:                    
    print data[ffp]

使用此代码我们可以清楚地看到正常的wav文件。 这是一些整数序列:

-23.0 -51.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.0 -17.0 39.0 253.0 -266.0 -146.0 -146.0 -56.0 0.0 0.0 -1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 43.0 177.0 -428.0 455.0 -236.0 -325.0 113.0 237.0 121.0 82.0 352.0 139.0 0.0 0.0 2.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 214.0 160.0 -733.0 -501.0 844.0 -446.0 -8.0 28.0 0.0 -1.0 -170.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.0 -2.0 -1.0 0.0 0.0 0.0 -2.0 184.0 51.0 -330.0 -80.0 416.0 -121.0 -498.0 192.0 148.0 0.0 0.0 -1.0 0.0 0.0 0.0 -1.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.0 0.0 0.0 0.0 112.0 -171.0 -253.0 -49.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2.0 -1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -24.0 0.0 0.0 -101.0 -142.0 -476.0 -212.0 -377.0 329.0 44.0 -38.0 246.0 0.0 0.0 7.0 315.0 189.0 67.0 28.0 97.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 120.0 54.0 0.0

这个没有声音的wav文件播放:

    from scipy.io.wavfile import write

    wavfiles = []

    for fr in range(wavfile.size/11025):
        for fn in range(wavfile[fr].size):
            wavfile[fr][fn] = int(wavfile[fr][fn])                                              
        wavfiles0 = numpy.asarray(wavfile[fr],dtype='int32')
        wavfiles.append(wavfiles0)

    wavfiles_ = numpy.vstack(wavfiles)        
    wavfiles2 = wavfiles_.ravel()
    filename = 'test01.wav'           
    write(filename, 11025, wavfiles2)
    for ffp in wavfiles2:                    
        print wavfiles2[ffp]

我们可以看到这个整数序列:

-429 -288 -725 -1264 486 326 -639 -695 -632 -742 532 1063 671 71 -613 73 807 195 496 -422 -74 -564 884 -1196 558 -106 -667 975 -546 -178 -1253 -279 1021 -549 38 304 -278 -950 -264 -88 621 -460 78 -138 450 -191 370 123 599 -858 -860 95 -204 -285 -210 441 294 -225 -109 -26 -1267 -199 -950 -369 -232 348 -528 -13 495 -554 -542 1066 159 -176 -282 -1240 -298 -1304 -883 309 -574 519 -149 271 -562 -1107 -248 -161 100 -165 109 105 -267 -801 8 -346 -1065 -198 394 -538 32 -41 73 -209 -1095 1508 -520 37 139 450 -335 -60 -225 499 -63 991 -702 -733 702 -480 -828 -447 -803 978 -439 663 636 -513 42 -100 388 945 364 590 -142 1127 -950 -1052 1122 213 -94 -722 -63 -601 323 509 -692 -446 -393 -496 940 -761 311 -643 -144 -280 -162 383 -828 -198 -361 -61 -1035 -246 1167 -29 27 246 1063 -88 192 -1481 -524 457 -205 453 -198 499 -33 30 438 72 198 -17 -303 532 -282 738 712 -963 198 53 623 708 879 398 388 954 -177 -549 165 116 -359 147 410 -69 615 240 168 -745 -83 125 -858 847 930 142 -1127 465 1535 1054 -1229 711 295 266 38 146 -701 -345 -74 241 164 102 -684 -339 130 -883 -1442 -1196 124 -649 -15 -376 776 -559 73 940 -419 -48 617 20 -515 179 -1065 157 -497 202 282 -6 -104 -267 343 489 236 722 -320 1007 -466 -129 807 487 -674 -627 170 256 -856 -629 -166 -1390 1184 -303 179 -447 482 303 -502 -52 -137 395 109 280 1147 159 243 118 531 -70 -564 562 491 38 -74 -826 -63 -1276 329 -43 -41 -587 -193 -43 -52 949 -258 -446 -460 -258 332 -580 -514 -898 294 -883 -377 -428 48 0 411 970 146 410 -183 -161 -177 38 67 346 -447 -217 -998 580 -165 411

是否有任何原因造成这种无声播放的错误。

如果整数序列不是普通的wav文件数据序列,那么由于序列的正常值小于正常值?

我正在做的是学习音乐,比如将30首歌曲合并为一首歌,但是当我播放我制作的一首歌时,没有声音。 寻求帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

我对scipy.io.wavfile没有经验。

但是,音频数据是int32,这意味着动态范围应该跨越[2147483648 ..- 2147483647],这将使得1063的值具有4.95e-07的幅度,即使您的硬件也应该听不到可以准确地呈现它。

我也对你的采样率感到困惑。在每秒11025个样本中,您显示的160个样本(假设是单声道音频)将产生14毫秒的声音。声音如此短暂,即使它处于你能听到的振幅,也会在它开始播放之前几乎结束。