Nao 是一个可爱活泼的机器人,可以在它身上进行很多有趣的开发,当 Nao 可以获取到环境的语音信息之后又可以做什么有趣的事情呢?

这个问题留给读者自己探索,下面我们介绍一下如何使得 Nao 通过录音的方式,获取到环境的语音信息。

在开发的时候,通过 Naoqi API 进行对 Nao 的服务控制,要求本地的开发环境安装有 python 2.7,python 版本的 naoqi-sdk。当然,开发环境视情况而定,也可以是 C++、Java

在本地上,主要是通过 Proxy 代理的模式,调用 ALAudioRecorder API 控制 Nao 的四个麦克风进行录音。

一、录音

1.1 只需要知道当前 NaoIP 地址,即可通过 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 录音相关推荐

  1. IP对讲服务器源码,IP对讲话机开发包含软硬件

    ◆常规主流IP话机所具备的所有功能.以下是需要增加的功能要求. ◆支持断网.离线.在线.工作状态等指示灯功能,支持POE供电,支持立式桌面安装或放置(60度角度). ◆适当大小显示屏,显示时间.来电号 ...

  2. pyaudio usb playback_利用python工具包pyaudio实现录音

    想训练一套自己的语音识别系统(命令词识别系统),首先得准备一套自己的语料库,发动身边的帅哥美女们帮忙进行录音.Python无所不能,很多工具包能给让我们的工作变的简单.优雅. 今天就给大家分享一下基于 ...

  3. NAO6机器人python环境完整搭建

    NAO6机器人Windows下python环境完整搭建 nao机器人随着机器人各种的比赛使用得越来越多,但是很多人对NAO机器人在Windows下的python环境搭建完全不知道如何下手.小编本人也是 ...

  4. python如何录音_python实现录音功能

    录音功能 python 实现录音 代码 # -*- coding:utf-8 -*- # /usr/bin/python ''' ----------------------------------- ...

  5. VB.NET实现DirectSound9 (7) 录音

    关键字: VB.NET DirectX 9 DirectSound 录音 riff文件格式 作者:董含君 下午看了微软提供的例子,居然把录音定位成Beginner级别 晕哦,虽说我认为这个例子是微软提 ...

  6. 百度语音识别+百度ERNIE-Gram+pyaudio麦克风录音(NLP自然语言处理)

    1.pyaudio安装及通过pyaudio实现录音 pip install pyaudio 在conda环境中安装没有报错 实现录音的代码如下: # -*- coding: utf-8 -*- fro ...

  7. Pepper/Nao中级教程:第一章 如何用Python远程控制机器人

    关于Naoqi之家 欢迎访问Naoqi之家,一个提供Pepper/Nao机器人中文开发手册的站点. http://www.naoqi.net 1. 目标 Python是最容易入门的语言,我们尝试写一个 ...

  8. Android录音并进行本地转码为MP3

    ** Android录音并进行本地转码 ** 通过安卓手机进行录音, 录音后,使用lame进行转码操作 开发中需要使用这个功能,只是一个简单的进行转码的工具,具体的代码信息如下 项目的基本结构图 1. ...

  9. python录音pyaudio_python调用pyaudio使用麦克风录制wav声音文件的教程

    python的pyaudio可以进行录音,播放,生成wav文件等等,WAVE是录音时用的标准的WINDOWS文件格式,文件的扩展名为WAV,数据本身的格式为PCM或压缩型,属于无损音乐格式的一种.在我 ...

最新文章

  1. idea git 使用
  2. ORACLE日期加减【转】
  3. 2017年本博客知识体系引导(更新至2017.8.11)
  4. python处理列表中字典_Python列表嵌套字典的时候,如果要删除列表中其中一个字典要如何操作...
  5. 优先队列c++ STL用法
  6. ENSP配置 实例一 不同VLAN间通信
  7. TypeScript:函数基础
  8. 【ASP.NET Web API教程】1 ASP.NET Web API入门
  9. 文华软件怎样测试交易系统的收益,交易系统的测试与评估报告
  10. php网站整合ck播放器,wordpress主题整合ckplayer播放器
  11. k近邻算法_k近邻算法
  12. c# 图像识别 车辆型号【百度AI】
  13. python图像风格迁移_快速图像风格迁移
  14. web platform installer php,Microsoft Web Platform Installer
  15. 用UCWEB浏览器上网 省流量小技巧
  16. RAML规范1.0(译文)
  17. 增加内容曝光、获得更多粉丝 - 「评论发红包」功能
  18. 【算力网络】算力网络的技术创新——绿色与安全关键技术
  19. Python3:基于Opencv4.2和wxPython4可视化界面的人脸考勤系统
  20. c语言中字符指针加加操作,C语言 指针操作练习

热门文章

  1. CustomTkinter:【一】介绍:python最新GUI框架:CustomTkinter -- 它提供了新的、现代的和完全可定制的小部件
  2. Random练习二 猜数字小游戏
  3. 阿里巴巴笔试题:数据分析与建模测试
  4. 打造爆款内容的7字真言
  5. android模仿qq登录界面,初识Android二之小试牛刀模仿实现qq登陆界面
  6. 开学季,乐高LEGO用AI,给这群特殊儿童做了件善事
  7. Python os 模块详解
  8. 2018年终总结,释放了积压两年的心情
  9. 目前流行前端几大UI框架排行榜
  10. Tomcat服务器部署war包