本软件利用了百度语音识别提供的接口,自行开发出的一个在线的语音识别软件。所以,制作之前需要去百度语音识别的网站去注册一个项目,免费的除非你的需求量特别大不然不需要付费。百度语音识别地址
然后就需要自己写代码去解决以下问题
- 获取麦克风输入的语音
- 发送到百度语音识别的接口
- 得到返还的信息识别。
获取麦克风输入的语音
要获取麦克风的输入,需要调用一些WindowsAPI及其他的东西。下面就慢慢梳理 我会分散的梳理,整合需要自己理解着去整合
首先,我们获取麦克风,使用winmm.dll
//调用wavein的dll
[DllImport("winmm.dll")]
//获取有多少可用输入设备
public static extern int waveInGetNumDevs();
[DllImport("winmm.dll")]
//增加一个缓冲区
public static extern int waveInAddBuffer(IntPtr hwi, ref WaveHdr pwh, UInt32 cbwh);
[DllImport("winmm.dll")]
//关闭麦克风
public static extern int waveInClose(IntPtr hwi);
[DllImport("winmm.dll")]
//打开麦克风
public static extern int waveInOpen(out IntPtr phwi, UInt32 uDeviceID, ref WaveFormatEx lpFormat, WaveDelegate dwCallback, UInt32 dwInstance, UInt32 dwFlags);
[DllImport("winmm.dll")]
//标记为可用的缓冲区
public static extern int waveInPrepareHeader(IntPtr hWaveIn, ref WaveHdr lpWaveInHdr, UInt32 uSize);
[DllImport("winmm.dll")]
//标记为不可用的缓冲区
public static extern int waveInUnprepareHeader(IntPtr hWaveIn, ref WaveHdr lpWaveInHdr, UInt32 uSize);
[DllImport("winmm.dll")]
//把缓冲区内容重置
public static extern int waveInReset(IntPtr hwi);
[DllImport("winmm.dll")]
//开始录制
public static extern int waveInStart(IntPtr hwi);
[DllImport("winmm.dll")]
//停止录制
public static extern int waveInStop(IntPtr hwi);
然后 我们要把接收到的波形数据放入到一个缓冲区里面
[StructLayout(LayoutKind.Sequential)]
//接受的波形数据放入的缓冲区
public struct WaveHdr
{
public IntPtr lpData;//缓冲区
public UInt32 dwBufferLength;//缓冲区长度
public UInt32 dwBytesRecorded;//某一刻读取到了多少字节的数据
public UInt32 dwUser;//自定义数据
public UInt32 dwFlags;
public UInt32 dwLoops;//是否循环
public IntPtr lpNext;//链表的下一缓冲区
public UInt32 reserved;//没实际意义
}
[StructLayout(LayoutKind.Sequential)]
//波形格式
public struct WaveFormatEx
{
public UInt16 wFormatTag;//波形的类型
public UInt16 nChannels;//通道数(1,单声道 2,立体音)
public UInt32 nSamplesPerSec;//采样率
public UInt32 nAvgBytesPerSec;//字节率
public UInt16 nBlockAlign;
public UInt16 wBitsPerSample;//每个样多少位
public UInt16 cbSize;//长度
}
但是在这里我们需要一个delegate的委托事件,其作用是在缓冲区满了或者waveinopen和waveinclose的时候被调用。
public delegate void WaveDelegate(IntPtr hwi, UInt32