python 数组转音频_Python3+将2声道音频,分拆成1声道
現(xiàn)在是將雙聲道的音頻分拆成單聲道的。
同理可以將多聲道的音頻文件,轉(zhuǎn)為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__))), '音頻文件/執(zhí)迷不悟.wav')
f = wave.open(file1, "rb")
params = f.getparams()
nchannels, sampwidth, framerate, nframes = params[:4]
print(nchannels, sampwidth, framerate, nframes) # 2 2 44100 11625348
# 讀取波形數(shù)據(jù)
str_data = f.readframes(nframes)
f.close()
# 將波形數(shù)據(jù)轉(zhuǎn)換為數(shù)組
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()
# 實(shí)現(xiàn)錄音
def record(re_frames, WAVE_OUTPUT_FILENAME):
"""
:param re_frames: 是二進(jìn)制的數(shù)據(jù)
:param WAVE_OUTPUT_FILENAME: 輸出的位置
:return:
"""
p = pyaudio.PyAudio()
CHANNELS = 1
FORMAT = pyaudio.paInt16
RATE = framerate # 這個(gè)要跟原音頻文件的比特率相同
print("開(kāi)始錄音")
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("關(guān)閉錄音")
record(w1, os.path.join(os.path.abspath(os.path.dirname(os.path.dirname(__file__))), '音頻文件/執(zhí)迷不悟1.wav'))
record(w1, os.path.join(os.path.abspath(os.path.dirname(os.path.dirname(__file__))), '音頻文件/執(zhí)迷不悟2.wav'))
主要為了之后對(duì)兩個(gè)音頻的抵消與疊加進(jìn)行處理做準(zhǔn)備。
拆分后的音頻,文件大小也只有原先的一半。
總結(jié)
以上是生活随笔為你收集整理的python 数组转音频_Python3+将2声道音频,分拆成1声道的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 虚拟机python建站_搭建本地虚拟服务
- 下一篇: python中plot和bar要求的格式