語音輸入源碼
A. C#怎樣實現語音聊天視頻功能(要具體代碼)
給你一個winform 的例子,對你可能有用!
涉及技術
動態調用Com對象(全反射、沒有引用com ocx)
取得系統存在的各種語言引擎
使用引擎進行朗讀
使用引擎進行保存聲音
程序圖列:
主要功能描述
實列變數等,構造函授等
取得所有的 識別對象模塊集合,放入下拉框
代碼
object _spVoiceCls =
null; //保存朗讀用的 SAPI.SpVoice
const
int SpFlags =
1; //SpeechVoiceSpeakFlags.SVSFlagsAsyn
object _oISpeechObjectTokens =
null; //保存 SAPI.ISpeechObjectTokens 就是系統有的語音引擎集合
int TokensCount =
0; // 語音引擎集合 數
DictionaryEntry[] _deTokens=null; //榜定下拉框用的
public MainForm()
{
InitializeComponent();
this.HandleDestroyed +=
new EventHandler(Form1_HandleDestroyed);
}
private
void Form1_Load(object sender, EventArgs e)
{
InitSAPI();
}
系統事件:程序載入
取得所有的 識別對象模塊集合,放入下拉框
代碼
void InitSAPI()
{
//創建語音對象朗讀用
_spVoiceCls = CreateComObject("SAPI.SpVoice");
if (_spVoiceCls == null)
{
MessageBox.Show("您的系統沒有,微軟語音組件");
Application.Exit();
}
else
{//取得所有的 識別對象模塊集合
_oISpeechObjectTokens = CallComMethod("GetVoices", _spVoiceCls); //取得SAPI.ISpeechObjectTokens
//識別對象集合 Count;
object r = GetComPropery("Count", _oISpeechObjectTokens);
if (r is int)
{
TokensCount = (int)r;
if (TokensCount > 0)
{
//取得全部語音識別對象模塊,及名稱,以被以後使用
_deTokens = new DictionaryEntry[TokensCount];
for (int i = 0; i < TokensCount; i++)
{
//從集合中取出單個 識別對象模塊
object oSpObjectToken = CallComMethod("Item", _oISpeechObjectTokens, i); //返回 SAPI.SpObjectToken
//取名稱
string Description = CallComMethod("GetDescription", oSpObjectToken) as string;
//放到 DictionaryEntry 對象中,key 是 識別對象模塊,value 是名稱
_deTokens= new DictionaryEntry(oSpObjectToken, Description);
}
//邦定到 下拉框
cboxTokens.DisplayMember = "Value";
cboxTokens.ValueMember = "Key";
cboxTokens.DataSource = _deTokens;
cboxTokens.SelectedIndex = 0;
}
}
}
}
用戶事件:朗讀
朗讀輸入的文本信息
代碼
private void btnSynthesis_Click(object sender, EventArgs e)
{
string msg = rTxtMsg.Text.Trim();
if (msg.Length != 0)
{
if (_spVoiceCls != null)
{
//設置語言引擎
SetComProperty("Voice", _spVoiceCls, cboxTokens.SelectedValue);
//調用Speak 函數,msg 是要播放的文本,1 是非同步播放,因為是非同步的 com 對象不立刻釋放
CallComMethod("Speak", _spVoiceCls, msg, SpFlags);
}
}
}
用戶事件:保存聲音
將輸入的文本信息生成音頻文件保存到文件
代碼
private void Save()
{
string msg = rTxtMsg.Text.Trim();
if (msg.Length != 0)
{
using (SaveFileDialog sfd = new SaveFileDialog())
{
sfd.Filter = "wav 文件 (*.wav)|*.wav";
sfd.RestoreDirectory = true;
if (sfd.ShowDialog() == DialogResult.OK)
{
/*
Enum SpeechStreamFileMode;
SSFMOpenForRead = 0;
SSFMOpenReadWrite = 1;
SSFMCreate = 2;
SSFMCreateForWrite = 3;
*/
int SpFileMode = 3;// SpeechStreamFileMode.SSFMCreateForWrite
object oSpFileStream = CreateComObject("SAPI.SpFileStream"); //創建 SAPI.SpFileStream
object oSpVoice = CreateComObject("SAPI.SpVoice"); //創建 SAPI.SpVoice
try
{
CallComMethod("Open", oSpFileStream, sfd.FileName, SpFileMode, false); //打開流
SetComProperty("Voice", oSpVoice, cboxTokens.SelectedValue); //設置 Voice 屬性,讓誰朗讀
SetComProperty("AudioOutputStream", oSpVoice, oSpFileStream); //設置流
CallComMethod("Speak", oSpVoice, msg, SpFlags); //調用 Speak
CallComMethod("WaitUntilDone", oSpVoice, Timeout.Infinite); //等
CallComMethod("Close", oSpFileStream); //關閉流
MessageBox.Show("保存成功");
}
finally
{
Marshal.ReleaseComObject(oSpVoice);
Marshal.ReleaseComObject(oSpFileStream);
}
}
}
}
}
private void btnSave_Click(object sender, EventArgs e)
{
try
{
btnSave.Enabled = false;
Save();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
btnSave.Enabled = true;
}
}
調用com組件,功能函數
自己寫的一些幫助函數可以方便調用反射,要不太郁悶(如果是VB 就不用如此費盡了)
#region 調用com組件,功能通用函數
/// <summary>
/// 設置屬性
/// </summary>
/// <param name="name"></param>
/// <param name="o"></param>
/// <param name="vlaue"></param>
private static void SetComProperty(string name, object o, object vlaue)
{
Type t = o.GetType();
t.InvokeMember(name, BindingFlags.Instance | BindingFlags.SetProperty, null, o, new
object[] { vlaue });
}
/// <summary>
/// 取得屬性
/// </summary>
/// <param name="name"></param>
/// <param name="o"></param>
/// <returns></returns>
private static object GetComPropery(string name, object o)
{
Type t = o.GetType();
return t.InvokeMember(name, BindingFlags.Instance | BindingFlags.GetProperty, null, o, null);
}
/// <summary>
/// 調用方法函授
/// </summary>
/// <param name="name"></param>
/// <param name="o"></param>
/// <param name="parms"></param>
/// <returns></returns>
private static object CallComMethod(string name, object o, params object[] parms)
{
Type t = o.GetType();
return t.InvokeMember(name, BindingFlags.Instance | BindingFlags.InvokeMethod, null, o, parms);
}
/// <summary>
/// 創建 com 對象
/// </summary>
/// <param name="FromProgID"></param>
/// <returns></returns>
private static object CreateComObject(string FromProgID)
{
Type comType = Type.GetTypeFromProgID(FromProgID);
object rVar = null;
if (comType != null)
rVar = System.Activator.CreateInstance(comType);
return rVar;
}
#endregion
釋放com對象
很簡單的就一行即可
代碼
void Form1_HandleDestroyed(object sender, EventArgs e)
{
//釋放com對象
Marshal.ReleaseComObject(_spVoiceCls);
}
B. 求語音識別的源代碼,要求是用C#或C語言編寫,能夠識別一些基本的漢語發音
windows vista 和win7 都自帶語音識別 可以搜一下相關技術或者可以試用一下
C. 如何找到軟體的源代碼
軟體的源代碼,基本是沒有辦法的,因為軟體運行時都是編譯後的程序,也就是把源代碼翻譯成計算機能執行的代碼,一般的破解是破解功能限制,注冊限制,反編譯也只是能得到匯編代碼,也很難看懂的。
D. 跪求凌陽61單片機設計的語音識別系統的主程序
凌陽61單片機實現RCL,由C語言編寫,凌陽61板實現功能-,C++ Builder,單片機開發/SCM
autocad預覽控制項.不需要安裝autocad即可在界面瀏覽-,Delphi,繪圖程序/Graph Drawing
本程序為基於matlab的小波分析的應用實例。-,matlab,界面編程/GUI Develop
高通brew平台上的BUIW控制項中的ImageStaticWidget使用示例-,Visual C++,Static控制項/Static control
客觀合理化一天一片人體豆腐花規范化廣泛非官方大哥大法國-,C++ Builder,界面編程/GUI Develop
本程序為基於matlab的插值分析與Euler解常微分方程的應用實例。-,matlab,界面編程/GUI Develop
用ASP.NET做的酒店管理系統,該系統主要處理酒店日常運營中涉及的客戶信息.-,ASP,其他書籍/Other Books
EVC 讀寫INI文件 EVC 讀寫INI文件EVC 讀寫INI文件EVC 讀寫INI文件EVC 讀寫INI文件-,Visual C++,文件操作/File Operate
本程序介紹基於matlab的平方根及改進平方根演算法。-,matlab,按鈕控制項/Button control
高通brew平台上的BUIW控制項中的slider的示常式序-,Visual C++,界面編程/GUI Develop
塔頂地無可奈何花落去 人威風掃地雪 可耕地枯無可奈何花落去 無可奈何花落去餓-,Visual C++,GDI/圖象編程/GDI-Bitmap
oblog31sql oblog31sql oblog31sql oblog31sql oblog31sql-,ASP,Web伺服器/Web Server
MATLAB實現簡單圖象處理的程序,在matlab2006a上通過-,matlab,matlab常式/matlab
源碼、運行程序、幫助文件、必須的資料庫文件-,Windows_Unix,C#編程/CSharp
dos下的TCP/IP棧庫函數,並提供了多種tcp/ip編程demo。 -,DOS,TCP/IP協議棧/TCP/IP Stack
MATLAB進入時顯示的圖標的程序實現,有動畫效果!-,matlab,matlab常式/matlab
地方官梵蒂岡地方官法 方法方法方法方法方法 -,Unix_Linux,TreeView控制項/TreeView
幾個matlab的編程實例,對初學者有一定的幫助。-,matlab,界面編程/GUI Develop
用ASP.NET做的客戶管理系統,該系統以客戶管理中涉及的銷售管理,合同管理為主體.-,ASP,其他書籍/Other Books
畢畢剝剝畢畢剝剝爸爸 畢畢剝剝畢畢剝剝爸爸 -,DOS,Static控制項/Static control
將資料庫的資料轉檔到EXCEL里進行保存-,Delphi,其他小程序/Other windows programs
數字圖像中隊圖像進行模板匹配演算法之前的預處理演算法!-,Visual C++,圖形/文字識別/Graph Recognize
存車處存車處存車處廠 滴滴答答滴滴答答得到 -,DOS,編輯框/EditBox
實數編碼GA,也是從網上下載的。非要上傳5個才能下載,哎,實在是沒辦法啊,這個也不知道能不能運行,不能的話請不要罵我哦,謝謝!!-,Visual C++,人工智慧/AI-NN-PR
DS1302+AT89C2051的LED鍾,可以顯示年、周、月、日、小時、分鍾、秒-,TEXT,其他小程序/Other windows programs
可耕地 唇形枯 要一地三三大哥有在一碼元表的有遙有-,Visual C++,TreeView控制項/TreeView
用java寫的遺傳演算法的例子,比較簡單,如果解壓縮的時候需要密碼的話,應該是「1」。寫的比較簡單。是老早以前寫的了。-,Java,人工智慧/AI-NN-PR
匯編語言,用C51單片機實現交通燈控制!二極體模擬發光!-,Asm,單片機開發/SCM
通過串口控制步進電機控制器,實現聯絡,速度控制,步長-,Visual C++,串口編程/Com Port
絕佳的Tab View控制項的方式之一,VC++6.0經過運行調試的,可直接使用-,Visual C++,TreeView控制項/TreeView
以某中小規模汽車維修廠為案例,用ASP.NET做的倉庫管理系統.-,ASP,其他書籍/Other Books
關機程序。。。。。。。。。。。。。。。。。-,Visual C++,Windows編程/Windows Develop
絕佳的Tab View控制項的方式之二,VC++6.0經過運行調試的,可直接使用-,Visual C++,界面編程/GUI Develop
在VC6下基於OpenCV的輪廓檢測程序,其中圖像的二值化操作基於Canny和自適應閾值。通過trackbar來實現不同情況下的輪廓檢測。-,Visual C++,圖形/文字識別/Graph Recognize
絕佳的Tab View控制項的方式之三,VC++6.0經過運行調試的,可直接使用-,Visual C++,界面編程/GUI Develop
用於首先獲取需要下載的文件的大小,然後將其分塊下載。-,Java,網路編程/WinSock-NDIS
用csocket模擬聊天室,可以在一台機子上模擬,也可以在不同機子上-,Visual C++,網路編程/WinSock-NDIS
這個好象也是從網路上找到一個基本遺傳演算法的例子,解壓縮的時候如果需要密碼的話,應該是「1」。-,Visual C++,人工智慧/AI-NN-PR
本程序是運用java 語言 編寫一款查看 網站源文件的程序 -,Java,其他/Other systems
使用C語言實現菜單控制的源程序,實現了學生成績的管理.-,C-C++,界面編程/GUI Develop
在打開圖像時,點擊圖像可在打開對話框中實時看到預覽,絕好.-,Visual C++,界面編程/GUI Develop
用ASP.NET做的合同管理系統,該系統包括合同進展控制模塊,員工管理模塊,客戶管理模塊,項目管理模塊,合同管理模塊和合同統計模塊等.-,ASP,其他書籍/Other Books
語音識別與合成工具箱.具有如下功能:時域分析,頻域分析,LPC分析與合成等.-,matlab,matlab常式/matlab