为了适应广大软件开发者开发语音识别软件的需要,我们推出了《宏乐声纹对比控件》(又名《宏乐语音评分控件》)。通过这个控件可以对比任意两个声音句子的纹理,并获得两个声纹的近似度的百分值。让软件设计者根据识别的结果控制各种设备或操纵软件执行相应的功能。
  用户可以将每次录音对比后生成的“总特征.bin”文件另外命名保存起来,类似数据库管理它们,建立一个一一对应的特征数据库,以后通过对比函数:
Comp 〔对比〕(bin格式特征文件名) 从特征数据库中逐个取出不同的特征文件快速的与当前的录音结果对比,从而知道当前的声纹与数据库内的哪一个声纹最吻合。
  我们还为掌上电脑,或学习机提供VC++源代码或DLL评分插件。通过它,可以获得学生跟读老师句子的吻合程度。(由于采用了自创的算法,在同类产品中的响应速度是最快的。)
  注:本控件主要用于识别有变化的词汇或句子,对单一的没有变化的声音识别效果不理想。

购买方式   常见问题   《宏乐声纹对比控件》“通用版”

HLYYPF.exe 最新版本下载(注:这个链接能获取作者发布的最新版本)

控件界面说明图如下:

注:控件的界面可以用属性"Visible= false"隐含,也可以通过调整高度显示需要的部分。

测试方法:

  测试的技巧主要是先调整好麦克风的灵敏度,然后点击“录音”,发音停顿则结束录音并评分。此时会看到一条亮青色的变化曲线;之后点击“设为对比内容”,会看到亮青色的曲线变为灰色。有了灰色的对比内容后,再重复录音操作则可获得评分结果。这些过程完全可以用软件来控制;具体请参阅函数说明。(如果特征曲线总是出不来,请尝试“反向”功能,通常在面板插入的麦克风插孔需要“反向”)

有什么问题或要求请与我们联系:

信箱: hlgzs@21cn.net  或: hlgzs2@yahoo.com.cn 或:hlgzsnease@163.com


函数说明:

1.Rocord 〔录制〕(true 或 false)    true 开始录音(控件在句结束后自动停止录音并识别)。

2.Establish 〔设置〕(true)   将当前的录音特征设置为对比特征。

3.Percentage 〔评分〕    获取当前对比结果的分数值(0 表示根本不吻合,有数值表示相似度的百分比。)

4.AutoRecord〔自动录音〕(true 或 false)    true 则启动适时录音,源源不断的将录音的内容进行对比分析。Falae 则关闭自动录音。

5.Comp 〔对比〕(bin格式特征文件名)    将数据库内的某个特征文件设为对比内容并与当前的录音结果对比(既文件:“总特征.bin” 的副本)。(可直接拖放bin副本文件到本控件测试)

6.EstablishVoiceFileNameToComp 〔设声音文件为对比〕(WAV格式声音文件路径名称)    将一个任意格式的WAV文件分析后获取的声纹特征设置为对比内容。

7.CompVoiceFile 〔对比声音文件〕(WAV格式声音文件路径名称)    将一个任意格式的WAV文件(而不是录音内容)来对比。(可直接拖放Wav文件到本控件测试)

8.Noise 〔测噪音〕(true)    这个函数一般不用,因为控件会在录音结果的末尾段自动分析噪音值。

9.Volume 〔音量〕    获取当前录音结果的音量 (最大值为100)

10.Painting 〔绘图〕(true 或 false)   true 则绘图,false 则不绘图。

11.RecordCharacterFileName 〔录音特征文件名〕(bin格式文件名)    获取当前录音结果的特征文件名全称。(特征文件的长度为2310字节{如果选择身份鉴别长度为2320字节},可以将这个文件用不同的名称命名保存到数据库中对应某个声音文件,便于单独或批量对比。通常这个文件名是控件包路径+"\总特征.bin")

12.CompCharacterFileName 〔对比特征文件名〕(bin格式文件名)    获取对比特征文件名的全称。(通常这个文件名为控件包路径+"\总对比特征.bin")

13.OpenF12 〔允许F12键录音〕(true 或 false)    true 则允许F12键代替鼠标录音。(按下F12开始录音,放开F12结束录音。结束录音的同时分析声纹的相似度)

14.DiscriminateBody 〔鉴别身份〕 (true 或 false)  选择 true 则比较严格的校对个人的声纹,选择 false 则适合男女老幼的各种音色。

15.Reverse 〔反向〕(true 或 false) true 则反向,用于相位相反的麦克风接口。

16.Play (播放录音) (true) 播放现场录音的(学生)声音,或 CompVoiceFile 函数调入的声音文件

17.Play_Comp (播放对比) (true) 播放用于对比的(老师)声音。

18.Re_Recognition 〔重新识别〕(true 或 false) true ,主要用于“反向”之后的不重录音而直接识别。

19.OCX_Path 〔控件路径〕(true 或 false) true ,读取控件所在的路径全称。

20.IsOver 事件,这个事件在分析完毕后自动启用。能调用OCX控件的用户在设计时双击本控件可以看到IsOver事件,然后在这个事件中插入分析完成后响应的代码。

21.Max_Record_Timer(没有响应的最大秒数) (1~60) 人工录音方式时启动录音后如果一直没有声音数据提交,将在这个值到后无条件停止录音提交数据进行分析。

22.PeakValue (峰值校验 ) (true 或 false) true 则校验峰值误差(校验峰值误差有时会因为环境噪音太大导致声音串首尾定位不准而评分失败)。

23.ALC (自动电平 ) (true 或 false) true 则启用自动电平控制,能在声音较小时放大,声音太大时衰减到比较合理的电平。

24.WordNoumber (字段数) () 一个数值,显示词句切割出的段数(个别词会无法分割而连接在一起,所以这个值并不代表字数,可以理解为嘴唇开合的次数),用于将数据库分类,减少识别时搜索的范围。


打包本控件时必须附带的文件清单:

HLYYPF_8.OCX、宏乐句子剪裁器.exe、16位单声8000.wav、关于.exe、Msvbvm60.dll、Vb6chs.dll、MCI32.OCX、stdole2.tlb;最好将控件包目录下的所有dll文件都带上,OCX控件要记得用regsvr32 XXX.ocx 指令注册。


  《宏乐声纹对比控件》与开发软件衔接的OCX控件文件名是“C:\宏乐语音评分控件包\HLYYPF_8.OCX”,请在开发软件的添加部件或引用中调用它。

在VS2008中调用首先要将控件放在工具栏内!

右击“常规”->“选择项”->“COM”组件->选“HLYYPF_8.HLYYPF”

然后将黄色的星星图标拖到窗体中则可。

针对个别软件不能接受VB设计的OCX控件增设了《宏乐声纹对比控件》“通用版”

通用版的所有操作完全不用调用OCX的指令或装载OCX……


程序举例(VB6):


VB6测试源代码如下:

Private Sub Form_Load()
  '对比特征文件名("")
  对比特征文件名称.Caption = "对比特征文件名称:" & HLYYPF1.CompCharacterFileName("")
End Sub

Private Sub Form_Unload(Cancel As Integer)
  '关闭 (True)
  HLYYPF1.Close_OCX (True)
  End
End Sub

Private Sub 打开通用版测试窗体_Click()
  X = Shell(App.Path + "\宏乐语音评分通用版调试.exe", vbNormalFocus)
End Sub

Private Sub 对比声音文件_Click()
  '对比声音文件 (App.Path + "\测试_不翼而飞.wav")
  HLYYPF1.CompVoiceFile (App.Path + "\测试_不翼而飞.wav")
End Sub


Private Sub 录_Click()
  HLYYPF1.Rocord (True)
End Sub

Private Sub 设声音文件为对比_Click()
  '设声音文件为对比 (App.Path + "\测试_不翼而飞.wav")
  HLYYPF1.EstablishVoiceFileNameToComp (App.Path + "\测试_不翼而飞.wav")
End Sub

Private Sub 对比文件_Click()
  '禁止绘图
  
HLYYPF1.Painting (False)
  HLYYPF1.Comp (App.Path + "\录音特征曲线.bin")
  '允许绘图
  HLYYPF1.Painting (True)
End Sub

Private Sub 设_Click()
  HLYYPF1.Establish (True)
End Sub

Private Sub 身份鉴别_Click()
  If 身份鉴别.Value = 1 Then
    HLYYPF1.DiscriminateBody (True)
  Else
    HLYYPF1.DiscriminateBody (False)
  End If
End Sub

Private Sub 停止_Click()
  '停止自动录音
  
HLYYPF1.AutoRecord (False)
End Sub

Private Sub 允许F12键_Click()
  If 允许F12键.Value = 1 Then
    HLYYPF1.OpenF12 (True)
  Else
    HLYYPF1.OpenF12 (False)
  End If
End Sub

Private Sub 自动_Click()
  HLYYPF1.AutoRecord (True)
End Sub

Private Sub 反向_Click()
  If 反向.Value = 1 Then
    HLYYPF1.Reverse (True)
  Else
    HLYYPF1.Reverse (False)
  End If
End Sub

Private Sub 播放录音_Click()
  HLYYPF1.Play (True)
End Sub

Private Sub 播放对比_Click()
  HLYYPF1.Play_Comp (True)
End Sub

Private Sub HLYYPF1_IsOver()
  提示内容$ = "分数=" & HLYYPF1.Percentage(0) & vbCrLf
  提示内容$ = 提示内容$ + "音量=" & HLYYPF1.Volume(0) & vbCrLf
  提示内容$ = 提示内容$ + "录音特征文件名=" & HLYYPF1.RecordCharacterFileName("") & vbCrLf
  提示内容$ = 提示内容$ + "对比特征文件名=" & HLYYPF1.CompCharacterFileName("") & vbCrLf
  提示内容$ = 提示内容$ + "频率吻合率=" & HLYYPF1.FrequencyFitsTogetherRate(0) & vbCrLf
  If 身份鉴别.Value = 1 Then
    提示内容$ = 提示内容$ + "频谱吻合率=" & HLYYPF1.FrequencyChartFitsTogetherRate(0) & vbCrLf
  End If
  提示内容$ = 提示内容$ + "字段数=" & HLYYPF1.WordNumber & vbCrLf
  结果.Caption = 提示内容$
End Sub

Private Sub 最长录音时间_Change()
  HLYYPF1.Max_Record_Timer (Val(最长录音时间.Text))
End Sub


VB2008测试的源代码:

VB2008的源代码与VB6的略有不同在控件包的“2008评分测试工程\”目录下,您可以直接修改这个窗体来实现对控件的操控

Option Strict Off
Option Explicit On
Friend Class 评分测试2008
  Inherits System.Windows.Forms.Form
  Dim 控件已经装载 As Boolean

  Private Sub 评分测试2008_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
    控件已经装载 = True
  End Sub
  Private Sub 评分测试2008_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load
    '对比特征文件名("")
    对比特征文件名称.Text = "对比特征文件名称:" & AxHLYYPF1.CompCharacterFileName("")
  End Sub

  Private Sub 评分测试2008_FormClosed(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
    '关闭 (True)
    AxHLYYPF1.Close_OCX(True)
    End
  End Sub

  Private Sub 打开通用版测试窗体_ClickEvent(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles 打开通用版测试窗体.ClickEvent
    Dim X As Object
    X = Shell(AxHLYYPF1.OCX_Path(True) & "\宏乐语音评分通用版调试.exe", AppWinStyle.NormalFocus)
  End Sub

  Private Sub 对比声音文件_ClickEvent(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles 对比声音文件.ClickEvent
    '对比声音文件 (App.Path + "\测试_不翼而飞.wav")
    AxHLYYPF1.CompVoiceFile(AxHLYYPF1.OCX_Path(True) & "\测试_不翼而飞.wav")
  End Sub

  Private Sub 录_ClickEvent(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles 录.ClickEvent
    AxHLYYPF1.Rocord(True)
  End Sub

  Private Sub 设声音文件为对比_ClickEvent(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles 设声音文件为对比.ClickEvent
    '设声音文件为对比 (App.Path + "\测试_不翼而飞.wav")
    AxHLYYPF1.EstablishVoiceFileNameToComp(AxHLYYPF1.OCX_Path(True) & "\测试_不翼而飞.wav")
  End Sub

  Private Sub 对比文件_ClickEvent(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles 对比文件.ClickEvent
    '禁止绘图
    AxHLYYPF1.Painting(False)
    AxHLYYPF1.Comp(AxHLYYPF1.OCX_Path(True) & "\录音特征曲线.bin")
    '允许绘图
    AxHLYYPF1.Painting(True)
  End Sub

  Private Sub 设_ClickEvent(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles 设.ClickEvent
    AxHLYYPF1.Establish(True)
  End Sub

  Private Sub 停止_ClickEvent(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles 停止.ClickEvent
    '停止自动录音
    AxHLYYPF1.AutoRecord(False)
  End Sub

  Private Sub 自动_ClickEvent(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles 自动.ClickEvent
    AxHLYYPF1.AutoRecord(True)
  End Sub

  Private Sub 播放录音_ClickEvent(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles 播放录音.ClickEvent
    AxHLYYPF1.Play(True)
  End Sub

  Private Sub 播放对比_ClickEvent(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles 播放对比.ClickEvent
    AxHLYYPF1.Play_Comp(True)
  End Sub


  Private Sub 最长录音时间_TextChanged(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles 最长录音时间.TextChanged
    If 控件已经装载 = True Then
      AxHLYYPF1.Max_Record_Timer(Val(最长录音时间.Text))
    End If
  End Sub

  Private Sub AxHLYYPF1_IsOver(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AxHLYYPF1.IsOver
    Dim 提示内容 As String
    提示内容 = "分数=" & AxHLYYPF1.Percentage(0) & vbCrLf
    提示内容 = 提示内容 & "音量=" & AxHLYYPF1.Volume(0) & vbCrLf
    提示内容 = 提示内容 & "录音特征文件名=" & AxHLYYPF1.RecordCharacterFileName("") & vbCrLf
    提示内容 = 提示内容 & "对比特征文件名=" & AxHLYYPF1.CompCharacterFileName("") & vbCrLf
    提示内容 = 提示内容 & "频率吻合率=" & AxHLYYPF1.FrequencyFitsTogetherRate(0) & vbCrLf
    If 身份鉴别.Checked = True Then
      提示内容 = 提示内容 & "频谱吻合率=" & AxHLYYPF1.FrequencyChartFitsTogetherRate(0) & vbCrLf
    End If
    提示内容 = 提示内容 & "字段数=" & AxHLYYPF1.WordNumber & vbCrLf
    结果.Text = 提示内容
  End Sub

  Private Sub 身份鉴别_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 身份鉴别.CheckedChanged
    If 身份鉴别.Checked = True Then
      AxHLYYPF1.DiscriminateBody(True)
    Else
      AxHLYYPF1.DiscriminateBody(False)
    End If
  End Sub

  Private Sub 允许F12键_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 允许F12键.CheckedChanged
    If 允许F12键.Checked = True Then
      AxHLYYPF1.OpenF12(True)
    Else
      AxHLYYPF1.OpenF12(False)
    End If
  End Sub

  Private Sub 反向_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 反向.CheckedChanged
    If 反向.Checked = True Then
      AxHLYYPF1.Reverse(True)
    Else
      AxHLYYPF1.Reverse(False)
    End If
  End Sub

  Private Sub 显示录音窗_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 显示录音窗.CheckedChanged
    If 显示录音窗.Checked = True Then
      AxHLYYPF1.Show_Record(True)
    Else
      AxHLYYPF1.Show_Record(False)
    End If
  End Sub

  Private Sub 显示录音波形_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 显示录音波形.CheckedChanged
    If 控件已经装载 = True Then
      If 显示录音波形.Checked = True Then
        AxHLYYPF1.Show_Transparent_Waveform(True)
      Else
        AxHLYYPF1.Show_Transparent_Waveform(False)
      End If
    End If
  End Sub
End Class



要获得良好的对比效果要注意:

    A.避免在噪音太大的环境录音。(当信噪比小于5倍,特征曲线将不准确)

    B.麦克风要避免直接受到嘴巴气流的冲击!(气流直接冲击麦克风会导致特征曲线残缺不齐)

    C.录音的起点与结束点必须包含整个句子(或单词)。


注册方式分为三种:

A.对应发行量不大的场合采用单机注册,(每台机器都要注册)费用是180元人民币/台电脑。
B.用于PC机的永久性注册费用为2.8万人民币(只需要注册一台开发主机)。
C.用于掌上电脑或学习机,由于代码无法加密(我们提供的是C++的DLL或原代码),费用定为150万人民币。

注册后的用户享受免费升级、以及有关《宏乐语音评分控件》的技术支持。

需要注册请汇款到下面的指定账号,将凭据(汇款交易号码)以及注册登记表发送到下面的信箱: 我们会返回您一个注册许可证。

银行账号:中国工商银行:9558 8036 0214 6943667 蔡泽宏

宏乐工作室信箱: hlgzs@21cn.net 或: hlgzs2@yahoo.com.cn  或: hlgzsnease@163.com

或:hlgzs2@sina.com 或:531923911@qq.com


常见问题解答:

问:控件能否在网站上使用?
答: A:如果要在服务器端分析,必须将客户端录好的Wav格式文件上传到服务器,然后在服务器启用《宏乐声纹对比控件》分析,得出结果,返回给用户(录音采样率为8K单声道)。在一个就是必须有权限在服务器端运行EXE文件或OCX控件(普通的虚拟主机不行)。
   B:而在客户端运行本控件,则需要在客户端安装本控件以及进行相应的操控。

问: shibie.Rocord(true);
  label1.Text = shibie.Percentage(100).ToString();
  这段代码的使用正确吗?为什么识别出来都是0分。
答:执行录音指令后,控件正在操作,但下一行的指令立刻就来取分数,取得的将是前一次的值;通常在“IsOver”事件中获取分数,不然要给个延时等待再读取分数。
(设计时双击本控件可以看到IsOver事件,然后在这个事件中插入分析完成后响应的代码。)


《宏乐芝麻开门》 《恒乐交响曲》 《中国方言》 《霓虹灯花式自动生成器》 其他软件作品

宏乐工作室 作者:蔡泽宏


宏乐工作室欢迎您!您是第个进入本页面,来自:美国的朋友