質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.75%

  • C#

    6565questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Visual Studio

    1699questions

    Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

  • UI

    97questions

    UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。

音声認識を用いたC#のプログラミングとUIの作成について

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 753

BCM

score 1

前提・実現したいこと

現在、音声認識を利用したディスクトップアプリケーションを作成しています。
どのようなものかといいますと声でiPhoneを操作できる「Siri」のようにディスクトップ上でも声を使い、アプリを立ち上げる(終了させる)操作が出来るというものです。
いろいろ調べながら基礎的なプログラムは完成したのですがUIの作成に手間取ってしまい皆様のお力を貸してもらいたいです。

操作手順としては、
1.起動したいアプリを指定のBOXにD&D
2.そのアプリを起動するための起動ワード・終了ワードを打ち込み登録ボタンを押す
3.登録されたアプリの情報は、リストに登録されユーザーが任意に登録した起動ワードやパスを変更、又は削除できる。

以上のようなものを目指して調べながら作成していたのですがうまくいかず作成が止まってしまっています。
作成例、またはヒントを教えてほしいです。
よろしくお願いします。


下の画像は完成イメージ図になります。
イメージ図に記載し忘れていますが起動・終了するための言葉を入力するBOXと誤って別のアプリをD&Dしてしまったものを「取り消す」ボタンも作成したいと思っています。

完成イメージ図

以下作成したプログラミンです。
grammar.xml」が辞書ファイルになります。

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Speech.Recognition;
using System.Xml;
using System.Diagnostics;
using System.Speech;


namespace xxx
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        { 

    SpeechRecognitionEngine engine = new SpeechRecognitionEngine();
    engine.SpeechRecognized += delegate(object sender, SpeechRecognizedEventArgs e)
     {
         int hour = DateTime.Now.Hour;  //現在時刻(hour)を答える
         string min = DateTime.Now.Minute.ToString("d"); //現在時刻(min)を答える
         {
             if (e.Result.Confidence > 0.4f) //音声の聞き取り精度(0.1~1.0f)
                    switch (e.Result.Text)
                    {

                     //時間
                     case "今何時"://ここに命令
                         if (hour < 13)
                         {
                             //am
                             System.Diagnostics.Process.Start(@"C:\Users\xxx\Desktop\sozai\toki\hour\am.wav");
                             System.Threading.Thread.Sleep(1000);
                             System.Diagnostics.Process.Start(@"C:\Users\xxx\Desktop\sozai\toki\hour\" + hour + ".wav");
                             System.Threading.Thread.Sleep(500);
                             System.Diagnostics.Process.Start(@"C:\Users\xxx\Desktop\sozai\toki\hour\時.wav");
                             System.Threading.Thread.Sleep(1000);
                             System.Diagnostics.Process.Start(@"C:\Users\xxx\Desktop\sozai\toki\min\" + min + ".wav");
                             System.Threading.Thread.Sleep(1200);
                             System.Diagnostics.Process.Start(@"C:\Users\xxx\Desktop\sozai\toki\min\分.wav");
                         }
                         else
                         {
                             //pm
                             System.Diagnostics.Process.Start(@"C:\Users\xxx\Desktop\sozai\toki\hour\" + hour + ".wav");
                             System.Threading.Thread.Sleep(1000);
                             System.Diagnostics.Process.Start(@"C:\Users\xxx\Desktop\sozai\toki\hour\" + hour + ".wav");
                             System.Threading.Thread.Sleep(500);
                             System.Diagnostics.Process.Start(@"C:\Users\xxx\Desktop\sozai\toki\hour\時.wav");
                             System.Threading.Thread.Sleep(1000);
                             System.Diagnostics.Process.Start(@"C:\Users\xxx\Desktop\sozai\toki\min\" + min + ".wav");
                             System.Threading.Thread.Sleep(1200);
                             System.Diagnostics.Process.Start(@"C:\Users\xxx\Desktop\sozai\toki\min\分.wav");
                         }
                         break;


                     case "ワード"://ここに命令
                         System.Diagnostics.Process.Start(@"C:\xxx\...");
                       break;

                     case "エクセル"://ここに命令
                        System.Diagnostics.Process.Start(@"C:\xxx\...");
                        break;

                     case "パワポ"://ここに命令
                     case "パワーポイント":
                         System.Diagnostics.Process.Start(@"C:\xxx\...");
                         break;

            case "〇〇終了"://ここに命令
                     case "〇〇閉じる":
                         System.Diagnostics.Process.Start(@"C:\xxx\...");
                         Application.Exit(); //このアプリを終了する
                         break;




                 }
         }
     };

    Grammar g = new Grammar(@"C:\Users\xxx\Documents\Visual Studio 2015\Projects\xxx\grammar.xml", "command");
    engine.LoadGrammar(g);

    engine.LoadGrammar(new DictationGrammar());
    engine.SetInputToDefaultAudioDevice();
    engine.RecognizeAsync(RecognizeMode.Multiple);
    }
    }

    }
}

grammar.xml

<?xml version="1.0" encoding="UTF-8"?>
<grammar xml:lang="ja-JP" root="command" tag-format="semantics/1.0" xmlns="http://www.w3.org/2001/06/grammar" version="1.0">

  <rule scope="public" id="command">

    <one-of>
      <item>ワード</item>
      <item>エクセル</item>
      <item>パワポ</item>
      <item>パワーポイント</item>
      <item>〇〇終了</item>
   <item>〇〇閉じる</item>

    </one-of>

  </rule>

</grammar>

補足情報(言語/FW/ツール等のバージョンなど)

開発環境:visualstudio2015
開発言語:C#
OS:Windows8.1

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • YAmaGNZ

    2018/01/06 09:17

    ぱっと見た感じUI部分のソースは全くありませんが、何がうまくいかないのですか?

    キャンセル

  • BCM

    2018/01/06 11:58

    UI部分のソースは、消してあります。

    キャンセル

  • BCM

    2018/01/06 12:03

    UI部分のソースは、書き込んでいましたが試行錯誤しているうちに挙動がおかしくなってしまったので消してあります。うまくいかない点は、アプリをD&Dしてパスを取得する部分がわかりません。

    キャンセル

回答 1

checkベストアンサー

+1

c# ドラッグ&ドロップ ファイル名
こちらは参考になりませんか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/09 19:19

    ご提示いただいたサイトを参考に書き換えたところ、D&Dにてパスを取得することが出来ました。
    ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.75%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    pythonのエラー

    testThreadが見つからないというメッセージが出てきたのですが、どこに問題があるのでしょうか? よろしくお願いします コード #-*- coding utf-8-*-

  • 解決済

    【C#】エクスプローラを起動した直後に画面ハードコピー

    C#によるフォームアプリケーションを作成しており、ボタンを押すとエクスプローラがたちあがり、ハードコピーをする、という機能を持つものを作成しております。 エクスプローラを立ち

  • 解決済

    BackgroundWorkerについて

    BackgroundWorkerでの処理中にメッセージボックスを表示させると、バックグラウンドの処理が止まってしまいます。 メッセージボックス表示中もバックグラウンドの処理を

  • 解決済

    [Flask] ボタンでスレッドの開始と終了をコントロールさせる方法

     やりたいこと フォーム入力でなにかしらwebサービスのログイン情報を登録。 登録した情報の一覧画面で、アカウント情報の横にはボタンがあって、 開始ボタンを押したら何かしらの

  • 解決済

    C# プロセス内に残っているExcelを終了させたい

    いつもお世話になっております。 現在エクセルを取込処理を組んでいるんですが、取り込んだエクセルがプロセス内に残っている状態になっております。一応、エクセルをクローズさせる処理は組

  • 解決済

    特定のexeのPIDを取得する方法について

    前提・実現したいこと 現在、こちらのサイトを参考にしながら、C#で特定のexeのPIDを取得しようとしています。 発生している問題・エラーメッセージ 下記のソースコードに

  • 解決済

    Pythonのthreadingにおける、終了時の処理

    前提・実現したいこと Pythonを使って、動画や画像を表示するGUIを作っています。その中で、みなさまのご支援を頂ながらカメラの画像を取り込んで再生できるところまで来ました。

  • 受付中

    WPFでawait Task.RunにしたらSTAエラーになっています

    こんにちは。  Windows10でWPFのアプリケーションを開発しています。  Visual Studio 2015 Communityを使っています。  前提・実現したいこ

同じタグがついた質問を見る

  • C#

    6565questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Visual Studio

    1699questions

    Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

  • UI

    97questions

    UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。