我想使用Python 2.7从-1到1之间的浮点值数组生成一个24位WAV格式的音频文件.我不能使用scipy.io.wavfile.write,因为它只支持16或32位.Python自己的wave模块的文档没有指定它采用的数据格式.
那么在Python中可以这样做吗?
两年前我已经提交了这个问题的答案,我在那里推荐了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 库来读取/写入声音文件。
另一个选项可以在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)
| 归档时间: |
|
| 查看次数: |
7188 次 |
| 最近记录: |