最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python 實(shí)現(xiàn)音頻疊加的示例

 更新時(shí)間:2020年10月29日 09:28:54   作者:Amy魚  
這篇文章主要介紹了python 實(shí)現(xiàn)音頻疊加的示例,幫助大家更好的理解和使用python處理聲音文件,感興趣的朋友可以了解下

如果你有兩條音頻合成為一條音頻(疊加,不是拼接)的需求,以下代碼可以直接使用,需要修改的地方我已經(jīng)標(biāo)出來了,有三處需要修改你的本地音頻的地址:輸入音頻1,輸入音頻2,輸出音頻3。

python3.8:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os
import wave
import numpy as np
import pyaudio
import librosa
import soundfile as sf
import scipy.signal as signal
import struct
# ok,音頻疊加!我這里4.wav和5.wav都是5s的音頻,還沒有測(cè)試時(shí)長不同的音頻!
# 參考文檔:https://www.cnblogs.com/xingshansi/p/6799994.html
x,_ = librosa.load('D:/4.wav', sr=16000) #需要修改的地方:音頻1
sf.write('t1.wav',x,16000)
y,_ = librosa.load('D:/5.wav', sr=16000) #需要修改的地方:音頻2
sf.write('t2.wav',y,16000)
f1 = wave.open('t1.wav', 'rb')
f2 = wave.open('t2.wav', 'rb')
 
# 音頻1的數(shù)據(jù)
params1 = f1.getparams()
nchannels1, sampwidth1, framerate1, nframes1, comptype1, compname1 = params1[:6]
print(nchannels1, sampwidth1, framerate1, nframes1, comptype1, compname1)
f1_str_data = f1.readframes(nframes1)
f1.close()
f1_wave_data = np.frombuffer(f1_str_data, dtype=np.int16)
 
# 音頻2的數(shù)據(jù)
params2 = f2.getparams()
nchannels2, sampwidth2, framerate2, nframes2, comptype2, compname2 = params2[:6]
print(nchannels2, sampwidth2, framerate2, nframes2, comptype2, compname2)
f2_str_data = f2.readframes(nframes2)
f2.close()
f2_wave_data = np.frombuffer(f2_str_data, dtype=np.int16)
 
# 對(duì)不同長度的音頻用數(shù)據(jù)零對(duì)齊補(bǔ)位
if nframes1 < nframes2:
    length = abs(nframes2 - nframes1)
    temp_array = np.zeros(length, dtype=np.int16)
    rf1_wave_data = np.concatenate((f1_wave_data, temp_array))
    rf2_wave_data = f2_wave_data
elif nframes1 > nframes2:
    length = abs(nframes2 - nframes1)
    temp_array = np.zeros(length, dtype=np.int16)
    rf2_wave_data = np.concatenate((f2_wave_data, temp_array))
    rf1_wave_data = f1_wave_data
else:
    rf1_wave_data = f1_wave_data
    rf2_wave_data = f2_wave_data
 
# ================================
# 合并1和2的數(shù)據(jù)
new_wave_data = rf1_wave_data + rf2_wave_data
new_wave_data = new_wave_data*1.0/(max(abs(new_wave_data)))#wave幅值歸一化
new_wave = new_wave_data.tostring()
 
p = pyaudio.PyAudio()
CHANNELS = 1
FORMAT = pyaudio.paInt16
 
# 寫文件
framerate = 44100
time = 10
 
# 產(chǎn)生10秒44.1kHz的100Hz - 1kHz的頻率掃描波。沒用!
t = np.arange(0, time, 1.0/framerate)
wave_data = signal.chirp(t, 100, time, 1000, method='linear') * 10000
wave_data = wave_data.astype(np.short)
 
# 打開WAV文檔
f = wave.open(r"D:\6.wav", "wb") # 需要修改的地方:輸出音頻
 
# 配置聲道數(shù)、量化位數(shù)和取樣頻率
nchannels = 1 #單通道為例
sampwidth = 2
data_size = len(new_wave_data)
framerate = 16000 # 設(shè)置為44100就是1s,設(shè)置為8000就是10s,只有16000才是5s是對(duì)的。這里還沒搞懂!
nframes = data_size
comptype = "NONE"
compname = "not compressed"
f.setparams((nchannels, sampwidth, framerate, nframes, comptype, compname))
# 將wav_data轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)寫入文件
# f.writeframes(new_wave)
for v in new_wave_data:
    f.writeframes(struct.pack('h', int(v * 64000 / 2)))
f.close()
 
# 實(shí)現(xiàn)錄音,暫時(shí)用不到。
def record(re_frames, WAVE_OUTPUT_FILENAME):
    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("關(guān)閉錄音")

以上就是python 實(shí)現(xiàn)音頻疊加的示例的詳細(xì)內(nèi)容,更多關(guān)于python 音頻疊加的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python中pycryptodome模塊實(shí)現(xiàn)加密算法庫

    python中pycryptodome模塊實(shí)現(xiàn)加密算法庫

    PyCryptodome提供了許多密碼學(xué)算法和協(xié)議的實(shí)現(xiàn),包括對(duì)稱加密、非對(duì)稱加密、消息摘要、密碼哈希、數(shù)字簽名等,本文主要介紹了python中pycryptodome模塊實(shí)現(xiàn)加密算法庫,感興趣的可以了解一下
    2023-11-11
  • Python演化計(jì)算基準(zhǔn)函數(shù)詳解

    Python演化計(jì)算基準(zhǔn)函數(shù)詳解

    這篇文章主要介紹了Python演化計(jì)算基準(zhǔn)函數(shù),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧,希望能夠給你帶來幫助
    2021-10-10
  • Python關(guān)鍵字yield的用法詳解

    Python關(guān)鍵字yield的用法詳解

    在Python編程中,有一個(gè)強(qiáng)大而神秘的關(guān)鍵字,那就是yield,初學(xué)者常常被它搞得暈頭轉(zhuǎn)向,而高級(jí)開發(fā)者則借助它實(shí)現(xiàn)高效的代碼,到底yield是什么?它又是如何在Python代碼中發(fā)揮作用的呢?讓我們一起來揭開它的面紗
    2024-07-07
  • Python多線程原理與用法實(shí)例剖析

    Python多線程原理與用法實(shí)例剖析

    這篇文章主要介紹了Python多線程原理與用法,結(jié)合具體的爬蟲實(shí)例剖析了多線程的相關(guān)概念、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-01-01
  • 利用Python制作PPT的完整步驟

    利用Python制作PPT的完整步驟

    這篇文章主要給大家介紹了關(guān)于如何利用Python制作PPT的相關(guān)資料,主要利用的是python-pptx庫,我們可以通過寫腳本,來定時(shí)執(zhí)行更新ppt內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Python os.mkdir()與os.makedirs()的使用區(qū)別

    Python os.mkdir()與os.makedirs()的使用區(qū)別

    這篇文章主要介紹了Python os.mkdir()與os.makedirs()的使用區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • python 實(shí)現(xiàn)以相同規(guī)律打亂多組數(shù)據(jù)

    python 實(shí)現(xiàn)以相同規(guī)律打亂多組數(shù)據(jù)

    這篇文章主要介紹了python 實(shí)現(xiàn)以相同規(guī)律打亂多組數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • python 帶時(shí)區(qū)的日期格式化操作

    python 帶時(shí)區(qū)的日期格式化操作

    這篇文章主要介紹了python 帶時(shí)區(qū)的日期格式化操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 使用 Python 處理3萬多條數(shù)據(jù)只要幾秒鐘

    使用 Python 處理3萬多條數(shù)據(jù)只要幾秒鐘

    在工作中經(jīng)常遇到大量的數(shù)據(jù)需要整合、去重、按照特定格式導(dǎo)出等情況。這篇文章主要介紹了使用 Python 處理3萬多條數(shù)據(jù)只要幾秒鐘的相關(guān)知識(shí),需要的朋友可以參考下
    2020-01-01
  • Python?matplotlib設(shè)置多子圖、子圖間距及外邊距的幾種方式

    Python?matplotlib設(shè)置多子圖、子圖間距及外邊距的幾種方式

    子圖是Matplotlib中強(qiáng)大的功能之一,使用函數(shù)您可以方便地創(chuàng)建多個(gè)子圖,并使用Axes對(duì)象繪制各種圖形,下面這篇文章主要給大家介紹了關(guān)于Python?matplotlib設(shè)置多子圖、子圖間距及外邊距的幾種方式,需要的朋友可以參考下
    2024-02-02

最新評(píng)論

彩票| 麻栗坡县| 孟州市| 鹤岗市| 乐平市| 望谟县| 安徽省| 谢通门县| 赤壁市| 防城港市| 锦州市| 黄平县| 新绛县| 天祝| 师宗县| 城市| 馆陶县| 泰兴市| 霍邱县| 金寨县| 长子县| 石棉县| 武威市| 宝山区| 吴桥县| 昌宁县| 辉南县| 宜宾县| 安图县| 丹寨县| 南投县| 包头市| 开封市| 老河口市| 孟村| 鄄城县| 启东市| 东港市| 扬中市| 和平区| 康乐县|