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!')


相关文章
|
20天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
8天前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
101 80
|
7天前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
34 2
|
20天前
|
小程序 开发者 Python
探索Python编程:从基础到实战
本文将引导你走进Python编程的世界,从基础语法开始,逐步深入到实战项目。我们将一起探讨如何在编程中发挥创意,解决问题,并分享一些实用的技巧和心得。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考。让我们一起开启Python编程的探索之旅吧!
44 10
|
20天前
|
人工智能 数据挖掘 开发者
探索Python编程之美:从基础到进阶
本文是一篇深入浅出的Python编程指南,旨在帮助初学者理解Python编程的核心概念,并引导他们逐步掌握更高级的技术。文章不仅涵盖了Python的基础语法,还深入探讨了面向对象编程、函数式编程等高级主题。通过丰富的代码示例和实践项目,读者将能够巩固所学知识,提升编程技能。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考和启示。让我们一起踏上Python编程的美妙旅程吧!
|
2天前
|
人工智能 JSON Linux
利用阿里云GPU加速服务器实现pdf转换为markdown格式
随着AI模型的发展,GPU需求日益增长,尤其是个人学习和研究。直接购置硬件成本高且更新快,建议选择阿里云等提供的GPU加速型服务器。
利用阿里云GPU加速服务器实现pdf转换为markdown格式
|
1天前
|
开发框架 缓存 .NET
阿里云轻量应用服务器、经济型e、通用算力型u1实例怎么选?区别及选择参考
在阿里云目前的活动中,价格比较优惠的云服务器有轻量应用服务器2核2G3M带宽68元1年,经济型e实例2核2G3M带宽99元1年,通用算力型u1实例2核4G5M带宽199元1年,这几个云服务器是用户关注度最高的。有的新手用户由于是初次使用阿里云服务器,对于轻量应用服务器、经济型e、通用算力型u1实例的相关性能并不是很清楚,本文为大家做个简单的介绍和对比,以供参考。
|
9天前
|
弹性计算 运维 安全
阿里云轻量应用服务器与ECS的区别及选择指南
轻量应用服务器和云服务器ECS(Elastic Compute Service)是两款颇受欢迎的产品。本文将对这两者进行详细的对比,帮助用户更好地理解它们之间的区别,并根据自身需求做出明智的选择。
|
10天前
|
SQL 弹性计算 安全
阿里云上云优选与飞天加速计划活动区别及购买云服务器后续必做功课参考
对于很多用户来说,购买云服务器通常都是通过阿里云当下的各种活动来购买,这就有必要了解这些活动的区别,同时由于活动内的云服务器购买之后还需要单独购买并挂载数据盘,还需要设置远程密码以及安全组等操作之后才能正常使用云服务器。本文就为大家介绍一下目前比较热门的上云优选与飞天加速计划两个活动的区别,以及通过活动来购买云服务器之后的一些必做功课,确保云服务器可以正常使用,以供参考。
|
13天前
|
弹性计算 安全 开发工具
灵码评测-阿里云提供的ECS python3 sdk做安全组管理
批量变更阿里云ECS安全组策略(批量变更)