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

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

新規登録して質問してみよう
ただいま回答率
85.50%
C#

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

16746閲覧

【Unity/C#】`not all code paths return a value`の対処方法が分からない。

afroscript

総合スコア148

C#

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2017/08/13 05:48

##聞きたいこと
下記記載のコードに対してnot all code paths return a valueとのエラーが出ています。
どうやら、「全てのコードが戻り値を返すようになってない」という意味らしいのですが、どこを改善していいか分からず。。。
どなたか対応方法わかりますでしょうか...??

(C#もUnityも初心者で丸投げの質問になってたらすみません...!情報の過不足などあればご指摘ください!)

##実現したいこと

UnityとWatsonを使って、「おはよう」と話しかけたら「おはよう」と音声で返してくれるようなものを作ろうとしてます。
スタートから4秒間マイクで集音し、WatsonのSpeachToTextで日本語文字列に変換→「おはよう」の文字列が入っていれば、TextToSeachで「おはよう」と音声で返す、といったものです。

##コード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using IBM.Watson.DeveloperCloud.Services.TextToSpeech.v1; 5using IBM.Watson.DeveloperCloud.Services.SpeechToText.v1; 6 7public class WatsonConversation : MonoBehaviour { 8 9 10 [SerializeField] 11 SpeechToText m_SpeechToText = new SpeechToText(); 12 TextToSpeech m_TextToSpeech = new TextToSpeech(); 13 string m_ResString = "おはよう"; 14 15 // Use this for initialization 16 IEnumerator Start() { 17 var audioSource = GetComponent<AudioSource>(); 18 RecMic(audioSource); 19 } 20 21 IEnumerator RecMic(AudioSource audioSource) { 22 // 音声をマイクから4秒間取得 23 Debug.Log ("Start record"); 24 audioSource.clip = Microphone.Start(null, true, 10, 44100); 25 audioSource.loop = false; 26 audioSource.spatialBlend = 0.0f; 27 yield return new WaitForSeconds (4f); 28 Microphone.End (null); 29 Debug.Log ("Finish record"); 30 31 // 音声の認識言語を日本語に指定 32 m_SpeechToText.RecognizeModel = "ja-JP_BroadbandModel"; 33 // 音声をテキストに変換し、関数:HandleOnRecognize()を呼ぶ 34 m_SpeechToText.Recognize(audioSource.clip, HandleOnRecognize); 35 36 } 37 38 void HandleOnRecognize(SpeechRecognitionEvent result){ 39 if (result != null && result.results.Length > 0){ 40 foreach (var res in result.results){ 41 foreach (var alt in res.alternatives){ 42 string text = alt.transcript; 43 Debug.Log(string.Format("{0} ({1}, {2:0.00})\n", text, res.final ? "Final" : "Interim", alt.confidence)); 44 45 //textに"おはよう"があれば、おはようと返すしてしゃべる 46 if (text.Contains("おはよう")) { 47 m_TextToSpeech.Voice = VoiceType.ja_JP_Emi; //音声タイプを指定 48 m_TextToSpeech.ToSpeech(m_ResString, HandleToSpeechCallback); 49 50 } 51 } 52 } 53 } 54 } 55 56 void HandleToSpeechCallback (AudioClip clip) { 57 PlayClip(clip); 58 } 59 60 private void PlayClip(AudioClip clip) { 61 if (Application.isPlaying && clip != null) { 62 GameObject audioObject = new GameObject("AudioObject"); 63 AudioSource source = audioObject.AddComponent<AudioSource>(); 64 source.spatialBlend = 0.0f; 65 source.loop = false; 66 source.clip = clip; 67 source.Play(); 68 69 GameObject.Destroy(audioObject, clip.length); 70 } 71 } 72 73// void Update () { 74// 75// } 76} 77

##調べたページ
https://www21.atwiki.jp/mizcremorne/pages/315.html#id_c9a4eb10

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Startメソッド、RecMicを呼ぶところでreturnをつけ忘れているように見えます。

投稿2017/08/13 05:53

yuba

総合スコア5568

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

afroscript

2017/08/13 06:10

ご回答ありがとうございます!! ``` IEnumerator Start() { var audioSource = GetComponent<AudioSource>(); RecMic(audioSource); return; } ``` ということでしょうか...?? この場合、 `error CS0126: An object of a type convertible to `System.Collections.IEnumerator' is required for the return statement` とのエラーが出ました。 return ●●といった形で何か返さなければならない感じですかね...?? (何を●●に入れて返せばいいか分からず。。。)
退会済みユーザー

退会済みユーザー

2017/08/13 06:36

IEnumeratorでstart を回す場合はyield returnで初期化を何度かイテレートしないといけません。 IEnumerator startについてはunityのドキュメントを参照してみてください。
afroscript

2017/08/13 07:54 編集

@tkow ありがとうございます! IEnumerator Start() {  var audioSource = GetComponent<AudioSource>();  yield return RecMic(audioSource); } で無事動きました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問