小编Dan*_*ark的帖子

使用System.Speech和Kinect

我正在为大学项目开发​​一个原型演讲文本字幕应用程序.我将在我的项目中使用手势识别,所以我认为使用Kinect作为麦克风源是一个好主意,而不是使用额外的麦克风.我的应用的想法是识别自发的演讲,如长而复杂的句子(我明白,语音听写不会是完美的).我看过许多Kinect语音示例,它引用了Microsoft.Speech,但没有引用System.Speech.由于我需要训练语音引擎并将DictationGrammar加载到语音识别引擎中,因此Microsoft.Speech是我的唯一选择.

我已经设法使用Kinect作为直接麦克风音频源,但由于我正在加载Kinect进行视频预览和手势识别,我无法将其作为直接麦克风访问.

这是直接访问麦克风而无需加载Kinect硬件进行手势等的代码,并且工作正常:

private void InitializeSpeech()
{
    var speechRecognitionEngine = new SpeechRecognitionEngine();
    speechRecognitionEngine.SetInputToDefaultAudioDevice();
    speechRecognitionEngine.LoadGrammar(new DictationGrammar());
    speechRecognitionEngine.RecognizeAsync(RecognizeMode.Multiple);
    speechRecognitionEngine.SpeechRecognized += (s, args) => MessageBox.Show(args.Result.Text);
}
Run Code Online (Sandbox Code Playgroud)

这是我需要在加载后通过Kinect访问访问源的地方,它根本没有做任何事情.我想这样做:

using (var audioSource = new KinectAudioSource())
{
    audioSource.FeatureMode = true;
    audioSource.AutomaticGainControl = false;
    audioSource.SystemMode = SystemMode.OptibeamArrayOnly;

    var recognizerInfo = GetKinectRecognizer();
    var speechRecognitionEngine = new SpeechRecognitionEngine(recognizerInfo.Id);

    speechRecognitionEngine.LoadGrammar(new DictationGrammar());
    speechRecognitionEngine.SpeechRecognized += (s, args) => MessageBox.Show(args.Result.Text);

    using (var s = audioSource.Start())
    {
        speechRecognitionEngine.SetInputToAudioStream(s, new SpeechAudioFormatInfo(EncodingFormat.Pcm, 16000, 16, 1, 32000, 2, null));
        speechRecognitionEngine.RecognizeAsync(RecognizeMode.Multiple);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以问题是,是否可以使用System.Speech而不是Microsoft.Speech与当前的Kinect SDK,以及我在第二个代码示例中做错了什么?

GetKinectRecognizer方法

private static …
Run Code Online (Sandbox Code Playgroud)

.net c# audio kinect system.speech.recognition

30
推荐指数
1
解决办法
5824
查看次数

Textblock.TextTrimming在网格内不起作用

我的布局有一个3列网格,每个网格的宽度都设置为Width="*".对于中间(第二)网格,我有另外3列网格,每个网格包含它自己的文本块,并且列网格宽度再次设置为Width="*".

调整窗口大小时,网格会按预期调整大小,但如果文本超出网格边界,则第3个文本块不会被修剪.我有文本框设置TextTrimming="WordEllipsis"TextWrapping="Wrap",并且由于某种原因没有强制执行属性.

这是我的一些代码:

布局网格:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition MinWidth="150" MaxWidth="300" Width="1*" />
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition MinWidth="150" MaxWidth="500" Width="1*" />
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="2*"/>
    </Grid.ColumnDefinitions>
</Grid>
Run Code Online (Sandbox Code Playgroud)

第二列代码:

<Grid Grid.Column="2" VerticalAlignment="Bottom" HorizontalAlignment="Left" Margin="5" Width="Auto">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>

    <TextBlock Text="{Binding Path=FeedItems.Count}" Foreground="White" FontSize="18" Width="Auto" FontWeight="SemiBold" />
    <TextBlock Text=" items from " Foreground="White" FontSize="18" Width="Auto" Grid.Column="1" />
    <TextBlock Text="{Binding Path=Name}" Foreground="White" FontSize="18" Grid.Column="2" TextTrimming="CharacterEllipsis" HorizontalAlignment="Left" Width="Auto" TextWrapping="NoWrap" ClipToBounds="True" /> …
Run Code Online (Sandbox Code Playgroud)

wpf grid gridview textblock texttrimming

8
推荐指数
1
解决办法
8722
查看次数