pyaudio:基于pyaudio利用Python编程从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存

简介: pyaudio:基于pyaudio利用Python编程从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存

输出结果

image.png


代码实现

# -*- coding: utf-8 -*-

#pyaudio:利用pyaudio从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存

import wave

from pyaudio import PyAudio,paInt16

import urllib  #urllib2

import pycurl

import urllib.request as urllib2

import json

framerate=8000   #采样率

NUM_SAMPLES=2000 #采样点

channels=1  #一个声道

sampwidth=2 #两个字节十六位

TIME=2      #条件变量,可以设置定义录音的时间

def save_wave_file(filename, data):   #save the date to the wav file

   wf = wave.open(filename, 'wb')  #二进制写入模式

   wf.setnchannels(channels)  

   wf.setsampwidth(sampwidth)  #两个字节16位

   wf.setframerate(framerate)  #帧速率

   wf.writeframes(b"".join(data))  #把数据加进去,就会存到硬盘上去wf.writeframes(b"".join(data))

   wf.close()

def my_record():

   pa=PyAudio()

   stream=pa.open(format=paInt16,channels=1,rate=framerate,input=True,frames_per_buffer=NUM_SAMPLES)

   my_buf=[]

   count=0  #

   while count < TIME*8: #循环2*20次

       string_audio_data=stream.read(NUM_SAMPLES) #每读完2000个采样加1

       my_buf.append(string_audio_data)

       count+=1

       print('当前正在录音(同时录制系统内部和麦克风的声音)……')

   save_wave_file('03.wav',my_buf) #文件保存

   stream.close()

 

def dump_res(buf):  #dump_res即dump_result,buf是curl从网上返回来的缓存

   print(buf)

 

   my_temp=json.loads(buf)

   my_list=my_temp['result']

   print(type(my_list))

   print(my_list[0])  #输出第一个

   print('dump_res函数调用成功!')

 

def get_token():  #获取token

   apikey='2KeNr6nK6ZmMKAbdlM5PUaSC'

   secretkey='QuDTqg1cMehfwvvyKmZyifAnCoGFiZ3g'

   auth_url='https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id='+apikey+'&client_secret='+secretkey;   #

 

   res=urllib2.urlopen(auth_url) #获取服务器响应,res=urllib2.urlopen(auth_url)

   json_data=res.read()         #读取到json_data中

   print(json_data,type(json_data))

   return json.loads(json_data)['access_token']

def use_cloud(token):  #token类似一种访问权限等

   fp=wave.open(u'16k.wav','rb')             #打开wav文件

   nf=fp.getnframes()                     #获得文件的采样点数量

   print('sampwidth',fp.getsampwidth())

   print('framerate',fp.getframerate())

   print('channels',fp.getnchannels())

   f_len=nf*2                    #获取文件长度,文件长度计算,每个采样点2个字节

   audio_data=fp.readframes(nf)  #

 

   cuid="XXXXXXXXXX"   #硬件地址,my phone xiaomi MAC

   print(token)

   srv_url='http://vop.baidu.com/server_api'+'?cuid='+cuid+'&token='+token

   http_header=[

       'Content-Type:audio/pcm;rate=8000',  #音频,原先是pcm,可以改为wav

       'Content-length:%d:' % f_len

   ]

 

   c=pycurl.Curl()  #实例化curl

   c.setopt(pycurl.URL,str(srv_url))     #(网址)  

 

   c.setopt(c.HTTPHEADER, http_header)   #网址头部  

   c.setopt(c.POST, 1)                   #1表示调用post方法而不是get  

   c.setopt(c.CONNECTTIMEOUT,80)      #超时中断  

   c.setopt(c.TIMEOUT,80)             #下载超时  

   c.setopt(c.WRITEFUNCTION,dump_res) #返回数据,dump_res,进行回调  

   c.setopt(c.POSTFIELDS,audio_data)    #数据  

   c.setopt(c.POSTFIELDSIZE,f_len)      #文件大小

   c.perform()                           #提交, pycurl.perform()

   print('use_cloud函数over!')

if __name__ == "__main__":

#     my_record()

   print('录音结束!')

   token = get_token()

   use_cloud(token)

   print('over!')


相关文章
|
7月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
1183 102
|
6月前
|
Python
Python编程:运算符详解
本文全面详解Python各类运算符,涵盖算术、比较、逻辑、赋值、位、身份、成员运算符及优先级规则,结合实例代码与运行结果,助你深入掌握Python运算符的使用方法与应用场景。
455 3
|
6月前
|
数据处理 Python
Python编程:类型转换与输入输出
本教程介绍Python中输入输出与类型转换的基础知识,涵盖input()和print()的使用,int()、float()等类型转换方法,并通过综合示例演示数据处理、错误处理及格式化输出,助你掌握核心编程技能。
676 3
|
6月前
|
并行计算 安全 计算机视觉
Python多进程编程:用multiprocessing突破GIL限制
Python中GIL限制多线程性能,尤其在CPU密集型任务中。`multiprocessing`模块通过创建独立进程,绕过GIL,实现真正的并行计算。它支持进程池、队列、管道、共享内存和同步机制,适用于科学计算、图像处理等场景。相比多线程,多进程更适合利用多核优势,虽有较高内存开销,但能显著提升性能。合理使用进程池与通信机制,可最大化效率。
472 3
|
6月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
682 0
|
6月前
|
弹性计算 运维 安全
阿里云轻量应用服务器与云服务器ECS啥区别?新手帮助教程
阿里云轻量应用服务器适合个人开发者搭建博客、测试环境等低流量场景,操作简单、成本低;ECS适用于企业级高负载业务,功能强大、灵活可扩展。二者在性能、网络、镜像及运维管理上差异显著,用户应根据实际需求选择。
552 10
|
6月前
|
运维 安全 Ubuntu
阿里云渠道商:服务器操作系统怎么选?
阿里云提供丰富操作系统镜像,涵盖Windows与主流Linux发行版。选型需综合技术兼容性、运维成本、安全稳定等因素。推荐Alibaba Cloud Linux、Ubuntu等用于Web与容器场景,Windows Server支撑.NET应用。建议优先选用LTS版本并进行测试验证,通过标准化镜像管理提升部署效率与一致性。
|
6月前
|
弹性计算 ice
阿里云4核8g服务器多少钱一年?1个月和1小时价格,省钱购买方法分享
阿里云4核8G服务器价格因实例类型而异,经济型e实例约159元/月,计算型c9i约371元/月,按小时计费最低0.45元。实际购买享折扣,1年最高可省至1578元,附主流ECS实例及CPU型号参考。
692 8
|
6月前
|
存储 监控 安全
阿里云渠道商:云服务器价格有什么变动?
阿里云带宽与存储费用呈基础资源降价、增值服务差异化趋势。企业应结合业务特点,通过阶梯计价、智能分层、弹性带宽等策略优化成本,借助云监控与预算预警机制,实现高效、可控的云资源管理。

推荐镜像

更多