返回顶部
首页 > 资讯 > 后端开发 > Python >python使用pyaudio录音和格式转化方式
  • 284
分享到

python使用pyaudio录音和格式转化方式

python使用pyaudiopyaudio录音pyaudio格式转化 2023-05-19 08:05:52 284人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录使用pyaudio录音和格式转化环境代码(Record类)pyaudio播放声音不清晰问题总结使用pyaudio录音和格式转化 环境 pip3 install pyaudio p

使用pyaudio录音和格式转化

环境

pip3 install pyaudio
pip3 install wave
pip3 install numpy 
  • linux 21.04
  • python 3.7

代码(Record类)

#!/bin/python3
# 标识引用的python版本
import pyaudio
import wave
import sys
import os
import numpy as np
"""
首先集成一下录音功能和格式转换功能
"""
class Record():
    """
    录音的类
    CHUNK = 1024
    FORMAT = pyaudio.paint16  
    CHANNELS = 1  声道
    RATE = 16000  频率
    RECORD_SECONDS = 5  录音时间  单位=> s
    WAVE_OUTPUT_FILENAME = os.getcwd() + "/Python/output1.wav"   录音文件
    """
    def __init__(self,WAVE_OUTPUT_FILENAME,CHUNK=1024,
    FORMAT=pyaudio.paInt16,CHANNELS=1,RECORD_SECONDS=5,
    Input=True,RATE=16000,PCMName="out.pcm",DataType=np.int16):
        self.CHUNK = CHUNK
        self.FORMAT = FORMAT
        self.CHANNELS = CHANNELS
        self.RECORD_SECONDS = RECORD_SECONDS
        self.WAVE_OUTPUT_FILENAME = WAVE_OUTPUT_FILENAME
        self.Input = Input
        self.RATE = RATE
        self.PCMName = PCMName
        self.DataType = DataType
    def recording(self):
        """
        这句代码 会屏蔽一些不必要的报错
        os.close(sys.stderr.fileno())
        """
        #隐藏一些报错,这些不影响程序的运行
        os.close(sys.stderr.fileno())
        print("开始录音")
        p = pyaudio.PyAudio()
        stream = p.open(format=self.FORMAT,
                channels=self.CHANNELS,
                rate=self.RATE,
                input=self.Input,#默认为True
                frames_per_buffer=self.CHUNK)
        frames = []
        for i in range(0, int(self.RATE / self.CHUNK * self.RECORD_SECONDS)):
            data = stream.read(self.CHUNK)
            frames.append(data)
        print("done")
        # 关闭流
        stream.stop_stream()
        stream.close()
        p.terminate()
        wf = wave.open(self.WAVE_OUTPUT_FILENAME, 'wb')
        wf.setnchannels(self.CHANNELS)
        wf.setsampwidth(p.get_sample_size(self.FORMAT))
        wf.setframerate(self.RATE)
        wf.writeframes(b''.join(frames))
        wf.close()
    def wav2pcm(self):
        """
        音频文件wav格式 转 pcm格式
        """
        f = open(self.WAVE_OUTPUT_FILENAME, "rb")
        f.seek(0)
        f.read(1024)
        data = np.fromfile(f, dtype=self.DataType)
        # 获取 分割后的 数组
        filePath =  str(self.WAVE_OUTPUT_FILENAME).split('/')
        path = ''
        # 拼接路径 取出最后一位 [0,-1)
        for item in filePath[:-1]:
            path += item +'/'
        path += self.PCMName 
        # print("PCM Path =>",path)
        data.tofile(path)
        print("结束")
        # 可以返回一个元组; 也可以把它封成数组返回
        return (self.WAVE_OUTPUT_FILENAME,path)
    def run(self):
        self.recording()
        wavpath,path = self.wav2pcm()
        # print("wave =>",wavpath,"\n","path =>",path)
# 这个就不写入那个类里了, 这样方便调用 不需要再初始化类了
# 可直接copy到使用的类中或者文件里
def pcm2wav(pcmfile,wavfile,channels=1,rate=16000):
    with open(pcmfile,'rb') as fp:
        pcmdata = fp.read()
    with wave.open(wavfile, 'wb') as wav:
        wav.setnchannels(channels)
        wav.setsampwidth(16 // 8)
        wav.setframerate(rate)
            # 写入
        wav.writeframes(pcmdata)
# 测试
if __name__ == "__main__":
    wavepath = os.getcwd() + "/python/output1.wav"  
    dev = Record(wavepath)
    # dev.run()
    pcmfile = os.getcwd() + '/python/demo.pcm'
    wavfile = os.getcwd() + '/python/demo.wav'
    pcm2wav(pcmfile,wavfile) 

pyaudio播放声音不清晰问题

在树莓派上使用pyaudio播放pcm文件的时候,发现明显的不清晰,感觉有轻微的断断续续,而使用aplay播放则非常清晰

测试文件:https://sis-sample-audio.obs.cn-north-1.myhuaweicloud.com/16k16bit.pcm

>>> import pyaudio
>>> p = pyaudio.PyAudio()
>>> stream = p.open(format=pyaudio.paInt16, channels=1, output=True)
>>> with open("16k16bit.pcm", "rb") as f:
...     stream.write(f.read())
>>> aplay -f cd -c 1 -r 16000 16k16bit.pcm

最后发现是由于缓冲区的帧数过少导致播放不流畅,默认pyaudio缓冲区的帧数为1024。可以通过提高frames_per_buffer参数值来解决。

>>> import pyaudio
>>> p = pyaudio.PyAudio()
>>> stream = p.open(format=pyaudio.paInt16, channels=1, rate=16000, frames_per_buffer=4096, output=True)
>>> with open("16k16bit.pcm", "rb") as f:
...     stream.write(f.read())

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: python使用pyaudio录音和格式转化方式

本文链接: https://lsjlt.com/news/212730.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python使用pyaudio录音和格式转化方式
    目录使用pyaudio录音和格式转化环境代码(Record类)pyaudio播放声音不清晰问题总结使用pyaudio录音和格式转化 环境 pip3 install pyaudio p...
    99+
    2023-05-19
    python使用pyaudio pyaudio录音 pyaudio格式转化
  • python format格式化和数字格式化的方法
    这篇“python format格式化和数字格式化的方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python...
    99+
    2023-06-29
  • python字符串格式化(%格式符和format方式)
    目录%格式符format方式总结Python的字符串格式化有两种方式:%格式符方式,format方式 %格式符 %[(name)][flags][width].[precision]...
    99+
    2024-04-02
  • python format格式化和数字格式化
    目录1.format() 基本用法2.填充与对齐3.数字格式化1.format() 基本用法 python2.6 开始,新增了一种格式化字符串的函数str.format(),它增强了...
    99+
    2024-04-02
  • Python实现将mp3音频格式转换为wav格式
    最近收到一个朋友委托的需求,要将MP3的音频格式转换成wav的音频格式。于是,使用python写了这个小工具便于批量进行转换操作。 首先,下载需要导入的python模块包。这里选用...
    99+
    2024-04-02
  • Python使用PyAudio制作录音工具的实现代码
    目录应用平台音频录制部分音频播放部分GUI窗口所需属性值代码部分pynput监听键盘总结最近有在使用屏幕录制软件录制桌面,在用的过程中突发奇想,使用python能不能做屏幕录制工具,...
    99+
    2024-04-02
  • python字典和JSON格式的转换方式
    目录python字典和JSON格式的转换python字典和JSON格式的转换字典键的特性json 结构总结python字典和JSON格式的转换 首先引入 import json &g...
    99+
    2023-05-19
    python字典 python JSON格式 字典和JSON格式转换
  • python webp图片格式转化的方法
    本文实例为大家分享了python webp图片格式转化的具体代码,供大家参考,具体内容如下 将本地的webp图片转换为jpg 2、将下载的webp格式图片直接保存为jpg 代码如下: 将本地的webp图片转换为jpg...
    99+
    2022-06-02
    python webp图片格式转化 python图片格式转化 python webp格式转化
  • python格式化方法
    一、格式符 % %[(name)][floags][width].[precision]typecode(name) 可选,用于选择指定的keyflags 可选,可提供的值有: · + 右对齐,整数前加正号,负数前加负号 ...
    99+
    2023-01-30
    方法 python
  • Python字符串格式化方式
    目录什么是格式化?使用格式化的场景和目的格式化的三种方式根据类型定义的格式化 - %s关于整数的输出关于浮点数的输出关于字符串的输出字符串格式化函数 - format()format...
    99+
    2024-04-02
  • 怎么在Python中使用pydub模块转换音频格式
    这篇文章将为大家详细讲解有关怎么在Python中使用pydub模块转换音频格式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.需要下载的Python模块和ffmpeg多媒体处理工具需要的P...
    99+
    2023-06-15
  • Python使用pydub模块转换音频格式以及对音频进行剪辑
    前言 近端时间看了一个短视频,觉得视频的背景音乐片段很不错,想把这个背景音乐得到,虽然小编运用Python爬虫肯定能得到这首音乐,但是这个音乐片段肯定是得不到的,于是网上看一下相关官方文档,没想到python真的有模...
    99+
    2022-06-02
    python转换音频格式 python pydub 混音 python音频处理
  • Java前后端时间格式的转化方式
    JsonFormat、DateTimeFormat使用 从数据库获取时间传到前端进行展示的时候,我们有时候可能无法得到一个满意的时间格式的时间日期,在数据库中显示的是正确的时间格式,...
    99+
    2024-04-02
  • Python如何批量转换多种音乐格式
    这篇文章主要讲解了“Python如何批量转换多种音乐格式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python如何批量转换多种音乐格式”吧!1.安装安装Pydub前需要先安装ffmpeg...
    99+
    2023-07-02
  • Python的输出格式化和进制转换介绍
    目录复习输出格式化字符串如何进行格式化?进制转换思考题:总结Python输出格式化字符串如何进行格式化? 进制转换 复习 1.pycharm的使用 2.注释:单行、多行 3.变量:格...
    99+
    2024-04-02
  • Python中xml和json格式互转
    Python中xml和json格式是可以互转的,就像json格式转Python字典对象那样。 xml格式和json格式互转用到的xmltodict库 安装xmltodict库 C:\Users\Administrator>pip3...
    99+
    2023-01-31
    格式 Python xml
  • linux命令实现音频格式转换和拼接的方法
    安装FFmpeg flac eric@ray:~$ sudo apt install FFmpeg flac 安装lame faac eric@ray:~$ sudo apt install lame faac...
    99+
    2022-06-04
    linux 音频格式 转换 拼接
  • python格式化字符及转义字符
                     Python格式化字符串的替代符以及含义    符   号    说     明      %c 格式化字符及其ASCII码      %s 格式化字符串      %d 格式化整数      %u 格式化...
    99+
    2023-01-31
    字符 python
  • Python f-string字符串格式化的方式
    本篇内容主要讲解“Python f-string字符串格式化的方式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python f-string字符串格式化的方式”吧!1、python支持字符串格...
    99+
    2023-06-20
  • Python实战之多种音乐格式批量转换
    目录1.安装2.mp3转wav或其他格式3.更加通用的转换函数4.批量转化音频格式Pydub是一个基于ffmpeg的Python音频处理模块,封装了许多ffmpeg底层接口,因此用它...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作