Nao6 - Nao Recode 录音
Nao 是一个可爱活泼的机器人,可以在它身上进行很多有趣的开发,当 Nao 可以获取到环境的语音信息之后又可以做什么有趣的事情呢?
这个问题留给读者自己探索,下面我们介绍一下如何使得 Nao 通过录音的方式,获取到环境的语音信息。
在开发的时候,通过 Naoqi API 进行对 Nao 的服务控制,要求本地的开发环境安装有 python 2.7,python 版本的 naoqi-sdk。当然,开发环境视情况而定,也可以是 C++、Java。
在本地上,主要是通过 Proxy 代理的模式,调用 ALAudioRecorder API
控制 Nao 的四个麦克风进行录音。
一、录音
1.1 只需要知道当前 Nao 的 IP 地址,即可通过 ALProxy 找到她的 API 接口。
from naoqi import ALProxyclass NaoRecode:def __init__(self, ip='192.168.124.2', port=9559):self.ip = ipself.port = portself.audio_recorder = Noneself.__connection_nao()def __connection_nao(self):try:self.audio_recorder = ALProxy('ALAudioRecorder', self.ip, self.port)except RuntimeError as e:print 'proxy-连接nao失败'else:print 'proxy-连接nao成功'if __name__ == '__main__':nao_recode = NaoRecode(ip='192.168.124.2')
2.1 连接成功后,便可以对 Nao 进行录音。因为 Nao 有四个麦克风,所以需要一个栈[0, 1]
状态来控制使用哪一个麦克风。避免文件累积过多,造成使用空间的浪费,创建临时文件来存放录音数据。
import time
import tempfileclass NaoRecode:def __init__(self, ip='192.168.124.2', port=9559):self.ip = ipself.port = portself.audio_recorder = Noneself.__connection_nao()# 录音:4声道,16000采样率def recode(self):x = list()x.append(1) # Left 左麦克风x.append(1) # Right 右麦克风x.append(1) # Front 前麦克风x.append(1) # Rear 后麦克风y = tuple(x)tf = tempfile.NamedTemporaryFile() # 创建临时存储文件fp = tf.nameprint '开始录音'try:self.audio_recorder.stopMicrophonesRecording()self.audio_recorder.startMicrophonesRecording(fp, "wav", 16000, y)time.sleep(5) # 录音 5 秒self.audio_recorder.stopMicrophonesRecording()except RuntimeError as e:print '录音失败'tf.close() # 关闭临时文件-->清除临时文件else:print '录音成功'print 'Nao 上录音文件路径' + fptf.close() # 关闭临时文件-->清除临时文件return fp # 返回录音文件的地址if __name__ == '__main__':nao_recode = NaoRecode(ip='192.168.124.2')file_path_local = nao_recode.recode()
这样就已经完成了 Nao 录音的工作,但是录音文件是存放在 Nao 身上的,在本地开发的需要,所以我们还需要把录音文件通过 ftp 协议下载到本地。
二、下载录音文件
2.1 使用 ftp 协议得先知道服务器的 IP 地址,登录用户的账号、密码,需要下载的文件路径地址,以及本地存放的路径地址。
import paramiko
import osclass DownloadFile:def __init__(self, hostname=None, port=22, username=None, password=None):self.hostname = hostnameself.port = portself.username = usernameself.password = passwordself.client = Noneself.__connection_with_ftp()def __connection_with_ftp(self):client = paramiko.Transport(self.hostname, self.port)try:client.connect(username=self.username, password=self.password) # 连接服务器except:print 'ftp-连接nao失败'else:print 'ftp-连接nao成功'self.client = clientdef download_file(self, file_remote, file_local):file_remote = file_remotefile_local = file_localtry:sftp = paramiko.SFTPClient.from_transport(self.client)sftp.get(remotepath=file_remote, localpath=file_local)except:print '文件 ' + file_remote + ' 下载失败'os.remove(file_local)else:print '文件 ' + file_remote + ' 下载成功'if __name__ == '__main__':file_dir = '/home/yld/test.txt'file_loc = '../audio_file/test.txt'download_audio = DownloadFile(hostname='192.168.124.2', username='nao', password='nao')download_audio.download_file(file_remote=file_dir, file_local=file_loc)
2.2 这时候只需要调用 DownloadFile.download()
方法即可吧 Nao 上的录音文件下载到本地。
from download_file import DownloadFile
import timeclass NaoRecode:def __init__(self, ip='192.168.124.2', port=9559):self.ip = ipself.port = portself.audio_recorder = Noneself.__connection_nao()# 录音:4声道,16000采样率def recode(self):x = list()x.append(1) # Left 左麦克风x.append(1) # Right 右麦克风x.append(1) # Front 前麦克风x.append(1) # Rear 后麦克风y = tuple(x)tf = tempfile.NamedTemporaryFile() # 创建临时存储文件fp = tf.nameprint '开始录音'try:self.audio_recorder.stopMicrophonesRecording()self.audio_recorder.startMicrophonesRecording(fp, "wav", 16000, y)time.sleep(5) # 录音 5 秒self.audio_recorder.stopMicrophonesRecording()except RuntimeError as e:print '录音失败'tf.close() # 关闭临时文件-->清除临时文件else:print '录音成功'print 'Nao 上录音文件路径' + fpreal_time = time.time() # 获取当前系统时间-->毫秒级file_name = 'recode-' + str(real_time) + '.wav'fp = self.__download_audio_file(file_remote=fp, file_name=file_name)tf.close() # 关闭临时文件-->清除临时文件return fp # 返回录音文件的地址# 把录音文件下载到本地def __download_audio_file(self, file_remote, file_name):file_remote = file_remotefile_local = './audio_file/' + file_nametry:download_audio = DownloadFile(hostname=self.ip, port=22, username='nao', password='nao')download_audio.download_file(file_remote=file_remote, file_local=file_local)except:print '录音文件下载失败 ' + file_remotereturn file_localif __name__ == '__main__':nao_recode = NaoRecode(ip='192.168.124.2')file_path_local = nao_recode.recode()print '本地路径' + file_path_local
三、完整代码
3.1 nao_recode.py
from naoqi import ALProxy
from download_file import DownloadFile
import time
import tempfileclass NaoRecode:def __init__(self, ip='192.168.124.2', port=9559):self.ip = ipself.port = portself.audio_recorder = Noneself.__connection_nao()def __connection_nao(self):try:self.audio_recorder = ALProxy('ALAudioRecorder', self.ip, self.port)except RuntimeError as e:print 'proxy-连接nao失败'else:print 'proxy-连接nao成功'# 录音:4声道,16000采样率def recode(self):x = list()x.append(1) # Left 左麦克风x.append(1) # Right 右麦克风x.append(1) # Front 前麦克风x.append(1) # Rear 后麦克风y = tuple(x)tf = tempfile.NamedTemporaryFile() # 创建临时存储文件fp = tf.nameprint '开始录音'try:self.audio_recorder.stopMicrophonesRecording()self.audio_recorder.startMicrophonesRecording(fp, "wav", 16000, y)time.sleep(5) # 录音 5 秒self.audio_recorder.stopMicrophonesRecording()except RuntimeError as e:print '录音失败'tf.close() # 关闭临时文件-->清除临时文件else:print '录音成功'print 'Nao 上录音文件路径' + fpreal_time = time.time() # 获取当前系统时间-->毫秒级file_name = 'recode-' + str(real_time) + '.wav'fp = self.__download_audio_file(file_remote=fp, file_name=file_name)tf.close() # 关闭临时文件-->清除临时文件return fp # 返回录音文件的地址# 把录音文件下载到本地def __download_audio_file(self, file_remote, file_name):file_remote = file_remotefile_local = './audio_file/' + file_nametry:download_audio = DownloadFile(hostname=self.ip, port=22, username='nao', password='nao')download_audio.download_file(file_remote=file_remote, file_local=file_local)except:print '录音文件下载失败 ' + file_remotereturn file_localif __name__ == '__main__':nao_recode = NaoRecode(ip='192.168.124.2')file_path_local = nao_recode.recode()print '本地路径' + file_path_local
3.2 download_file.py
import paramiko
import osclass DownloadFile:def __init__(self, hostname=None, port=22, username=None, password=None):self.hostname = hostnameself.port = portself.username = usernameself.password = passwordself.client = Noneself.__connection_with_ftp()def __connection_with_ftp(self):client = paramiko.Transport(self.hostname, self.port)try:client.connect(username=self.username, password=self.password) # 连接服务器except:print 'ftp-连接nao失败'else:print 'ftp-连接nao成功'self.client = clientdef download_file(self, file_remote, file_local):file_remote = file_remotefile_local = file_localtry:sftp = paramiko.SFTPClient.from_transport(self.client)sftp.get(remotepath=file_remote, localpath=file_local)except:print '文件 ' + file_remote + ' 下载失败'os.remove(file_local)else:print '文件 ' + file_remote + ' 下载成功'if __name__ == '__main__':file_dir = '/home/yld/test.txt'file_loc = '../audio_file/test.txt'download_audio = DownloadFile(hostname='192.168.121.2', username='nao', password='nao')download_audio.download_file(file_remote=file_dir, file_local=file_loc)
Nao6 - Nao Recode 录音相关推荐
- IP对讲服务器源码,IP对讲话机开发包含软硬件
◆常规主流IP话机所具备的所有功能.以下是需要增加的功能要求. ◆支持断网.离线.在线.工作状态等指示灯功能,支持POE供电,支持立式桌面安装或放置(60度角度). ◆适当大小显示屏,显示时间.来电号 ...
- pyaudio usb playback_利用python工具包pyaudio实现录音
想训练一套自己的语音识别系统(命令词识别系统),首先得准备一套自己的语料库,发动身边的帅哥美女们帮忙进行录音.Python无所不能,很多工具包能给让我们的工作变的简单.优雅. 今天就给大家分享一下基于 ...
- NAO6机器人python环境完整搭建
NAO6机器人Windows下python环境完整搭建 nao机器人随着机器人各种的比赛使用得越来越多,但是很多人对NAO机器人在Windows下的python环境搭建完全不知道如何下手.小编本人也是 ...
- python如何录音_python实现录音功能
录音功能 python 实现录音 代码 # -*- coding:utf-8 -*- # /usr/bin/python ''' ----------------------------------- ...
- VB.NET实现DirectSound9 (7) 录音
关键字: VB.NET DirectX 9 DirectSound 录音 riff文件格式 作者:董含君 下午看了微软提供的例子,居然把录音定位成Beginner级别 晕哦,虽说我认为这个例子是微软提 ...
- 百度语音识别+百度ERNIE-Gram+pyaudio麦克风录音(NLP自然语言处理)
1.pyaudio安装及通过pyaudio实现录音 pip install pyaudio 在conda环境中安装没有报错 实现录音的代码如下: # -*- coding: utf-8 -*- fro ...
- Pepper/Nao中级教程:第一章 如何用Python远程控制机器人
关于Naoqi之家 欢迎访问Naoqi之家,一个提供Pepper/Nao机器人中文开发手册的站点. http://www.naoqi.net 1. 目标 Python是最容易入门的语言,我们尝试写一个 ...
- Android录音并进行本地转码为MP3
** Android录音并进行本地转码 ** 通过安卓手机进行录音, 录音后,使用lame进行转码操作 开发中需要使用这个功能,只是一个简单的进行转码的工具,具体的代码信息如下 项目的基本结构图 1. ...
- python录音pyaudio_python调用pyaudio使用麦克风录制wav声音文件的教程
python的pyaudio可以进行录音,播放,生成wav文件等等,WAVE是录音时用的标准的WINDOWS文件格式,文件的扩展名为WAV,数据本身的格式为PCM或压缩型,属于无损音乐格式的一种.在我 ...
最新文章
- (C语言)一种简易记法:生成[a,b]范围内的随机整数
- thinkphp 使用外部php或html 原理
- BAT教程 第三节(FOR命令中的变量)
- java常见面试题总结
- java jmap jc_利用jmap命令查看JVM内存使用详情
- 【网页素材】数据图表界面设计UI设计PSD模板
- 【C++入门】C++ List类
- LeetCode刷题笔记-回溯法-分割回文串
- tuxedo 中间件命令
- between and 用法
- iOS 内购 payment.applicationUsername 的坑
- 网络安全攻防之IPC$攻击
- 玩 ChatGPT 的正确姿势「GitHub 热点速览 v.22.49」
- 神经网络常用术语(Updating)
- cherry Tree的严重漏洞
- 基于html+css+js的图书管理系统
- 网狐大联盟脚本还原数据库
- Octopus11.4并行版安装
- mysql 双主 脑裂_MySQL高可用方案——双主
- 汉字乱码状态下的编码转换将导致的问题