2015-05-25 15:51:54 yuan6238816 阅读数 1218
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5927 人正在学习 去看看 杨波

ALSA语音库移植到OK6410

环境简介:

系   统   ubuntu12.04.1 LTS
单   板:OK6410-A  linux-3.0.1
编译器:gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72) 
时   间: 2015/5/21

一、ALSA语音库简介

   出于对安全性方面的考虑,Linux下的应用程序无法直接对声卡这类硬件设备进行操作,而是必须通过内核提供的驱动程序才能完成。在Linux上进行音频编程的本质就是要借助于驱动程序,来完成对声卡的各种操作。

   对硬件的控制涉及到寄存器中各个比特位的操作,通常这是与设备直接相关并且对时序的要求非常严格,如果这些工作都交由应用程序员来负责,那么对声卡的编程将 变得异常复杂而困难起来,驱动程序的作用正是要屏蔽硬件的这些底层细节,从而简化应用程序的编写。目前Linux下常用的声卡驱动程序主要有两种:OSS 和ALSA。

   最早出现在Linux上的音频编程接口是OSS(Open Sound System),它由一套完整的内核驱动程序模块组成,可以为绝大多数声卡提供统一的编程接口。OSS出现的历史相对较长,这些内核模块中的一部分 (OSS/Free)是与Linux内核源码共同免费发布的,另外一些则以二进制的形式由4Front Technologies公司提供。由于得到了商业公司的鼎力支持,OSS已经成为在Linux下进行音频编程的事实标准,支持OSS的应用程序能够在绝 大多数声卡上工作良好。

   虽然OSS已经非常成熟,但它毕竟是一个没有完全开放源代码的商业产品,ALSA(Advanced Linux Sound Architecture)恰好弥补了这一空白,它是在Linux下进行音频编程时另一个可供选择的声卡驱动程序。ALSA除了像OSS那样提供了一组内 核驱动程序模块之外,还专门为简化应用程序的编写提供了相应的函数库,与OSS提供的基于ioctl的原始编程接口相比,ALSA函数库使用起来要更加方便一些。

   ALSA官网: http://www.alsa-project.org/

       alsa-driver,alsa-firwware是内核开发者所接触的东西,对于已经正常运行硬件,通常意味着这一部分已经整合到内核当中,无需修改.
      而alsa-utils主要是测试一些小工具.
      因此对于一个应用程序开发者,或者嵌入式应用开发者,接触到主要是alsa-lib编译出来的libasound.so等库
  

二、下载alsa-utils, alsa-lib, 版本要一致

        http://www.alsa-project.org/main/index.php/Download


            我使用的版本是alsa-lib-1.0.22 和 alsa-utils-1.0.22

三、移植alsa-lib-1.0.22


<span style="font-family:SimSun;font-size:18px;"># tar xvjf alsa-lib-1.0.22.tar.bz2
# cd alsa-lib-1.0.22
# ./configure  \
--host=arm-linux \ 
--prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/lib/arm-alsa \
--enable-static \
--enable-shared \ 
--disable-python \
--with-configdir=/usr/share \
--with-plugindir=/usr/lib/alsa_lib

# make
# make install</span>
说明:
(1) 目标板类型
(2) 生成的可执行文件的路径,这里一般不使用默认路径。因为生成的文件需要发布到单板,以免和PC的冲突
(3) 使能静态链接
(4) 使能共享库
(5)  禁止python脚本
(6) --with--configdir的选项.它将影响 include/config.h中的 ALSA_CONFIG_DIR 目录.
它默认是你的--prefix目录.这样在嵌入式交叉编译将是一个桌面机的路径,在libasoud.so运行.会提示,如果出来这个提示,一般都是ALSA_CONFIG_DIR路径错误造成的
 ALSA lib pcm.c:2145:(snd_pcm_open_noupdate) Unknown PCM default
aplay: main:546: audio open error: No such file or directory
(7) --with-plugindir也是同样道理了.它是设为 ALSA_PLUGIN_DIR 宏.

在开发板上发布alsa库.除了libasound.so库以外,必须还要把 alsa.conf发布到板上--with-configdir所指向目录下的alsa目录,否则还是会报"audio open error: No such file or directory".
这个文件可以在make install后在你安装目录下的share找到alsa目录,把这个目录整个拷贝到开发板即可.

补充:我在此处编译遇到的两个问题
(1) 此时若出现mv: cannot stat `t-ja.gmo’: No such file or directory错误 解决方法是下载gettext: apt-get install gettext  重新配置编译 。
(2) 此处最容易出现的错误还有 切换到root用户之后没有添加arm-linux-gcc的PATH路径 而导致的提示没有安装gcc编译器的问题。解决办法是:
sudo -s 
export PATH=PATH:/usr/local/arm/4.3.2/bin
或者另一种一劳永逸的方法:
#vim /etc/environment  在文件中添加你的gcc安装路径到环境变量

四、移植alsa-utils-1.0.22


<span style="font-family:SimSun;"># tar xvjf alsa-utils-1.0.22.tar.bz2
# cd alsa-utils-1.0.22
# PKG_CONFIG_PATH="/usr/local/arm/4.3.2/arm-none-linux-gnueabi/lib/arm-alsa/lib/pkgconfig" \
LDFLAGS="-L/usr/local/arm/4.3.2/arm-none-linux-gnueabi/lib/ -lpthread -lc -lgcc" \
CFLAGS="-I/usr/local/arm/4.3.2/arm-none-linux-gnueabi/include" \
./configure \
--host=arm-linux \
--target=arm-linux \
--prefix=/home/yuanxiang/alsa_arm/alsa_u \
--disable-alsamixer \
--disable-xmlto \
--with-alsa-prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/lib/arm-alsa/lib/ \
--with-alsa-inc-prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/lib/arm-alsa/include/

# make
# make install</span><span style="font-family:Courier New;"> </span>
说明:
(1)这个PKG_CONFIG_PATH主要指明ALSA.pc文件的所在路径,这样 pkg-config工具就可以根据.pc文件的内容动态生成编译和连接选项,比如 cflags(编译用的头文件)和 libs (连接用的库),至于说pkg-config的具体细节?百度下就知道了,了解这个工具非常有用。
(2) LDFLAGS和CFLAGS就是指定链接和编译的库的路径
(3)  --with-alsa-prefix和-with-alsa-inc 是非标准的库和头文件的路径,就是上面alsa-lib编译出来的文件的路径。

五、发布到单板


将编译alsa-lib,alsa-utils所产生的4个目录拷贝到SD卡.插入单板。
四个目录:
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/lib/arm-alsa
/usr/share/alsa
/usr/lib/alsa_lib
/home/yuanxiang/alsa_arm/alsa_u


在超级终端下进入/sdcard目录

(1)首先移植alsa_u中的文件:
cd /sdcard/alsa_u
cp -r bin/* /bin
(2)然后移植arm-alsa中的文件
cd /sdcard/arm-alsa
cp -r lib/* /lib
(3)然后移植alsa中的文件
cd /sdcard
cp -r alsa/* /usr/share
(4)到此alsa移植完成,alsa_lib中的文件不移植也可以

六、测试

如果安装ALSA,在/proc会看到相应设备:
cat /proc/asound/devices
[root@FORLINX6410]# cat /proc/asound/devices 
  0: [ 0]   : control
  1:        : sequencer
 16: [ 0- 0]: digital audio playback
 24: [ 0- 0]: digital audio capture
 33:        : timer

正常情况下,在你的/dev/snd会看到如下设备结点(有例外,就是内核驱动调整了结点位置)
用ls -l /dev/snd
[root@FORLINX6410]# ls -l /dev/snd/
crw-rw-r--    1 root     root     116,   0 Jan  1  2000 controlC0
crw-rw-r--    1 root     root     116,  24 Jan  1  2000 pcmC0D0c
crw-rw-r--    1 root     root     116,  16 Jan  1  2000 pcmC0D0p
crw-rw-r--    1 root     root     116,   1 Jan  1  2000 seq
crw-rw-r--    1 root     root     116,  33 Jan  1  2000 timer

在单板上执行:
# aplay test.wav


参考:感谢参考博客的作者,如有侵权,本人第一时间删除。

linux音频库编程指南



# make
# make install
2019-11-10 11:39:31 YT_blog 阅读数 35
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5927 人正在学习 去看看 杨波

概述

Python实现实时语音识别+控制, 录制语音指令,识别语音指令,执行语音指令(模拟web页面滚动)

详细

Python实时语音识别控制

概述

本文中的语音识别功能采用 百度语音识别库 ,首先利用 PyAudio 库录制语音指令,保存为受支持的 wav 音频文件,然后利用 百度语音识别库 提供的方法实现语音识别,最后检测识别结果,利用 PyUserInput 库提供的方法模拟控制web页面滚动。
百度语音识别为开发者提供业界优质且免费的语音服务,通过场景识别优化,为车载导航,智能家居和社交聊天等行业提供语音解决方案,准确率达到90%以上,让您的应用绘“声”绘色。

百度语音AI

准备工作

安装百度语音识别SDK
pip install baidu-aip
安装Python音频处理库 PyAudio
python -m pip install pyaudio
安装鼠标控制库 PyUserInput
pip install pyuserinput
PyUserInput 库依赖另外两个库 pywin32 和 pyHook ,需要单独安装。
安装方法可以参考下面这篇文章:Win10 Python3.5安装PyUserInput

令附文中提到的资源下载链接:lfd-pythonlibs

另外文中提到的两个包, 需要根据自己的系统和python版本来选择。

如果系统是64位的,就要选择带 amd64 的。

如果python版本为python3.7的,就要选择带 cp37 的。

比如:pywin32-223-cp37-cp37m-win_amd64.whl
pyHook-1.5.1-cp37-cp37m-win_amd64.whl

申请百度开发者帐号
参考下面链接中的文章注册百度帐号,完成开发者认证,创建应用,获取密钥
百度AI开放平台接入流程

用Pyaudio库录制音频
Pyaudio 是一个非常强大的音频处理库,简单几行代码即可实现音频播放,录制等功能.
百度语音识别API支持的语音格式有: pcm(不压缩)、wav(不压缩,pcm编码)、amr(压缩格式).
推荐 pcm , 采样率: 16000 固定值, 编码: 16bit , 位深: 单声道 .百度服务端会将非pcm格式, 转为pcm格式, 因此使用wav, amr会有额外的转换耗时.
为了实现实时语音识别功能, 这里通过pyaudio录制一段wav格式的音频, 报文成wav音频文件, 供后续识别时调用.

用Pyaudio库录制音频

out_file:输出音频文件名

rec_time:音频录制时间(秒)

	def audio_record(out_file, rec_time):
	    CHUNK = 1024
	    FORMAT = pyaudio.paInt16 #16bit编码格式
	    CHANNELS = 1 #单声道
	    RATE = 16000 #16000采样频率
	    p = pyaudio.PyAudio()
	    # 创建音频流 
	    stream = p.open(format=FORMAT, # 音频流wav格式
	                    channels=CHANNELS, # 单声道
	                    rate=RATE, # 采样率16000
	                    input=True,
	                    frames_per_buffer=CHUNK)
	    print("Start Recording...")
	    frames = [] # 录制的音频流
	    # 录制音频数据
	    for i in range(0, int(RATE / CHUNK * rec_time)):
	        data = stream.read(CHUNK)
	        frames.append(data)
	    # 录制完成
	    stream.stop_stream()
	    stream.close()
	    p.terminate()
	    print("Recording Done...")
	    # 保存音频文件
	    wf = wave.open(out_file, 'wb')
	    wf.setnchannels(CHANNELS)
	    wf.setsampwidth(p.get_sample_size(FORMAT))
	    wf.setframerate(RATE)
	    wf.writeframes(b''.join(frames))
	    wf.close()

调用百度语音API

读取paudio录制好的音频文件, 调用百度语音API, 设置api参数, 完成语音识别

client:AipSpeech对象

afile:音频文件

afmt:音频文件格式(wav)

def aip_get_asrresult(client, afile, afmt):
    # 选项参数:
    # cuid    String  用户唯一标识,用来区分用户,填写机器 MAC 地址或 IMEI 码,长度为60以内
    # dev_pid String  语言类型(见下表), 默认1537(普通话 输入法模型)
    # 识别结果已经被SDK由JSON字符串转为dict
    result = client.asr(get_file_content(afile), afmt, 16000, {"cuid": CUID, "dev_pid": DEV_PID,})
    #print(result)
    # 如果err_msg字段为"success."表示识别成功, 直接从result字段中提取识别结果, 否则表示识别失败
    if result["err_msg"] == "success.": 
        #print(result["result"])
        return result["result"]
    else:
        #print(result["err_msg"])
        return ""

dev_pid 参数列表
dev_pid 语言 模型 是否有标点 备注
1536 普通话(支持简单的英文识别) 搜索模型 无标点 支持自定义词库
1537 普通话(纯中文识别) 输入法模型 有标点 不支持自定义词库
1737 英语 有标点 不支持自定义词库
1637 粤语 有标点 不支持自定义词库
1837 四川话 有标点 不支持自定义词库
1936 普通话远场 远场模型 有标点 不支持

控制(鼠标)页面滚动

控制鼠标滚动

	def mouse_control(dir_tr):
	    MOVE_DX = 5 # 每次滚动行数
	    ms = PyMouse()
	    horizontal = 0
	    vertical = 0
	    if dir_tr.find("上") != -1: # 向上移动
	        vertical = MOVE_DX
	        #print("vertical={0}, 向上".format(vertical))
	    elif dir_tr.find("下") != -1: # 向下移动
	        vertical = 0 - MOVE_DX
	        #print("vertical={0}, 向下".format(vertical))
	    elif dir_tr.find("左") != -1: # 向左移动
	        horizontal = 0 - MOVE_DX
	        #print("horizontal={0}, 向左".format(horizontal))
	    elif dir_tr.find("右") != -1: # 向右移动
	        horizontal = MOVE_DX
	        #print("horizontal={0}, 向右".format(horizontal))
	    #print("horizontal, vertical=[{0},{1}]".format(horizontal, vertical))
	    # 通过scroll(vertical, horizontal)函数控制页面滚动
	    # 另外PyMouse还支持模拟move光标,模拟鼠标click,模拟键盘击键等
	    ms.scroll(vertical, horizontal)

完成实时语音识别控制

	while(True):
	    # 请说出语音指令,例如["向上", "向下", "向左", "向右"]
	    print("\n\n==================================================")
	    print("Please tell me the command(limit within 3 seconds):")
	    #print("Please tell me what you want to identify(limit within 10 seconds):")
	    audio_record(AUDIO_OUTPUT, 3) # 录制语音指令
	    print("Identify On Network...")
	    asr_result =  aip_get_asrresult(client, AUDIO_OUTPUT, AUDIO_FORMAT) # 识别语音指令
	    if len(asr_result) != 0: # 语音识别结果不为空,识别结果为一个list
	        print("Identify Result:", asr_result[0])
	        print("Start Control...")
	        mouse_control(asr_result[0]) # 根据识别结果控制页面滚动
	        print("Control End...")
	        if asr_result[0].find("退出") != -1: # 如果是"退出"指令则结束程序
	            break;
	        time.sleep(1) # 延时1秒

完整如下

# 用Pyaudio库录制音频
#   out_file:输出音频文件名
#   rec_time:音频录制时间(秒)
import pyaudio
import os
import wave
from aip import AipSpeech

def audio_record(out_file, rec_time):
    CHUNK = 1024
    FORMAT = pyaudio.paInt16 #16bit编码格式
    CHANNELS = 1 #单声道
    RATE = 16000 #16000采样频率
    
    p = pyaudio.PyAudio()
    # 创建音频流 
    stream = p.open(format=FORMAT, # 音频流wav格式
                    channels=CHANNELS, # 单声道
                    rate=RATE, # 采样率16000
                    input=True,
                    frames_per_buffer=CHUNK)

    print("Start Recording...")

    frames = [] # 录制的音频流
    # 录制音频数据
    for i in range(0, int(RATE / CHUNK * rec_time)):
        data = stream.read(CHUNK)
        frames.append(data)
    
    # 录制完成
    stream.stop_stream()
    stream.close()
    p.terminate()

    print("Recording Done...")

    # 保存音频文件
    wf = wave.open(out_file, 'wb')
    wf.setnchannels(CHANNELS)
    wf.setsampwidth(p.get_sample_size(FORMAT))
    wf.setframerate(RATE)
    wf.writeframes(b''.join(frames))
    wf.close()
# 调用方法适用
audio_record("yinping.wav", 2)
#以上OK了

  
""" 你的 APPID AK SK """
APP_ID = '14557094'
API_KEY = 'dDN1wGSDm2CdNiMGhYygPiQ6'
SECRET_KEY = '2N0fyorX5yreVF5Wgq4FdlK71rh5q8uw'
#调用接口生成识别对象 
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
# 读取文件方法
def get_file_content(filePath):
 with open(filePath, 'rb') as fp:
  return fp.read()

# 读取paudio录制好的音频文件, 调用百度语音API, 设置api参数, 完成语音识别
#    client:AipSpeech对象
#    afile:音频文件
#    afmt:音频文件格式(wav)
def aip_get_asrresult(client, afile, afmt):
    # 选项参数:
    # cuid    String  用户唯一标识,用来区分用户,填写机器 MAC 地址或 IMEI 码,长度为60以内
    # dev_pid String  语言类型(见下表), 默认1537(普通话 输入法模型)
    # 识别结果已经被SDK由JSON字符串转为dict
    result = client.asr(get_file_content(afile), afmt, 16000, )
    print(result)
    # 如果err_msg字段为"success."表示识别成功, 直接从result字段中提取识别结果, 否则表示识别失败
    if result["err_msg"] == "success.": 
        print(result["result"])
        #return result["result"]
    else:
        print(result["err_msg"])
        #return ""
aip_get_asrresult(client, "yinping.wav", "wav")
2019-09-29 17:33:04 tianyawp123 阅读数 242
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5927 人正在学习 去看看 杨波

最近在试语音转文本,了解了一些相关的东西,记录一下。

一、python speechRecogniton库

python自带的speechRecognition库是一个多功能的实现语音识别的库,细节网上有很多,可以搜到,可以参考

https://blog.csdn.net/alice_tl/article/details/89684369

 

二、使用说明

  1. 安装speechRecognition库
    pip install speechrecognition

     

  2. 使用,定义不同类别的函数
    import speech_recognition as sr
    
    global r
    r = sr.Recognizer()
    
    #调用谷歌的语音api
    def google(audio):
    	try:
    		print("Google: ")
    		return r.recognize_google(audio)
    	except sr.UnknownValueError:
    		print("Google Speech Recognition could not understand audio")
    		return None
    	except sr.RequestError as e:
    		print("Could not request results from Google Speech Recognition service; {0}".format(e))
    		return "None"
    
    #使用wit的
    def wit(audio):
    	# recognize speech using Wit.ai
    	WIT_AI_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx"  # Wit.ai keys are 32-character uppercase alphanumeric strings
    	try:
    		#print("Wit.ai: ")
    		return r.recognize_wit(audio, key=WIT_AI_KEY)
    	except sr.UnknownValueError:
    		print("Wit.ai could not understand audio")
    		return "None"
    	except sr.RequestError as e:
    		print("Could not request results from Wit.ai service; {0}".format(e))
    		return "None"
    
    #调用bing的
    def bing(audio):
    	BING_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    	# recognize speech using Microsoft Bing Voice Recognition
    	try:
    		#print("Microsoft Bing Voice Recognition: ")
    		return r.recognize_bing(audio, key=BING_KEY)
    	except sr.UnknownValueError:
    		print("Microsoft Bing Voice Recognition could not understand audio")
    		return "None"
    	except sr.RequestError as e:
    		print("Could not request results from Microsoft Bing Voice Recognition service; {0}".format(e))
    		return "None"
    	
    # Query IBM
    def ibm(audio):
    
    	# recognize speech using IBM Speech to Text
    	IBM_USERNAME = "xxxxxxxxxxxxxxxxxxxxxxxxxx"  # IBM Speech to Text usernames are strings of the form XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
    	IBM_PASSWORD = "xxxxxxxxxxxxxxxxx"  # IBM Speech to Text passwords are mixed-case alphanumeric strings
    	try:
    		#print("IBM Speech to Text: ")
    		return r.recognize_ibm(audio, username=IBM_USERNAME, password=IBM_PASSWORD, show_all=False)
    	except sr.UnknownValueError:
    		print("IBM Speech to Text could not understand audio")
    		return "None"
    	except sr.RequestError as e:
    		print("Could not request results from IBM Speech to Text service; {0}".format(e))
    		return "None"
    
    #使用sphinx的
    def sphinx(audio):
    	try:
    		print("-------------Sphinx successfully recognized the audio ---------")
    		return r.recognize_sphinx(audio)
    	except sr.UnknownValueError:
    		print("Sphinx could not understand audio")
    	except sr.RequestError as e:
    		print("Sphinx error; {0}".format(e))

    需要注意的是,其中sphinx的可以离线使用,需要安装sphinx包,其他的几个都要联网。谷歌的不需要注册,其他几个需要注册码

  3. 使用定义的函数识别具体的语音文件:需要注意,只能识别wav格式,如果不是,先转成wav

    from pydub import AudioSegment
    
    
    r = sr.Recognizer()
    
    
    def speech_to_text(path_file):
        #转格式
        song = AudioSegment.from_mp3(path_file)
        song.export("audio.wav", format="wav")#默认是本地路径
    
        with sr.AudioFile('audio.wav') as source:  # AudioFile 类可以通过音频文件的路径进行初始化,并提供用于读取和处理文件内容的上下文管理器界面。
    
            audio = r.record(source)  # 从音频文件中获取数据
            print(audio)
    
        print("Submitting To Speech to Text:")
        determined = sphinx(audio)  # Instead of google, you can use ibm or bing here
        print(determined)
        return  determined

     

2013-07-31 10:59:33 jwb361 阅读数 10183
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5927 人正在学习 去看看 杨波

TIMIT语音库为大多数论文及研究中常用的语音库,适用于语音识别、说话人识别等语音信号处理。

在MIT网站可以找到一些样例, 为 16kHz sampling, 16 bit sample, PCM encoding。样例才160个句子,不够用。

这儿能找到完整版,用抓取工具全部下载下来有600多M羡慕

问题是虽然其为wav结尾,matlab中wavread却读不了抓狂,用二进制打开文件发现

google一下,原来其为 SPHERE文件格式

整个语音库有6300个文件,如何全部转换为普通的wav文件?

step1 遍历整个文件夹,把所有wav文件全找出来 find_wav.m

function [ wav_files ] = find_wav( path )
%FIND_WAV, find all wav file recursively
wav_files = [];
if(isdir(path) == 0)
    return;
end
path_files = dir(path);
fileNum = length(path_files);
for k= 3:fileNum
    file = [path,'\', path_files(k).name];
    if (path_files(k).isdir == 1)
        ret = find_wav(file);
        if(isempty(ret) ~= 1)
            if(isempty(wav_files))
                wav_files = char(ret);
            else
                wav_files = char(wav_files, ret);
            end
        end
    elseif strfind(path_files(k).name, '.wav')
        if(isempty(wav_files))
            wav_files = char(file);
        else
            wav_files = char(wav_files, file);
        end
    end
end
end

step2 文件转换conver_wav.m

%SPHERE 文件转换为wav文件
clear all;
fs = 16000;
files = find_wav('.');
for fileIdx = 1:length(files)  
    file = files(fileIdx,:);
    fileID = fopen(file);
    
    %判断文件头,防止误操作
    head = fread(fileID, 1024, 'char*1'); 
    headStr = sprintf('%s',head(1:7));
    if(~strcmp(headStr,'NIST_1A'))
        fclose(fileID);
        continue;
    end    
    frewind(fileID);
    
    allData = fread(fileID, inf, 'short');
    fclose(fileID);
    delete(file);
    wavwrite(allData(513:end)./32768, fs, file);    %SPHERE 文件头1024字节    
end

step3 检查 check_wav.m

clear all;
files = find_wav('.');
for fileIdx = 1:length(files)
    file = files(fileIdx,:);
    [y, fs, nbits] = wavread(file);%不是wav文件就会报错
    if(fs~=16000)
        fprintf('%s: fs~=16000\n', file);
    end
    if(nbits ~= 16)
        fprintf('%s: nbits ~= 16\n', file);
    end
end

大功告成


2013-03-29 10:23:06 heartrude 阅读数 2206
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5927 人正在学习 去看看 杨波

openEars

是一个开源的语音识别+TTS库。可以在IOS下使用。

 http://www.politepix.com/openears/tutorial/


Julius

是开源语音双向处理库,不过目前仅对日语支持比较好。 Linux和Windows下都可以使用。

 http://julius.sourceforge.jp/en_index.php


SAPI

微软提供的一套语音合成和语音识别库。支持中英文。

http://www.microsoft.com/en-us/download/details.aspx?id=10121


Microsoft Speech Platform

一套更加新一点的库。也是微软提供的。不知道和SAPI什么关系。

支持VB、C#

http://www.microsoft.com/en-us/download/details.aspx?id=27226


Google的SR 网络API

http://php.oil58.com/?p=483

android语音识别简介

阅读数 2929

语音识别

阅读数 4937

没有更多推荐了,返回首页