我非常喜欢Microsofts最新的语音识别(和SpeechSynthesis)产品.
http://msdn.microsoft.com/en-us/library/ms554855.aspx
http://estellasays.blogspot.com/2009/04/speech-recognition-in-cnet.html
但是我觉得在使用语法时我有点受限.
不要误解我的语法,语法识别确切地指出了要注意的单词/短语,但是如果我希望它能够识别出一些我没有理解的东西呢?或者我想解析一个半预定命令名和半随机字的短语?
例如..
情景A - 我说"谷歌[漏油事件]",我希望它用括号中的搜索结果打开谷歌,这可能是任何东西.
场景B - 我说"找到[曼彻斯特]",我想让它在谷歌地图或任何其他未预先确定的地方搜索曼彻斯特
我希望它知道'谷歌'和'定位'是命令,它是参数之后的东西(可能是任何东西).
问题:有没有人知道如何混合使用预先确定的语法(语音识别应该识别的单词)和不在预定语法中的单词?
代码片段..
using System.Speech.Recognition;
...
...
SpeechRecognizer rec = new SpeechRecognizer();
rec.SpeechRecognized += rec_SpeechRecognized;
var c = new Choices();
c.Add("search");
var gb = new GrammarBuilder(c);
var g = new Grammar(gb);
rec.LoadGrammar(g);
rec.Enabled = true;
...
...
void rec_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
if (e.Result.Text == "search")
{
string query = "How can I get a word not defined in Grammar recognised and passed into here!";
launchGoogle(query);
} …
Run Code Online (Sandbox Code Playgroud) 我为我编写的服务器应用程序开发了一个PHP5客户端扩展,到目前为止它工作得很好,但它还不支持持久连接.由于这是我想在发布第一个稳定版本之前实现的东西,我正在搜索有关持久性的文档,并找到了持久分配例程(pemalloc,pecalloc等).我无法理解的是如何在新请求时检索持久分配的对象,我的意思是,假设连接的持久ID是:
<hostname>:<port>:<timeout>
Run Code Online (Sandbox Code Playgroud)
我如何保存(或检查它是否已经创建)连接对象(这是一个C结构,而不是zval或严格与PHP相关的任何东西)?我怎么能在以后找到它的ID?
PS:我知道PHP持久流(我已经研究了pfsockopen C源代码),但我使用的是C客户端库,所以我无法直接访问套接字或修改C客户端库以使用php流而不是普通套接字.
谢谢.
我编写了一个很小的递归F#代码来查看我可以在.NET/Mono下的堆栈中放入多少级别的递归.它只是在精确的2次幂时打印递归深度,所以我发现最大深度在2的范围内.
我在一个具有定义的堆栈空间量的线程中启动代码System.Threading.Thread (ThreadStart, int)
.在.Net下,每个递归级别似乎需要大约100个字节,而我可以在2G堆栈上获得大约1600万个级别.Mono下的内存使用情况大致相似,但是我只能获得大约3万个级别.增加传递给Thread
过去的堆栈大小值600000
不会增加递归深度.
ulimit
报告堆栈大小限制为1G.
一个明显的解释是Mono不会服从第二个论点,Thread
如果它太大了.有没有人知道如何说服Mono分配一个大堆栈?
代码是微不足道的,但它只是在某些人关心的情况下:
let rec f i =
if popcount i = 1 then // population count is one on exact powers of 2
printf "Got up to %d\n" i
stdout.Flush ()
if i = 1000000000 then 0 else 1 + f (i+1)
Run Code Online (Sandbox Code Playgroud) 我试图从TCP套接字在C#中进行"流式"语音识别.我遇到的问题是SpeechRecognitionEngine.SetInputToAudioStream()似乎需要一个可以寻找的定义长度的Stream.现在,我能想到的唯一方法就是在更多输入进来时在MemoryStream上重复运行识别器.
这里有一些代码来说明:
SpeechRecognitionEngine appRecognizer = new SpeechRecognitionEngine();
System.Speech.AudioFormat.SpeechAudioFormatInfo formatInfo = new System.Speech.AudioFormat.SpeechAudioFormatInfo(8000, System.Speech.AudioFormat.AudioBitsPerSample.Sixteen, System.Speech.AudioFormat.AudioChannel.Mono);
NetworkStream stream = new NetworkStream(socket,true);
appRecognizer.SetInputToAudioStream(stream, formatInfo);
// At the line above a "NotSupportedException" complaining that "This stream does not support seek operations."
Run Code Online (Sandbox Code Playgroud)
有谁知道怎么解决这个问题?它必须支持某种类型的流输入,因为它使用SetInputToDefaultAudioDevice()与麦克风一起工作正常.
谢谢,肖恩
问题:我正在尝试使用espeak文本到语音引擎.所以我让它在Linux上运行得很好(下面的代码).现在我也希望将这个基本程序移植到Windows,但这几乎是不可能的......
部分问题是windows dll只允许AUDIO_OUTPUT_SYNCHRONOUS,这意味着它需要回调,但我无法弄清楚如何从回调中播放音频......首先它崩溃了,然后我意识到,我需要一个回调函数,现在我在回调函数中获取数据,但我不知道如何播放它...因为它既不是一个wav文件,也不像Linux那样自动播放.
sourceforge网站相当无用,因为它基本上说使用SAPI版本,但是没有关于如何使用sapi espeak dll的例子......
无论如何,这是我的代码,任何人都可以帮忙吗?
#ifdef __cplusplus
#include <cstdio>
#include <cstdlib>
#include <cstring>
#else
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#endif
#include <assert.h>
#include <ctype.h>
//#include "speak_lib.h"
#include "espeak/speak_lib.h"
// libespeak-dev: /usr/include/espeak/speak_lib.h
// apt-get install libespeak-dev
// apt-get install libportaudio-dev
// g++ -o mine mine.cpp -lespeak
// g++ -o mine mine.cpp -I/usr/include/espeak/ -lespeak
// gcc -o mine mine.cpp -I/usr/include/espeak/ -lespeak
char voicename[40];
int samplerate;
int quiet = 0;
static char genders[4] = {' ','M','F',' '};
//const char *data_path …
Run Code Online (Sandbox Code Playgroud) 我目前使用 RawInput 来获取鼠标输入,但它似乎没有检测到超过 3 个按钮。它说它也支持 X1 和 X2,但我的鼠标似乎都没有触发它们。我环顾四周,但在谷歌上没有找到任何关于如何使用所有其他鼠标按钮的信息。如果可能的话,我想找到一些东西,比如 RawInput,可以区分多个鼠标。看来我必须将 rawinput 与 HID 设置一起使用,但我不知道是否有一个标准的多鼠标按钮 HID 我可以读取或任何东西
我需要在连接之前检查选定的COM端口是否存在(它给出了错误)我正在使用Visual Studio Express 2013 C#.或者,有没有办法隐藏该错误?
谢谢..~理查德
我想为scipy.stats.powerlaw例程提供负指数,例如a = -1.5,以便绘制随机样本:
"""
powerlaw.pdf(x, a) = a * x**(a-1)
"""
from scipy.stats import powerlaw
R = powerlaw.rvs(a, size=100)
Run Code Online (Sandbox Code Playgroud)
为什么需要> 0,如何提供负a以生成随机样本,以及如何提供归一化系数/变换,即
PDF(x,C,a) = C * x**a
Run Code Online (Sandbox Code Playgroud)
文档在这里
http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.powerlaw.html
谢谢!
编辑:我应该补充一点,我正在尝试复制IDL的RANDOMP函数:
我知道这是一个常见的问题,我无法弄清楚为什么我会遇到这么多麻烦.我试图将IDL代码中的一行转换为c ++
IDL:
for i = 0,7 do begin
b = ishfy(b,1)
print,b
endfor
Run Code Online (Sandbox Code Playgroud)
我的C++代码:
for(int i = 0; i < 7; i++)
{
b = b << 1;
cout << b;
}
Run Code Online (Sandbox Code Playgroud)
我的初始b是255,我希望收到254,252等.相反,我的第一位移位返回510.我认为我的问题是在移位之前没有将b转换为二进制形式.它是否正确?如果是这样,我该如何解决?
提前致谢!
我正在尝试使用WinForms制作邮件标签程序,您可以在其中输入您的姓名,州,城市等,然后单击按钮,它会显示您在每个框中输入的所有文本并将其显示在一个标签上.我很接近但是当我运行我的程序时,这些单词之间没有空格.这是我的代码:
namespace Mail_Label_Program
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnDisplay_Click(object sender, EventArgs e)
{
lblMessage.Text = txtFirst.Text + txtLast.Text;
}
private void btnExit_Click(object sender, EventArgs e)
{
//This closes the program.
this.Close();
}
private void btnClear_Click(object sender, EventArgs e)
{
//This clears all textbox forms.
txtFirst.Text = string.Empty;
txtLast.Text = string.Empty;
txtCity.Text = string.Empty;
txtStreet.Text = string.Empty;
txtState.Text = string.Empty;
txtZip.Text = string.Empty;
}
}
}
Run Code Online (Sandbox Code Playgroud)