V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
whywhatwhenhow
V2EX  ›  问与答

关于 python 处理读取 wave 文件的问题

  •  
  •   whywhatwhenhow · 2014-05-12 23:03:37 +08:00 · 4996 次点击
    这是一个创建于 3640 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大家好,我是按照http://blog.csdn.net/xsc_c/article/details/8941338写的的代码

    我还有三个问题请教?

    wave_data = np.fromstring(str_data, dtype=np.short) # 疑问1、此时,如果wave文件的采样宽度是8比特,该如何转成数组呢?使用长度是16比特的short分割数组,合理吗

    # for the data is stereo,and format is LRLRLR...
    # shape the array to n*2(-1 means fit the y coordinate) wave_data.shape = -1, 2 # 疑问2、此时,应该对文件的channel数做一个判断吧,单声道的不用再这样把组数一分为二了吧?

    plt.plot(time, wave_data[0]) # 疑问3、plot的两个参数的长度不一致。 此时time数组的长度是nframe ;而wave_data[0]的长度是wave_data被拆分前的一半,wave_data长度是str_data 被short 分割前的一半,wave_data[0]的长度也就是1/4 nframe 。

    谢谢。
    1 条回复    2014-05-13 10:23:52 +08:00
    sivacohan
        1
    sivacohan  
       2014-05-13 10:23:52 +08:00
    先说一下wav的格式。wav实际上是RIFF的。具体情况是,开头有一堆头信息,你的nframe之类的就是在这里读出来的。头信息之后就是具体的音频内容了。格式为

    LR\n
    LR\n
    LR\n

    其中L,R的大小和采样大小相同如果是CD的话就是两位。

    下面说你的问题:

    1、我上面解释了,你自己看看。
    2、你说的对。
    3、wave_data的长度没变化,现在的wave_data[0]应该是
    L\n
    L\n
    L\n
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2570 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 13:08 · PVG 21:08 · LAX 06:08 · JFK 09:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.