如何用Python编写24位WAV文件?

det*_*tly 12 python wav

我想使用Python 2.7从-1到1之间的浮点值数组生成一个24位WAV格式的音频文件.我不能使用scipy.io.wavfile.write,因为它只支持16或32位.Python自己的wave模块的文档没有指定它采用的数据格式.

那么在Python中可以这样做吗?

Mat*_*ias 5

两年前我已经提交了这个问题的答案,我在那里推荐了scikits.audiolab

与此同时,情况发生了变化,现在有一个更易于使用且更易于安装的库,它甚至带有自己的适用于 Windows 和 OSX的libsndfile库副本(在 Linux 上无论如何都易于安装) ): PySoundFile !

如果你安装了 CFFI 和 NumPy,你可以通过运行简单地安装 PySoundFile

pip install soundfile --user
Run Code Online (Sandbox Code Playgroud)

编写 24 位 WAV 文件很容易:

import soundfile as sf
sf.write('my_24bit_file.wav', my_audio_data, 44100, 'PCM_24')
Run Code Online (Sandbox Code Playgroud)

在这个例子中,my_audio_data必须是一个NumPy的阵列dtype 'float64''float32''int32''int16'

顺便说一句,我做了一个概述页面,我尝试比较许多可用的 Python 库来读取/写入声音文件。


War*_*ser 3

另一个选项可以在wavio(也在 PyPI 上: https: //pypi.python.org/pypi/wavio)中找到,这是我创建的一个小模块,作为 scipy 尚不支持 24 位 WAV 文件问题的解决方法。该文件wavio.py包含函数write,它将 numpy 数组写入 WAV 文件。要写入 24 位文件,请使用参数sampwidth=3。唯一的依赖wavio是 numpy;wavio使用标准库wave来处理WAV文件格式。

例如,

import numpy as np
import wavio
rate = 22050             # samples per second
T = 3                    # sample duration (seconds)
f = 440.0                # sound frequency (Hz)
t = np.linspace(0, T, T*rate, endpoint=False)
sig = np.sin(2 * np.pi * f * t)
wavio.write("sine24.wav", sig, rate, sampwidth=3)
Run Code Online (Sandbox Code Playgroud)