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. (C语言)一种简易记法:生成[a,b]范围内的随机整数
  2. thinkphp 使用外部php或html 原理
  3. BAT教程 第三节(FOR命令中的变量)
  4. java常见面试题总结
  5. java jmap jc_利用jmap命令查看JVM内存使用详情
  6. 【网页素材】数据图表界面设计UI设计PSD模板
  7. 【C++入门】C++ List类
  8. LeetCode刷题笔记-回溯法-分割回文串
  9. tuxedo 中间件命令
  10. between and 用法
  11. iOS 内购 payment.applicationUsername 的坑
  12. 网络安全攻防之IPC$攻击
  13. 玩 ChatGPT 的正确姿势「GitHub 热点速览 v.22.49」
  14. 神经网络常用术语(Updating)
  15. cherry Tree的严重漏洞
  16. 基于html+css+js的图书管理系统
  17. 网狐大联盟脚本还原数据库
  18. Octopus11.4并行版安装
  19. mysql 双主 脑裂_MySQL高可用方案——双主
  20. 汉字乱码状态下的编码转换将导致的问题

热门文章

  1. 利用非递归遍历统计二叉树的结点数
  2. 在官网下载各种JDK版本
  3. 简单利用Redis实现草稿箱功能
  4. python处理excel为饼状图_python操作Excel、openpyxl 之图表,折线图、饼图、柱状图等...
  5. bpcard bandainamcogames cn,bpcart鐪奸暅
  6. 记录使用surface遇到的bug及解决方案
  7. linux ls指令(ls命令)
  8. 作为一名程序员,需要不断丰富自己的知识库
  9. Java实现除去次方数
  10. JAVA PC端美颜相机