Python3+將2聲道音頻,分拆成1聲道
阿新 • • 發佈:2018-11-14
for sam 現在 相同 拆分後 一半 put code imp
現在是將雙聲道的音頻分拆成單聲道的。
同理可以將多聲道的音頻文件,轉為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‘))
主要為了之後對兩個音頻的抵消與疊加進行處理做準備。
拆分後的音頻,文件大小也只有原先的一半。
Python3+將2聲道音頻,分拆成1聲道