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

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

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

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

0回答

507閲覧

C#で音の大きさを判別したい。

ZK12s

総合スコア10

C#

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

1グッド

1クリップ

投稿2018/11/08 05:10

編集2018/11/08 05:14

前提・実現したいこと

卒業研究でVR集団面接トレーニングをUnityで開発しています。
音声認識で、音の大きさを判別するプログラムをC#で書きたいのですが、書き方がわかりません。
参考になるプログラムを見つけましたが、C++で書かれているため言語が違います。
収録した音に二乗平均を求める squareAve 関数を用いて音の大きさを計算し、その大きさによって「大きい音」「小さい音」判別するプログラムをC#で書きたいです。

参考にするプログラム

Recognitionクラスの仕様 本プログラムで使うことのできる Recognition クラスについて、またその内部で実装しているメソッドについて。実際の使い方や振舞いについてはソースコード内のコメントを見ていただいた方がわかりやすいと思われるが詳細はこちらを参照していただきたい。内部で利用している定数として  SRATE:サンプリングレート 16000 がある。これは音声の 1 秒間あたりのサンプル数である。この Recognition クラスは recog.h を include することで利用できる。 Recognition 音声認識、マイク音声の取得を行うクラス。コンストラクタでは、int 型の引数をとることができ、1 を指定すれば音声認識のみ利用可能。2 を指定すればマイクから音を収録する機能のみ利用可能。何も指定しなければ両方を利用することができる。 void recording with microphone(int time) マイクから音を拾うメソッド。返却値はない。引数の time で指定した時間 (sec) の音をマイクから収録する。収録した音声を利用する場合は後述の get wave メソッドを用いる。 short* get wave(void) マイクから拾った音データを返却するメソッド。引数はない。返却値は音データの先頭ポインタ。以降 time で指定した時間 (sec) × SRATE(サンプリングレート 16000) の長さだけデータが続く。こちらを用いることで取 得した音声そのものを扱うことができる。 double squareAve(short *rec, int time) 第一引数に音データ系列のポインタ(short*)、第二引数に時間 (sec) を指定することで、音データ系列のポイ ンタから指定した時間分の二乗平均を求めることができる。返却値は double である。

参考にするソースコード

C++

1#include "recog.hpp" 2#include <math.h> 3 4double squareAve(short *rec, int time){ 5 double sum = 0; 6 long double ave = 0.0; 7 int cnt = 0; 8 double tmp = 0; 9 long int loop = SRATE*time; 10 while (cnt < loop){ 11 tmp = *(rec + cnt); 12 ave += (tmp * tmp) / (loop); 13 cnt++; 14 } 15 16 return ave; 17} 18 19Recognition recog(2); 20 21recog.recording_with_microphone(1); 22//2乗平均を求める 23long double kekka = squareAve(recog.get_wave(), 1); 24printf("%f\n", kekka); 25if (kekka > 1000000){ 26 printf("大きい音です。\n"); 27} 28else if (kekka > 250000){ 29 printf("普通の大きさです。\n"); 30} 31else{ 32 printf("小さい音です。\n"); 33}
bochan2👍を押しています

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

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

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

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

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

yohhoy

2018/11/08 07:27

質問中にある通り「収録した音に二乗平均を求める squareAve 関数を用いて音の大きさを計算し、その大きさによって「大きい音」「小さい音」判別する」ロジックをC#で記述することになりますが、具体的にどの部分がわからないのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問