一、内容

  • Simpleaudio:支持numpy数组播放

  • sounddevice 和 soundfile:支持播放和录制包含音频信号的 NumPy 数组

  • pydub:必须预先安装至少一个来自(simpleaudio、pyaudio、ffplay 和 avplay)的音频播放包。可以查看音频信息(时长,分贝)

  • pyaudio 和 wave:录制和连续音频流

  • moviepy:视频音频剪辑处理

二、pyaudio录音和播放

  1. 播放

import pyaudio
import wavefilename = 'path-to_file.wav'# Set chunk size of 1024 samples per data frame
chunk = 1024 # Open the soaudio/sound file
af = wave.open(filename, 'rb')# Create an interface to PortAudio
pa = pyaudio.PyAudio()# Open a .Stream object to write the WAV file
# 'output = True' indicates that the
# sound will be played rather than
# recorded and opposite can be used for recording
stream = pa.open(format = pa.get_format_from_width(af.getsampwidth()),channels = af.getnchannels(),rate = af.getframerate(),output = True)# Read data in chunks
rd_data = af.readframes(chunk)# Play the sound by writing the audio
# data to the Stream using while loop
while rd_data != '':stream.write(rd_data)rd_data = af.readframes(chunk)# Close and terminate the stream
stream.stop_stream()
stream.close()
pa.terminate()

2. 录制

import pyaudio
import wave# Record in chunks of 1024 samples
chunk = 1024 # 16 bits per sample
sample_format = pyaudio.paInt16
chanels = 2# Record at 44400 samples per second
smpl_rt = 44400
seconds = 4
filename = "path_of_file.wav"# Create an interface to PortAudio
pa = pyaudio.PyAudio() stream = pa.open(format=sample_format, channels=chanels,rate=smpl_rt, input=True,frames_per_buffer=chunk)print('Recording...')# Initialize array that be used for storing frames
frames = [] # Store data in chunks for 8 seconds
for i in range(0, int(smpl_rt / chunk * seconds)):data = stream.read(chunk)frames.append(data)# Stop and close the stream
stream.stop_stream()
stream.close()# Terminate - PortAudio interface
pa.terminate()print('Done !!! ')# Save the recorded data in a .wav format
sf = wave.open(filename, 'wb')
sf.setnchannels(chanels)
sf.setsampwidth(pa.get_sample_size(sample_format))
sf.setframerate(smpl_rt)
sf.writeframes(b''.join(frames))
sf.close()

三、pydub调整音量

1、调整音量大小

读取文件

from pydub import AudioSegment
from pydub.playback import play  #播放audio = AudioSegment.from_mp3('./1.mp3')
#tape = AudioSegment.from_wav('path_to_myfile.wav')
#tape = AudioSegment.from_file('path_to_myfile.wav', format='wav')#放大6db音量
audio_big = audio + 6#减弱3db音量
audio_small = audio - 3
play(audio)

2 、音频切片与合并

获取录音的某个时间段,以毫秒为单位。

start = 10000
end   = 20000
#切片
audio_temp = audio[start:end]
#合并
audio_temp = audio_temp+ audio_temp
#查看时长
audio_temp.duration_seconds
#导出
audio_temp.export(".wav", format="wav")

四、sounddevice播放numpy

import soundfile as sf
import sounddevice as sdarray, smp_rt = sf.read(song, dtype = 'float32')
sd.play(array, smp_rt,)
status = sd.wait()
sd.stop()

五、python去除静音

去除语音中静音段,ffmpeg和librosa均有提供功能,但是其去除静音段有一定局限性,只能去掉文件两端的静音段,而对于文件中间存在的静音段则无法去除,在此基础上,去除语音文件中任意地方的静音段

  1. 求取语音的mfcc参数,并选取其含有能量信息的mfcc0作为端点检测的输入特征

  1. 对mfcc0特征进行中值滤波,平滑mfcc0参数

  1. 确定静音帧阈值,即认为超过多少帧的间隔,我们认为是静音段

  1. 去除筛选出的静音段

  1. 在原文件中剔除静音段,得到端点检测后的语音序列

import librosa
import soundfile as sf
import numpy as np
from scipy.signal import medfilt#忽略警告
import warnings
warnings.filterwarnings('ignore')
'''
将帧转换为时间刻度
'''
def frame2Time(frameNum, framelen, inc, fs):frames = np.array(range(0, frameNum, 1))frames = frames * inc + framelen / 2frameTime = frames / fsreturn frameTime
'''
去除静音的函数
'''
def slience(filename):frame_threshold=10#该参数决定去掉连续多少帧的静音段,比如某段语音检测到有12帧的静音帧,则去掉这一段的语音,而如果检测到只有8帧,那么不操作# 求取MFCCs参数y, sr = librosa.load(filename, sr=16000)mfccs = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=24,win_length=1024,hop_length=512,n_fft=1024)# # 对mfcc进行中值滤波Mfcc1 = medfilt(mfccs[0, :], 9)pic = Mfcc1start = 0end = 0points = []min_data = min(pic) * 0.9for i in range((pic.shape[0])):if (pic[i] < min_data and start == 0):start = iif (pic[i] < min_data and start != 0):end = ielif (pic[i] > min_data and start != 0):hh = [start, end]points.append(hh)start = 0# 解决 文件的最后为静音if (pic[-1] < min_data and start != 0):hh = [start, end]points.append(hh)start = 0distances = []for i in range(len(points)):two_ends = points[i]distance = two_ends[1] - two_ends[0]if (distance > frame_threshold):distances.append(points[i])# 保存到本地文件夹name = filename.split('\\')[-1]# 取出来端点,按照端点,进行切割,分情况讨论:1.如果未检测到静音段 2.检测到静音段if (len(distances) == 0):# print('检测到的静音段的个数为: %s 未对文件进行处理:' % len(distances))return y# sf.write(slience_clean, clean_data, 16000)else:slience_data = []for i in range(len(distances)):if (i == 0):start, end = distances[i]# 将左右端点转换到 采样点if (start == 1):internal_clean = y[0:0]else:# 求取开始帧的开头start = (start - 1) * 512# 求取结束帧的结尾end = (end - 1) * 512 + 1024internal_clean = y[0:start - 1]else:_, end = distances[i - 1]start, _ = distances[i]start = (start - 1) * 512end = (end - 1) * 512 + 1024internal_clean = y[end + 1:start]hhh = np.array(internal_clean)# 开始拼接slience_data.extend(internal_clean)# 开始 添加 最后一部分,需要分情况讨论,1. 文件末尾本来就是静音的  2.文件末尾不是静音的ll = len(distances)_, end = distances[ll - 1]end = (end - 1) * 512 + 1024end_part_clean = y[end:len(y)]slience_data.extend(end_part_clean)# 写到本地# sf.write("./data/{}.wav".format(name), slience_data, 16000)return slience_data

六、python实时静音检测

  • py-webRTCvad

七、python视频转音频

from moviepy.editor import *
videofile=VideoFileClip(x)#x文件名
audio=videofile.audio
audio.write_audiofile('x.mp3')#保存文件的名称

References

https://www.moonapi.com/news/2810.html

https://blog.csdn.net/weixin_38468077/article/details/121677376

Python音频处理,录制播放相关推荐

  1. Android native音频:录制播放的实现以及低延迟音频方案

    文章目录 1. 前言 2. 工程准备 3. 低延迟音频原理及功能实现方案 4. 使用OpenSL ES 4.1 播放器实现 4.2 录音器实现 4.3 Echo实现 5. 使用AAudio 5.1 播 ...

  2. python实现自动拨打电话_twilio python自动拨打电话,播放自定义mp3音频的方法

    有个小项目,需求是某事件发生时,给客户打电话,提醒客户.需要事先录制好一段音频,客户接通电话后,自动播放. 1. 注册twilio账号 2. 买一个电话号码 3. 安装twilio pip insta ...

  3. python实现语音播放_python通过wxPython打开一个音频文件并播放的方法

    本文实例讲述了python通过wxPython打开一个音频文件并播放的方法.分享给大家供大家参考.具体如下: 这段代码片段使用wx.lib.filebrowsebutton.FileBrowseBut ...

  4. iOS AudioQueue实现音频的录制和播放(附Demo)

    #基于AudioQueue实现音频的录制和播放 文章目录 背景 总览 Audio Queue 架构 AudioQueueBuffer数据结构 创建 AudioQueueBuffer 释放 AudioQ ...

  5. Android Studio App开发中使用录音机、MediaRecorder录制音频和MediaPlayer播放音频讲解及实战(附源码)

    运行有问题或需要源码请点赞关注收藏后评论区留言~~~ 一.使用录音机录制音频 手机有自带的系统相机,也有自带的系统录音机,只要在调用startActivityForResult之前指定该动作,就会自动 ...

  6. YDOOK:Python 通过系统直接播放音频音乐的各种方式 mp3 wav

    YDOOK:Python 通过系统直接播放音频音乐的各种方式 mp3 wav © YDOOK Jinwei Lin, shiye.work http://www.ydook.com https://o ...

  7. iOS 音频的录制、播放及音频文件管理

    文章目录 音频会话 音效播放 音乐播放 音频录制 音频管理 补充:音频队列服务 参考地址 音频会话 在使用Apple设备时,我们注意到有些应用打开音频播放时,其他音频就会终止,而有些应用却可以同时使用 ...

  8. 基于AudioQueue实现音频的录制和播放(标贝科技)

    标贝科技 https://ai.data-baker.com/#/?source=qwer12 填写邀请码fwwqgs,每日免费调用量还可以翻倍 基于AudioQueue实现音频的录制和播放 文章目录 ...

  9. Python 音频随机播放器脚本

    先上代码 import random import os music_dir = 'D:\\CloudMusic' songs = os.listdir(music_dir) print(songs) ...

  10. python的pyaudio教程入门_『开发技巧』Python音频操作工具PyAudio上手教程

    『开发技巧』Python音频操作工具PyAudio上手教程 ​ 0.引子 当需要使用Python处理音频数据时,使用python读取与播放声音必不可少,下面介绍一个好用的处理音频PyAudio工具包. ...

最新文章

  1. java随机输出10计算题
  2. 容器互联(linking)
  3. li 字多出了省略号_文字溢出自动显示省略号css方法 -
  4. mysql字符集问题_mysql字符集问题
  5. c++用一级运算比较大小_16.初中数学:怎么比较a、b、c、d的大小?幂的运算,基础常见考题...
  6. TCP UDP的区别
  7. EMF-edit功能解析
  8. 前年的斐波那契蹲在地上看着你,笑而不语
  9. 红外条码扫描器的另类使用C#版
  10. 信息安全收集注意事项
  11. 达梦数据库html管理,达梦数据库的管理 - osc_nbqoh20k的个人空间 - OSCHINA - 中文开源技术交流社区...
  12. 数仓建模—建模工具PdMan
  13. STM8系列芯使用STVP烧写程序设定读保护和如何解除读保护操作
  14. PHOTOSHOP 小技巧
  15. 优动漫PAINT的界面如何适配数位屏/平板?
  16. bmp图片批量改成jpg
  17. ctf piapiapia(反序列化逃逸)解题记录
  18. 服务器上pdf文档无法删除,怎么对PDF文件进行编辑,PDF怎么删除空白页
  19. db2取数据库日期时间_DB2日期和时间函数汇总
  20. 数据中台建设方案-基于大数据平台(下)

热门文章

  1. FinClip小程序+Rust(三):一个加密钱包
  2. Kaggle - Home Depot Product Search Relevance 基础篇
  3. Python表格数据处理方法
  4. DES和RSA混合加密解密
  5. 自学计算机基础知识本科,没有专业基础自学考试计算机本科会很吃力吗?
  6. Paper.js入门:项目和项目
  7. 法规标准-GB/T 39901标准解读(2021版)
  8. 华为HCIP RS题库221 561-570题
  9. IBM天工计划AIX培训活动感想
  10. 用一个易拉罐将家里的WiFi信号增强一倍