python WAV音频文件处理—— (1)读写WAV文件

2024-06-15 1061阅读

原文

代码

了解WAV文件格式

WAV是一种波形音频文件格式(Waveform Audio File Format)。虽然是一种古老的格式(九十年代初开发),但今天仍然可以看到这种文件。

WAV具有简单、可移植、高保真等特点。

WAV的波形

声音是一种波,可以用3个属性描述:

  • 振幅(Amplitude) 表示声波强度,可视为响度。
  • 频率(Frequency),波长的倒数,对应音高。
  • 相位(Phase)波开始时对应波周期中的位置。

    如果你用音频软件(如Audacity)打开WAV文件,可能看到这样的波形

    python WAV音频文件处理—— (1)读写WAV文件

    WAV 文件的结构

    WAV 音频文件格式是一种二进制格式,结构如下:

    python WAV音频文件处理—— (1)读写WAV文件

    Header 是一组元数据,描述了如何解释接下来的Frame。

    Header中的参数说明:

    • Encoding:编码。样音频信号的数字表示。可用的编码类型包括未压缩的线性脉冲编码调制 (PCM) 和一些压缩格式,如 ADPCM、A-Law 或 μ-Law。
    • Channels:声道数。每帧中的声道数,对于单声道,通常等于 1 个,对于立体声音轨,通常等于 2 个,但对于环绕声录音,可能会更多。
    • Frame Rate:帧速率。也称采样率。
    • Bit Depth:位深度,每个音的比特位数。位深度越大,编码信号的动态范围越大,越能表现声音的细微差别。

      为了忠实地表现音乐,大多数 WAV 文件使用立体声 PCM 编码,其中 16 位有符号整数以 44.1 kHz 采样。这些参数对应于标准 CD 质量的音频。巧合的是,这样的采样频率大约是大多数人能听到的最高频率的两倍。根据 Nyquist-Shannon 采样定理,这足以以数字形式捕获声音而不会失真。

      Python的wave模块

      wave 模块负责读取和写入 WAV 文件(但不能播放声音)。

      使用wave.open 读取wav文件将返回一个 wave.Wave_read object。

      import wave
      with wave.open("Bongo_sound.wav") as wav_file:
          print(wav_file)
      

      可以使用该对象检索存储在 WAV 文件Header信息并读取编码的音频帧:

      >>> with wave.open("Bongo_sound.wav") as wav_file:
      ...     metadata = wav_file.getparams() # header 
      ...     frames = wav_file.readframes(metadata.nframes) # frame
      ...
      >>> metadata
      _wave_params(
          nchannels=1,
          sampwidth=2,
          framerate=44100,
          nframes=212419,
          comptype='NONE',
          compname='not compressed'
      )
      >>> frames
      b'\x01\x00\xfe\xff\x02\x00\xfe\xff\x01\x00\x01\x00\xfe\xff\x02\x00...'
      >>> len(frames)
      424838
      

      读取的帧是原始比特(bytes),我们需要手动解码。从Header中我们看到,每个音占2个字节(16位)。

      我们可以用array模块:

      >>> import array
      >>> pcm_samples = array.array("h", frames)
      >>> len(pcm_samples)
      212419
      

      或者使用struct模块:

      >>> import struct
      >>> format_string = "
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]