如何用Python编写立体声wav文件?

Jon*_*han 12 python wav wave

以下代码将频率为400Hz的简单正弦写入单声道WAV文件.如何更改此代码以生成立体声 WAV文件.第二个频道应该是不同的频率.

import math
import wave
import struct

freq = 440.0
data_size = 40000
fname = "WaveTest.wav"
frate = 11025.0  # framerate as a float
amp = 64000.0     # multiplier for amplitude

sine_list_x = []
for x in range(data_size):
    sine_list_x.append(math.sin(2*math.pi*freq*(x/frate)))

wav_file = wave.open(fname, "w")

nchannels = 1
sampwidth = 2
framerate = int(frate)
nframes = data_size
comptype = "NONE"
compname = "not compressed"

wav_file.setparams((nchannels, sampwidth, framerate, nframes,
    comptype, compname))

for s in sine_list_x:
    # write the audio frames to file
    wav_file.writeframes(struct.pack('h', int(s*amp/2)))

wav_file.close()
Run Code Online (Sandbox Code Playgroud)

Ale*_*lli 9

sine_list_y用另一个频率/通道建立一个并行列表,设置nchannels=2,并在输出循环中for s, t in zip(sine_list_x, sine_list_y):用作header子句,一个带有两个writeframes调用的主体- 一个用于s,一个用于t.IOW,两个通道的相应帧在文件中"交替".

有关所有可能的WAV文件格式的详细说明,请参阅页面,我引用:

多声道数字音频样本存储为隔行波数据,这意味着在前进到下一个样本之前,通过循环通过每个声道的音频样本来存储多声道(例如立体声和环绕声)波形文件的音频样本.时间.这样做是为了在可以读取整个文件之前播放或流式传输音频文件.从磁盘播放大文件(可能不完全适合内存)或通过Internet传输文件时,这很方便.下图中的值将按其在"值"列中列出的顺序(从上到下)存储在Wave文件中.

并且下表清楚地显示了通道的样本左,右,左,右......

  • 我个人看到他们去↑↑↓↓←→←→BA,但那可能只是我. (5认同)