当前位置:   article > 正文

python 数组转音频_Python3+将2声道音频,分拆成1声道

数组转音频对象python

现在是将双声道的音频分拆成单声道的。

同理可以将多声道的音频文件,转为1声道的音频文件。

注意新形成的音频文件的rate,需要与原音频的相同。

import os

import wave

import numpy as np

import pyaudio

file1 = os.path.join(os.path.abspath(os.path.dirname(os.path.dirname(__file__))), '音频文件/执迷不悟.wav')

f = wave.open(file1, "rb")

params = f.getparams()

nchannels, sampwidth, framerate, nframes = params[:4]

print(nchannels, sampwidth, framerate, nframes) # 2 2 44100 11625348

# 读取波形数据

str_data = f.readframes(nframes)

f.close()

# 将波形数据转换为数组

wave_data = np.fromstring(str_data, dtype=np.int16)

wave_data.shape = -1, 2

wave_data = wave_data.T

wave_data_1 = wave_data[0] # 声道1

wave_data_2 = wave_data[1] # 声道2

w1 = wave_data_1.tostring()

w2 = wave_data_2.tostring()

# 实现录音

def record(re_frames, WAVE_OUTPUT_FILENAME):

"""

:param re_frames: 是二进制的数据

:param WAVE_OUTPUT_FILENAME: 输出的位置

:return:

"""

p = pyaudio.PyAudio()

CHANNELS = 1

FORMAT = pyaudio.paInt16

RATE = framerate # 这个要跟原音频文件的比特率相同

print("开始录音")

wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')

wf.setnchannels(CHANNELS)

wf.setsampwidth(p.get_sample_size(FORMAT))

wf.setframerate(RATE)

wf.writeframes(re_frames)

wf.close()

print("关闭录音")

record(w1, os.path.join(os.path.abspath(os.path.dirname(os.path.dirname(__file__))), '音频文件/执迷不悟1.wav'))

record(w1, os.path.join(os.path.abspath(os.path.dirname(os.path.dirname(__file__))), '音频文件/执迷不悟2.wav'))

主要为了之后对两个音频的抵消与叠加进行处理做准备。

拆分后的音频,文件大小也只有原先的一半。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/106391
推荐阅读
相关标签
  

闽ICP备14008679号