小编Eri*_*own的帖子

如何在C#中将语法(规则)和听写(言论自由)与SpeechRecognizer混合

我非常喜欢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)

c# speech-recognition sapi voice-recognition

11
推荐指数
1
解决办法
1万
查看次数

C PHP扩展对象持久性

我为我编写的服务器应用程序开发了一个PHP5客户端扩展,到目前为止它工作得很好,但它还不支持持久连接.由于这是我想在发布第一个稳定版本之前实现的东西,我正在搜索有关持久性的文档,并找到了持久分配例程(pemalloc,pecalloc等).我无法理解的是如何在新请求时检索持久分配的对象,我的意思是,假设连接的持久ID是:

<hostname>:<port>:<timeout>
Run Code Online (Sandbox Code Playgroud)

我如何保存(或检查它是否已经创建)连接对象(这是一个C结构,而不是zval或严格与PHP相关的任何东西)?我怎么能在以后找到它的ID?

PS:我知道PHP持久流(我已经研究了pfsockopen C源代码),但我使用的是C客户端库,所以我无法直接访问套接字或修改C客户端库以使用php流而不是普通套接字.

谢谢.

php c php-internals

11
推荐指数
1
解决办法
288
查看次数

单声道下的堆栈大小

我编写了一个很小的递归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)

.net mono recursion f#

10
推荐指数
1
解决办法
2095
查看次数

将输入流式传输到System.Speech.Recognition.SpeechRecognitionEngine

我试图从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()与麦克风一起工作正常.

谢谢,肖恩

c# sockets streaming speech-recognition sapi

8
推荐指数
2
解决办法
7398
查看次数

在Windows上使用Espeak SAPI/dll?

问题:我正在尝试使用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)

c c++ text-to-speech espeak

5
推荐指数
1
解决办法
4212
查看次数

带有原始输入 API 的额外鼠标按钮

我目前使用 RawInput 来获取鼠标输入,但它似乎没有检测到超过 3 个按钮。它说它也支持 X1 和 X2,但我的鼠标似乎都没有触发它们。我环顾四周,但在谷歌上没有找到任何关于如何使用所有其他鼠标按钮的信息。如果可能的话,我想找到一些东西,比如 RawInput,可以区分多个鼠标。看来我必须将 rawinput 与 HID 设置一起使用,但我不知道是否有一个标准的多鼠标按钮 HID 我可以读取或任何东西

mouse winapi raw-input

5
推荐指数
0
解决办法
848
查看次数

如何在Visual C#中打开连接之前检查COM端口是否存在

我需要在连接之前检查选定的COM端口是否存在(它给出了错误)我正在使用Visual Studio Express 2013 C#.或者,有没有办法隐藏该错误?

谢谢..~理查德

c# port serial-port exists visual-studio

5
推荐指数
3
解决办法
3万
查看次数

python scipy.stats.powerlaw否定指数

我想为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函数:

http://idlastro.gsfc.nasa.gov/ftp/pro/math/randomp.pro

python statistics scipy idl-programming-language

4
推荐指数
2
解决办法
4022
查看次数

如何在c ++中使用bitshift整数值

我知道这是一个常见的问题,我无法弄清楚为什么我会遇到这么多麻烦.我试图将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转换为二进制形式.它是否正确?如果是这样,我该如何解决?

提前致谢!

c++ idl-programming-language

4
推荐指数
1
解决办法
689
查看次数

我需要帮助显示C#的多个文本框?

我正在尝试使用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)

c# textbox

3
推荐指数
1
解决办法
213
查看次数