蜜桃av色欲a片精品一区,麻豆aⅴ精品无码一区二区,亚洲人成网站在线播放影院在线,亚洲 素人 字幕 在线 最新

微立頂科技

新聞資訊

創(chuàng)新 服務 價值

  基于python3下wav文件的批量分割

發(fā)布日期:2022/8/24 13:43:24      瀏覽量:

基于python3下wav文件的批量分割


import os
import wave
import contextlib
import numpy as np
import matplotlib.pyplot as plt

from scipy.io import wavfile
from pydub import AudioSegment

def wav_infos(wav_path):
    ’’’
    獲取音頻信息

    :param wav_path: 音頻路徑
    :return: [1, 2, 8000, 51158, ’NONE’, ’not compressed’]
    對應關(guān)系:聲道,采樣寬度,幀速率,幀數(shù),唯一標識,無損
    ’’’
    with wave.open(wav_path, "rb") as f:
        f = wave.open(wav_path)

        return list(f.getparams())

def read_wav(wav_path):
    ’’’
    讀取音頻文件內(nèi)容:只能讀取單聲道的音頻文件, 這個比較耗時

    :param wav_path: 音頻路徑
    :return:  音頻內(nèi)容
    ’’’
    with wave.open(wav_path, "rb") as f:
        # 讀取格式信息
        # 一次性返回所有的WAV文件的格式信息,它返回的是一個組元(tuple):聲道數(shù), 量化位數(shù)(byte單位), 采
        # 樣頻率, 采樣點數(shù), 壓縮類型, 壓縮類型的描述。wave模塊只支持非壓縮的數(shù)據(jù),因此可以忽略最后兩個信息
        params = f.getparams()
        nchannels, sampwidth, framerate, nframes = params[:4]

        # 讀取聲音數(shù)據(jù),傳遞一個參數(shù)指定需要讀取的長度(以取樣點為單位)
        str_data = f.readframes(nframes)

    return str_data

def get_wav_time(wav_path):
    ’’’
    獲取音頻文件是時長

    :param wav_path: 音頻路徑
    :return: 音頻時長 (單位秒)
    ’’’
    with contextlib.closing(wave.open(wav_path, ’r’)) as f:
        frames = f.getnframes()
    rate = f.getframerate()
    duration = frames / float(rate)
    return duration

def get_ms_part_wav(main_wav_path, start_time, end_time, part_wav_path):
    ’’’
    音頻切片,獲取部分音頻 單位是毫秒級別

    :param main_wav_path: 原音頻文件路徑
    :param start_time:  截取的開始時間
    :param end_time:  截取的結(jié)束時間
    :param part_wav_path:  截取后的音頻路徑
    :return:
    ’’’
    start_time = int(start_time)
    end_time = int(end_time)

    sound = AudioSegment.from_mp3(main_wav_path)
    word = sound[start_time:end_time]

    word.export(part_wav_path, format="wav")

def get_second_part_wav(main_wav_path, start_time, end_time, part_wav_path):
    ’’’
    音頻切片,獲取部分音頻 單位是秒級別

    :param main_wav_path: 原音頻文件路徑
    :param start_time:  截取的開始時間
    :param end_time:  截取的結(jié)束時間
    :param part_wav_path:  截取后的音頻路徑
    :return:
    ’’’
    start_time = int(start_time) * 1000
    end_time = int(end_time) * 1000

    sound = AudioSegment.from_mp3(main_wav_path)
    word = sound[start_time:end_time]

    word.export(part_wav_path, format="wav")

def get_minute_part_wav(main_wav_path, start_time, end_time, part_wav_path):
    ’’’
    音頻切片,獲取部分音頻 分鐘:秒數(shù)  時間樣式:"12:35"

    :param main_wav_path: 原音頻文件路徑
    :param start_time:  截取的開始時間
    :param end_time:  截取的結(jié)束時間
    :param part_wav_path:  截取后的音頻路徑
    :return:
    ’’’

    start_time = (int(start_time.split(’:’)[0])*60+int(start_time.split(’:’)[1]))*1000
    end_time = (int(end_time.split(’:’)[0])*60+int(end_time.split(’:’)[1]))*1000

    sound = AudioSegment.from_mp3(main_wav_path)
    word = sound[start_time:end_time]

    word.export(part_wav_path, format="wav")

def wav_to_pcm(wav_path, pcm_path):
    ’’’
    wav文件轉(zhuǎn)為pcm文件

    :param wav_path:wav文件路徑
    :param pcm_path:要存儲的pcm文件路徑
    :return: 返回結(jié)果
    ’’’
    f = open(wav_path, "rb")
    f.seek(0)
    f.read(44)

    data = np.fromfile(f, dtype=np.int16)
    data.tofile(pcm_path)

def pcm_to_wav(pcm_path, wav_path):
    ’’’
    pcm文件轉(zhuǎn)為wav文件

    :param pcm_path: pcm文件路徑
    :param wav_path: wav文件路徑
    :return:
    ’’’
    f = open(pcm_path,’rb’)
    str_data  = f.read()
    wave_out=wave.open(wav_path,’wb’)
    wave_out.setnchannels(1)
    wave_out.setsampwidth(2)
    wave_out.setframerate(8000)
    wave_out.writeframes(str_data)

# 音頻對應的波形圖
def wav_waveform(wave_path):
    ’’’
    音頻對應的波形圖
    :param wave_path:  音頻路徑
    :return:
    ’’’
    file = wave.open(wave_path)
    # print(’---------聲音信息------------’)
    # for item in enumerate(WAVE.getparams()):
    #     print(item)
    a = file.getparams().nframes  # 幀總數(shù)
    f = file.getparams().framerate  # 采樣頻率
    sample_time = 1 / f  # 采樣點的時間間隔
    time = a / f  # 聲音信號的長度
    sample_frequency, audio_sequence = wavfile.read(wave_path)
    # print(audio_sequence)  # 聲音信號每一幀的“大小”
    x_seq = np.arange(0, time, sample_time)

    plt.plot(x_seq, audio_sequence, ’blue’)
    plt.xlabel("time (s)")
    plt.show()

if __name__ == ’__main__’:

    path = r’C:/123/’  # 原音頻目錄
    path_segment = r’C:/234/’  # 切割后的音頻目錄

    print(’開始切割音頻!’)

    time_segment = 100  # 切割后短音頻的時長
   
    for root, dir, files in os.walk(path):
        for i in range(len(files)):
            audio = root + files[i]
            time_all = int(get_wav_time(audio) * 1000)  # 轉(zhuǎn)換成毫秒
            start_time = 0  # 從第0ms開始切割
            index = 1  # 切割后的序號名,從序號1開始命令
            while start_time <= time_all - time_segment:
                # print(str(i)+ ’: ’ + str(index))
                end_time = start_time + time_segment
                aduio_segment = path_segment + files[i][:-4] + ’_’ + str(index) + ’.wav’
                get_ms_part_wav(audio, start_time, end_time, aduio_segment)
                start_time += time_segment
                index += 1
            # 接下來這兩行是為了將最終能夠不足time_segment時長的音頻剪下來
            aduio_segment = path_segment + files[i][:-4] + ’_’ + str(index) + ’.wav’
            get_ms_part_wav(audio, start_time, time_all, aduio_segment)

    print(’音頻切割完成!’)



  業(yè)務實施流程

需求調(diào)研 →

團隊組建和動員 →

數(shù)據(jù)初始化 →

調(diào)試完善 →

解決方案和選型 →

硬件網(wǎng)絡部署 →

系統(tǒng)部署試運行 →

系統(tǒng)正式上線 →

合作協(xié)議

系統(tǒng)開發(fā)/整合

制作文檔和員工培訓

售后服務

馬上咨詢: 如果您有業(yè)務方面的問題或者需求,歡迎您咨詢!我們帶來的不僅僅是技術(shù),還有行業(yè)經(jīng)驗積累。
QQ: 39764417/308460098     Phone: 13 9800 1 9844 / 135 6887 9550     聯(lián)系人:石先生/雷先生