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

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

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

如果你有兩條音頻合成為一條音頻(疊加,不是拼接)的需求,以下代碼可以直接使用,需要修改的地方我已經(jīng)標出來了,有三處需要修改你的本地音頻的地址:輸入音頻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的音頻,還沒有測試時長不同的音頻!
# 參考文檔: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)
 
# 對不同長度的音頻用數(shù)據(jù)零對齊補位
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是對的。這里還沒搞懂!
nframes = data_size
comptype = "NONE"
compname = "not compressed"
f.setparams((nchannels, sampwidth, framerate, nframes, comptype, compname))
# 將wav_data轉(zhuǎn)換為二進制數(shù)據(jù)寫入文件
# f.writeframes(new_wave)
for v in new_wave_data:
    f.writeframes(struct.pack('h', int(v * 64000 / 2)))
f.close()
 
# 實現(xiàn)錄音,暫時用不到。
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 實現(xiàn)音頻疊加的示例的詳細內(nèi)容,更多關(guān)于python 音頻疊加的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

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

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

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

    Python演化計算基準函數(shù)詳解

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

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

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

    Python多線程原理與用法實例剖析

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

    利用Python制作PPT的完整步驟

    這篇文章主要給大家介紹了關(guān)于如何利用Python制作PPT的相關(guān)資料,主要利用的是python-pptx庫,我們可以通過寫腳本,來定時執(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ū)別,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • python 實現(xiàn)以相同規(guī)律打亂多組數(shù)據(jù)

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

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

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

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

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

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

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

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

最新評論

平度市| 新安县| 龙泉市| 门源| 泰州市| 莲花县| 同江市| 深圳市| 宜阳县| 顺昌县| 仙游县| 扎兰屯市| 获嘉县| 太谷县| 喀喇| 华坪县| 焦作市| 高安市| 河北省| 天柱县| 镇赉县| 大宁县| 沐川县| 新干县| 策勒县| 吉安县| 泌阳县| 黄大仙区| 沙洋县| 巴彦县| 吴忠市| 四会市| 嵊州市| 吴桥县| 民县| 静乐县| 罗山县| 旬邑县| 梁山县| 砚山县| 灵寿县|