欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python 實現音頻疊加的示例

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

如果你有兩條音頻合成為一條音頻(疊加,不是拼接)的需求,以下代碼可以直接使用,需要修改的地方我已經標出來了,有三處需要修改你的本地音頻的地址:輸入音頻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的數據
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的數據
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)
 
# 對不同長度的音頻用數據零對齊補位
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的數據
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
 
# 產生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") # 需要修改的地方:輸出音頻
 
# 配置聲道數、量化位數和取樣頻率
nchannels = 1 #單通道為例
sampwidth = 2
data_size = len(new_wave_data)
framerate = 16000 # 設置為44100就是1s,設置為8000就是10s,只有16000才是5s是對的。這里還沒搞懂!
nframes = data_size
comptype = "NONE"
compname = "not compressed"
f.setparams((nchannels, sampwidth, framerate, nframes, comptype, compname))
# 將wav_data轉換為二進制數據寫入文件
# f.writeframes(new_wave)
for v in new_wave_data:
    f.writeframes(struct.pack('h', int(v * 64000 / 2)))
f.close()
 
# 實現錄音,暫時用不到。
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("關閉錄音")

以上就是python 實現音頻疊加的示例的詳細內容,更多關于python 音頻疊加的資料請關注腳本之家其它相關文章!

相關文章

  • Python修改IP地址的常見方法總結

    Python修改IP地址的常見方法總結

    在網絡編程中,可能會遇到需要修改IP地址的情況,Python提供了一些功能強大的庫和模塊,可以幫助我們實現IP地址的修改操作,本文將介紹幾種常見的方法,以及如何使用它們來修改IP地址,需要的朋友可以參考下
    2023-12-12
  • Python元組常見操作示例

    Python元組常見操作示例

    這篇文章主要介紹了Python元組常見操作,結合實例形式分析了Python元組的概念、功能、常見定義、獲取、遍歷等相關操作技巧與注意事項,需要的朋友可以參考下
    2019-02-02
  • Django應用程序中如何發(fā)送電子郵件詳解

    Django應用程序中如何發(fā)送電子郵件詳解

    我們常常會用到一些發(fā)送郵件的功能,比如有人提交了應聘的表單,可以向HR的郵箱發(fā)郵件,這樣,HR不看網站就可以知道有人在網站上提交了應聘信息。下面這篇文章就介紹了在Django應用程序中如何發(fā)送電子郵件的相關資料,需要的朋友可以參考借鑒。
    2017-02-02
  • Python轉json時出現中文亂碼的問題及解決

    Python轉json時出現中文亂碼的問題及解決

    這篇文章主要介紹了Python轉json時出現中文亂碼的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • python刪掉重復行之drop_duplicates()用法示例

    python刪掉重復行之drop_duplicates()用法示例

    Pandas的drop_duplicates()方法用于從DataFrame中刪除重復的行,這篇文章主要給大家介紹了關于python刪掉重復行之drop_duplicates()用法的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-08-08
  • python中的opencv?圖像梯度

    python中的opencv?圖像梯度

    這篇文章主要介紹了python中的opencv?圖像梯度,圖像梯度計算的是圖像變化的速度,圖像梯度計算需要求導數,但是圖像梯度一般通過計算像素值的差來得到梯度的近似值,下文詳細介紹需要的小伙伴可以參考一下
    2022-06-06
  • Python tkinter模塊中類繼承的三種方式分析

    Python tkinter模塊中類繼承的三種方式分析

    這篇文章主要介紹了Python tkinter模塊中類繼承的三種方式,結合實例形式分析了三種繼承方式的實現方法與相關注意事項,需要的朋友可以參考下
    2017-08-08
  • python中字符串類型json操作的注意事項

    python中字符串類型json操作的注意事項

    這篇文章主要給大家介紹了python中字符串類型json操作的一些注意事項,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • Python?Textual文本用戶界面庫使用原理探索

    Python?Textual文本用戶界面庫使用原理探索

    這篇文章主要為大家介紹了Python?Textual文本用戶界面框架使用原理探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-02-02
  • python如何修改文件時間屬性

    python如何修改文件時間屬性

    這篇文章主要介紹了python修改文件時間屬性的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-02-02

最新評論