Xamarin.Android에서 간단한 음성 인식 샘플
Xamarin.Forms 사용하지 않으면 Xamarin 할 의미가 없다는 목소리도 들리지만
우선, 초보자로서는 Xamarin.Android에서 음성 인식 사용하는 샘플로부터 시작해 보겠습니다.
고전 한 것으로, Android 측의 음성 인식은 곧 움직여 주었습니다만,
OnActivityResult에서 결과를받을 수 없습니다. . .
다음 줄을 삽입하여 해결했습니다.
public event EventHandler<PreferenceManager.ActivityResultEventArgs> ActivityResult = delegate { };
이게 뭐야? ?ActivityResult를 빈 메서드로 만드는 것 같습니다.
아시는 분 코멘트 기다리고 있습니다. . .
이하, 상세합니다.
개발 환경
우선 개발 환경입니다.
OS: Windows10
IDE: VisualStudio2017
Xamarin: 4.8
Xamarin.Android SDK: 8.1.0.24
참고원
아래의 기사를 참고로 하고 있습니다.
【Xamarin.Forms】 음성 인식 사용법
h tps:// 퀵했다. 소 m/미c 로와베 PC/있어 MS/40b1016cf84 에어 89C4 그림 d1
우이
UI 쪽은 TextView와 Button 1개씩의 간단한 것
소스 코드
Main.axml<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/relativeLayout1"
android:background="#545454">
<TextView
android:text="This is sample of Speech Recognize."
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/txt1"
android:layout_marginLeft="10dp"
android:textStyle="bold"
android:textColor="@android:color/white"
android:layout_marginTop="10dp"
android:layout_centerHorizontal="true" />
<Button
android:text="Start"
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:width="165dp"
android:layout_below="@id/txt1"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:layout_centerHorizontal="true" />
</RelativeLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/txt2" />
</LinearLayout>
MainActivity.csusing System;
using Android.App;
using Android.Widget;
using Android.Content;
using Android.OS;
using Android.Speech;
using Android.Preferences;
namespace App1
{
[Activity(Label = "Speech Recognize Sample App", MainLauncher = true)]
public class MainActivity : Activity
{
#region Constant, MainActivity
// 定数・MainActivity
private readonly int REQUEST_CODE_VOICE = 10; // 音声認識のリクエストコード
private readonly int INTERVAL_1500_MILLISEC = 1500; // 1.5秒(ミリ秒単位)
#endregion
public event EventHandler<PreferenceManager.ActivityResultEventArgs> ActivityResult = delegate { };
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
Button button1 = FindViewById<Button>(Resource.Id.btn1);
button1.Click += Button_Click;
}
private void Button_Click(object sender, System.EventArgs e)
{
Toast.MakeText(this, "speech recognize started.", ToastLength.Short).Show(); // トースト表示
try
{
// 音声認識のアクティビティを呼び出すためのインテントを用意する。
var voiceIntent = new Intent(RecognizerIntent.ActionRecognizeSpeech);
// 諸々のプロパティを設定する。
voiceIntent.PutExtra(RecognizerIntent.ExtraLanguageModel, RecognizerIntent.LanguageModelFreeForm);
voiceIntent.PutExtra(RecognizerIntent.ExtraPrompt, "Speak to me!");
voiceIntent.PutExtra(RecognizerIntent.ExtraSpeechInputCompleteSilenceLengthMillis, INTERVAL_1500_MILLISEC);
voiceIntent.PutExtra(RecognizerIntent.ExtraSpeechInputPossiblyCompleteSilenceLengthMillis, INTERVAL_1500_MILLISEC);
voiceIntent.PutExtra(RecognizerIntent.ExtraSpeechInputMinimumLengthMillis, INTERVAL_1500_MILLISEC);
voiceIntent.PutExtra(RecognizerIntent.ExtraMaxResults, 1);
// 認識言語の指定。端末の設定言語(Java.Util.Locale.Default)で音声認識を行う。
voiceIntent.PutExtra(RecognizerIntent.ExtraLanguage, Java.Util.Locale.Default);
// 音声認識のアクティビティを開始する。
StartActivityForResult(voiceIntent, REQUEST_CODE_VOICE);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
// 音声認識のアクティビティで取得した結果をハンドルする処理の本体
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_VOICE)
{
if (resultCode == Result.Ok)
{
// 認識が成功した場合、認識結果の文字列を引き出し、RecognizedTextに入れる。
var matches = data.GetStringArrayListExtra(RecognizerIntent.ExtraResults);
if (matches.Count != 0)
{
FindViewById<TextView>(Resource.Id.txt2).Text += matches[0] + "\n";
}
}
}
}
}
}
Reference
이 문제에 관하여(Xamarin.Android에서 간단한 음성 인식 샘플), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/takehiro_sasaki/items/eea6563184b8dd85fd07
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
아래의 기사를 참고로 하고 있습니다.
【Xamarin.Forms】 음성 인식 사용법
h tps:// 퀵했다. 소 m/미c 로와베 PC/있어 MS/40b1016cf84 에어 89C4 그림 d1
우이
UI 쪽은 TextView와 Button 1개씩의 간단한 것
소스 코드
Main.axml<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/relativeLayout1"
android:background="#545454">
<TextView
android:text="This is sample of Speech Recognize."
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/txt1"
android:layout_marginLeft="10dp"
android:textStyle="bold"
android:textColor="@android:color/white"
android:layout_marginTop="10dp"
android:layout_centerHorizontal="true" />
<Button
android:text="Start"
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:width="165dp"
android:layout_below="@id/txt1"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:layout_centerHorizontal="true" />
</RelativeLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/txt2" />
</LinearLayout>
MainActivity.csusing System;
using Android.App;
using Android.Widget;
using Android.Content;
using Android.OS;
using Android.Speech;
using Android.Preferences;
namespace App1
{
[Activity(Label = "Speech Recognize Sample App", MainLauncher = true)]
public class MainActivity : Activity
{
#region Constant, MainActivity
// 定数・MainActivity
private readonly int REQUEST_CODE_VOICE = 10; // 音声認識のリクエストコード
private readonly int INTERVAL_1500_MILLISEC = 1500; // 1.5秒(ミリ秒単位)
#endregion
public event EventHandler<PreferenceManager.ActivityResultEventArgs> ActivityResult = delegate { };
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
Button button1 = FindViewById<Button>(Resource.Id.btn1);
button1.Click += Button_Click;
}
private void Button_Click(object sender, System.EventArgs e)
{
Toast.MakeText(this, "speech recognize started.", ToastLength.Short).Show(); // トースト表示
try
{
// 音声認識のアクティビティを呼び出すためのインテントを用意する。
var voiceIntent = new Intent(RecognizerIntent.ActionRecognizeSpeech);
// 諸々のプロパティを設定する。
voiceIntent.PutExtra(RecognizerIntent.ExtraLanguageModel, RecognizerIntent.LanguageModelFreeForm);
voiceIntent.PutExtra(RecognizerIntent.ExtraPrompt, "Speak to me!");
voiceIntent.PutExtra(RecognizerIntent.ExtraSpeechInputCompleteSilenceLengthMillis, INTERVAL_1500_MILLISEC);
voiceIntent.PutExtra(RecognizerIntent.ExtraSpeechInputPossiblyCompleteSilenceLengthMillis, INTERVAL_1500_MILLISEC);
voiceIntent.PutExtra(RecognizerIntent.ExtraSpeechInputMinimumLengthMillis, INTERVAL_1500_MILLISEC);
voiceIntent.PutExtra(RecognizerIntent.ExtraMaxResults, 1);
// 認識言語の指定。端末の設定言語(Java.Util.Locale.Default)で音声認識を行う。
voiceIntent.PutExtra(RecognizerIntent.ExtraLanguage, Java.Util.Locale.Default);
// 音声認識のアクティビティを開始する。
StartActivityForResult(voiceIntent, REQUEST_CODE_VOICE);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
// 音声認識のアクティビティで取得した結果をハンドルする処理の本体
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_VOICE)
{
if (resultCode == Result.Ok)
{
// 認識が成功した場合、認識結果の文字列を引き出し、RecognizedTextに入れる。
var matches = data.GetStringArrayListExtra(RecognizerIntent.ExtraResults);
if (matches.Count != 0)
{
FindViewById<TextView>(Resource.Id.txt2).Text += matches[0] + "\n";
}
}
}
}
}
}
Reference
이 문제에 관하여(Xamarin.Android에서 간단한 음성 인식 샘플), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/takehiro_sasaki/items/eea6563184b8dd85fd07
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Main.axml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/relativeLayout1"
android:background="#545454">
<TextView
android:text="This is sample of Speech Recognize."
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/txt1"
android:layout_marginLeft="10dp"
android:textStyle="bold"
android:textColor="@android:color/white"
android:layout_marginTop="10dp"
android:layout_centerHorizontal="true" />
<Button
android:text="Start"
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:width="165dp"
android:layout_below="@id/txt1"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:layout_centerHorizontal="true" />
</RelativeLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/txt2" />
</LinearLayout>
MainActivity.cs
using System;
using Android.App;
using Android.Widget;
using Android.Content;
using Android.OS;
using Android.Speech;
using Android.Preferences;
namespace App1
{
[Activity(Label = "Speech Recognize Sample App", MainLauncher = true)]
public class MainActivity : Activity
{
#region Constant, MainActivity
// 定数・MainActivity
private readonly int REQUEST_CODE_VOICE = 10; // 音声認識のリクエストコード
private readonly int INTERVAL_1500_MILLISEC = 1500; // 1.5秒(ミリ秒単位)
#endregion
public event EventHandler<PreferenceManager.ActivityResultEventArgs> ActivityResult = delegate { };
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
Button button1 = FindViewById<Button>(Resource.Id.btn1);
button1.Click += Button_Click;
}
private void Button_Click(object sender, System.EventArgs e)
{
Toast.MakeText(this, "speech recognize started.", ToastLength.Short).Show(); // トースト表示
try
{
// 音声認識のアクティビティを呼び出すためのインテントを用意する。
var voiceIntent = new Intent(RecognizerIntent.ActionRecognizeSpeech);
// 諸々のプロパティを設定する。
voiceIntent.PutExtra(RecognizerIntent.ExtraLanguageModel, RecognizerIntent.LanguageModelFreeForm);
voiceIntent.PutExtra(RecognizerIntent.ExtraPrompt, "Speak to me!");
voiceIntent.PutExtra(RecognizerIntent.ExtraSpeechInputCompleteSilenceLengthMillis, INTERVAL_1500_MILLISEC);
voiceIntent.PutExtra(RecognizerIntent.ExtraSpeechInputPossiblyCompleteSilenceLengthMillis, INTERVAL_1500_MILLISEC);
voiceIntent.PutExtra(RecognizerIntent.ExtraSpeechInputMinimumLengthMillis, INTERVAL_1500_MILLISEC);
voiceIntent.PutExtra(RecognizerIntent.ExtraMaxResults, 1);
// 認識言語の指定。端末の設定言語(Java.Util.Locale.Default)で音声認識を行う。
voiceIntent.PutExtra(RecognizerIntent.ExtraLanguage, Java.Util.Locale.Default);
// 音声認識のアクティビティを開始する。
StartActivityForResult(voiceIntent, REQUEST_CODE_VOICE);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
// 音声認識のアクティビティで取得した結果をハンドルする処理の本体
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_VOICE)
{
if (resultCode == Result.Ok)
{
// 認識が成功した場合、認識結果の文字列を引き出し、RecognizedTextに入れる。
var matches = data.GetStringArrayListExtra(RecognizerIntent.ExtraResults);
if (matches.Count != 0)
{
FindViewById<TextView>(Resource.Id.txt2).Text += matches[0] + "\n";
}
}
}
}
}
}
Reference
이 문제에 관하여(Xamarin.Android에서 간단한 음성 인식 샘플), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/takehiro_sasaki/items/eea6563184b8dd85fd07텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)