概述

昨天想在Ubuntu上用一下HTK工具包来绘制语音信号的频谱图和提取MFCC的结果,但由于前段时间把Ubuntu升级到13.04,系统的声卡驱动 是ALSA(Advanced Linux Sound Architecture,高级Linux声音体系),而不是HTK中所使用的OSS(Open Sound System,开放声音系统)。 网上查阅了大半天,按照 http://forum.ubuntu.org.cn/viewtopic.php?t=316792 中提供的方法用OSS4来替换ALSA,结果OSS4没替换成功, 而原来的ALSA也不好使了,真坑爹啊!到现在还没办法完全复原,现在只能通过alsamixer来设置音量了,系统的音量设置根本无法用,而且 声音设置中的输入设备和输出设备都是空的。(现在将系统升级到13.10版,系统的音量设置可以用了,哈哈)捣鼓了半天也没还原回来唉, 整个人都快崩溃了,都是由于对Linux不熟悉才被虐至如此地步,得恶补啊!!!下面本文就主要介绍一下OSS和ALSA,并将二者进行比较。

在介绍OSS和ALSA之前,先介绍一下音频设备的一些基础知识。
数字音频设备,有时也称codec,PCM,DSP,ADC/DAC设备,用来播放或录制数字化的声音。它的指标主要有:采样速率(电话为8K,DVD为96K)、 channel数目(单声道,立体声)、采样分辨率(8-bit,16-bit)等。
mixer(混频器):用来控制多个输入、输出的音量,也控制输入(microphone,line-in,CD)之间的切换。
synthesizer(合成器):通过一些预先定义好的波形来合成声音,有时用在游戏中声音效果的产生。
MIDI接口:MIDI接口是为了连接舞台上的synthesizer、键盘、道具、灯光控制器的一种串行接口。

1.PCM Wave格式详解

WAVE文件格式是微软RIFF(Resource Interchange File Format,资源交换文件标准)的一种,是针对于多媒体文件存储的一种文件格式和标准。 一般而言,RIFF文件由文件头和数据两部分组成,一个WAVE文件由一个“WAVE”数据块组成,这个“WAVE”块又由一个"fmt"子数据块和一个“data”子 数据块组成,也称这种格式为“Canonical form”(权威/牧师格式),如下图所示:

有时候,博客文章太长,需要返回顶部时,需要用鼠标拖着滚动条向上好半天,这里提供一个用 jQuery 来实现的动态上滚的示例。这个示例完全参考和翻译自 webdesignerwall 的 blog:http://webdesignerwall.com/tutorials/animated-scroll-to-top,其中有部分删改,并在本人的 blog 上实现。

主要包含HTML和CSS的设计,基于jQuery的JS的设计。另外还有一点小trick

Design & CSS

相关的 HTML 代码很简单,在source/_include/custom/footer.html中添加如下代码:

<p id = "back-top">
    <a href="#top"><span></span>Back to Top</a>
</p>

最近在室友的带领下,开始去cjl游泳馆学游泳,这里转载一篇游泳教程,分享给初学游泳的网友们

蛙泳

蛙泳配合有一个顺口溜,在讲解蛙泳动作要领之前先介绍给大家:“划手腿不动,收手再收腿,先伸胳膊后蹬腿,并拢伸直漂一会儿。” 从顺口溜中可以看到,手的动作是先于腿的动作。一定要在收手后再收腿,伸手后再蹬腿。

臂部动作:
1、外划。双手前伸,手掌倾斜大约45度(小拇指朝上)。双手同时向外、后方划,继而屈臂向后、向下方划。
2、内划。掌心由外转向内,手带动小臂加速内划,手由下向上并在胸前并拢(手高肘低、肘在肩下),前伸。
3、前伸。双手向前伸(肘关节伸直)。要提醒大家注意的是:外划是放松的,内划是用力的、加速完成的、前伸是积极的。

本文介绍如何使用Windows API来录制语音信号兵保存到wave文件中,主要用到三个结构体和几个wave开头的API函数(在Winmm.lib文件中)。其中三个结构体是WAVEFORMATEX、WAVEHDR、MMTIME,其详细定义都在MMSystem.h中定义, 可以转到定义看其详细内容及每一项的英文注释。用到的API函数的详细用法可以参见MSDN: http://msdn.microsoft.com/en-us/library/windows/desktop/dd743847(v=vs.85).aspx 详细的使用过程请看下文的源代码,这是一个Win32 Application,需要手动添加Winmm.lib的依赖。

1.概述

音高及其Python实现一文 中,我们使用了简单的“观察法”来计算音高,这并不太难,但这并不有好而且费时费力,那么我们就想,如何通过分析和计算,使用算法来自动计算音高呢? 用算法让计算机自动抓取音高的过程,称为音高追踪(Pitch Tracking)。所得到的音高信息有如下一些应用:
·旋律识别(Melody Recognition):或称为“哼唱选歌”,也就是如何由使用者的哼唱,找出音乐资料库中间对应的歌。
·汉语声调识别(Tone Recognition):辨识使用者讲一句话时,每一个字的声调(一声、二声、三声、四声等)。
·语音合成韵律分析(Prosody Analysis)中的音高分析:如何在合成语音时,使用最自然的音高曲线。
·语音评分中的音调评分(Intonation Assessment):如何评估使用者说话的语音,其音高曲线是否标准。
·语音识别(Speech Recognition):我们可以使用语句的音高来提高语音辨识的正确率。
总而言之,音高追踪是语音信号处理中最基本也最重要的一个环节之一。

2.音高追踪的基本流程

音高追踪的基本流程如下:
(1)将整段音讯讯号切成音框(Frames),相邻音框之间可以重叠。
(2)算出每个音框所对应的音高。
(3)排除不稳定的音高值。(可由音量来筛选,或由音高值的范围来过滤。)
(4)对整段音高进行平滑化,通常是使用「中位数滤波器」(Median Filters)。

最近一直忙着准备给媒体展示的音控大鼠机器人一不小心上了CCTV了,虽然自己感觉没什么了不起的,也不知道网络上是什么评论。 但既然上了CCTV,还是发博纪念一下吧

央视新闻视频链接:浙江杭州最新科研成果:大白鼠听人话 真没想到自己居然正面出境这么长时间。

杭州日报的记者写的新闻还挺生动的:“嫁接”了机器视觉的大白鼠在沙盘迷宫中寻觅阿汤哥的照片

PS:感谢CCTV,感谢杭州日报,感谢ZJU,感谢CCNT,感谢各位老师和同学,感谢生仪的给大鼠做开颅手术的两位mm,感谢各位在微博帮忙宣传和转发的各位同学!

端点检测

端点检测(End-Point Detection,EPD)的目标是要决定信号的语音开始和结束的位置,所以又可以称为Speech Detection或Voice Activity Detection(VAD)。 端点检测在语音预处理中扮演着一个非常重要的角色。

常见的端点检测方法大致可以分为如下两类:
(1)时域(Time Domain)的方法:计算量比较小,因此比较容易移植到计算能力较差的嵌入式平台
(a)音量:只使用音量来进行端检,是最简单的方法,但是容易对清音造成误判。另外,不同的音量计算方法得到的结果也不尽相同,至于那种方法更好也没有定论。
(b)音量和过零率:以音量为主,过零率为辅,可以对清音进行较精密的检测。
(2)频域(Frequency Domain)的方法:计算量相对较大。
(a)频谱的变化性(Variance):有声音的频谱变化较规律,可以作为一个判断标准。
(b)频谱的Entropy:有规律的频谱的Entropy一般较小,这也可以作为一个端检的判断标准。

下面我们分别从这两个方面来探讨端检的具体方法和过程。

音色(Timbre)

音色是一个很模糊的概念,它泛指语音的内容,例如“天书”这两个字的发音,虽然都是一声(即他们的音高应该是相同或接近的), 但由于音色不同,我们可以分辨这两个音。直觉而言,音色的不同,意味着基本波形的不同,因此我们可以用基本周期的波形来代表音色。

若要从基本周期的波形来直接分析音色是一件很困难的事情。通常我们的做法是将每一个帧进行频谱分析(Spectral Analysis),算出一个 帧如何分解为不同频率的分量,然后才能进行对比或分析。在频谱分析中,最常用的方法就是快速傅里叶变换(Fast Fourier Transform,FFT), 这是一个相当常用的方法,可以讲在时域(Time Domain)的信号转换成频域(Frequency Domain)的信号,并进而知道每个频率的信号强度。

语谱图(Spectrogram)就是语音频谱图,一般是通过处理接收的时域信号得到频谱图,因此只要有足够时间长度的时域信号就可以(时间长度 为保证频率分辨率)。专业点讲,语谱图就是频谱分析视图,如果针对语音数据的话,叫语谱图。语谱图的横坐标是时间,纵坐标是频率,坐标点 值为语音数据能量,因而语谱图很好的表达了语音的音色随时间变化的趋势。有些经验丰富的人能够通过看语谱图而知道对应的语音信号的内容, 这种技术成为Spectrogram Reading。

音高(Pitch)

概念:音高(Pitch)是语音信号的一个很重要的特征,直觉上而言它表示声音频率的高低,这个频率是指基本频率(基频),也即基本周期的倒数。 若直接观察语音的波形,只要语音信号稳定,我们可以很容易的看出基本周期的存在。例如我们取一个包含256个采样点的帧,单独绘制波形图,就可以明显的 看到它的基本周期。如下图所示:

其中最上面的波形为|a|的发音,中间的为上图中红色双竖线(位于语音区)所对应的帧的具体波形,而最下面的是上图中绿色双竖线(位于静音区)所 对应的帧的具体波形。很容易看到中间的波形具有明显的周期性。