我正在使用 pydub 读取多通道音频,并且正在执行一些操作来更改音频的响度。现在我想把这个多通道音频写成 .wav 文件?
我不知道该怎么做。 pydub 不支持此操作。
有人可以帮我吗?
亲切的问候 丹尼斯
您可以从多个单声道音频片段制作多通道音频片段:
from pydub import AudioSegment
# load individual channels...
mutli_channel = AudioSegment.from_mono_audiosegments(channel1, channel2, ..., channel_n)
更多信息请参见 pydub 文档
我建议使用soundfile的write功能。 它需要一个形状为 (N, C) 的 numpy 矩阵,其中 N 是样本中的音频持续时间,C 是通道数。
pip install soundfile
import soundfile
import numpy as np
sampling_rate = 16000
duration_in_seconds = 1
num_channels = 2
# Create a white noise signal of two channels
audio_signal = np.random.randn(
sampling_rate*duration_in_seconds,
num_channels
)
soundfile.write("output.wav", audio_signal, sampling_rate)
如果你有超过 2 个通道,你可以使用 cutcutcodec 轻松完成。 这里有一个示例。
from cutcutcodec.core.generation.audio.equation import GeneratorAudioEquation
from cutcutcodec.core.filter.audio.subclip import FilterAudioSubclip
from cutcutcodec.core.io import write
stream_3_1 = GeneratorAudioEquation(
"sin(2*pi*440*t)", # fl
"cos(2*pi*440*t)", # fr
"sin(2*pi*523*t)", # fc
"sin(2.pi*27.5*t)", # lfe
layout="3.1",
).out_streams[0]
stream_3_1 = FilterAudioSubclip([stream_3_1], 0, 10).out_streams[0] # select the 10 first seconds
write([stream_3_1], "multi_channels.wav", [{"encodec": "pcm_s16le", "rate": 44100}])