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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

4517閲覧

Androidアプリの勉強中の者です。AudioRecorderについて

yokoi

総合スコア18

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2016/09/22 14:20

###前提・実現したいこと
Eclipseを使ってAndroidアプリを開発中の学生です。今、マイクを利用したものを作ろうとしているんですが、バッファやAudioRecorderなどの使い方がイマイチよく分かりません。AudioRecorderを使って音声を録音することはいろんなサイトで勉強して実装することはできました。それと、作りたいものというのは声ではなくて息を利用するものです。なので、息を検知する方法があれば教えて欲しいです。

###該当のソースコード

java

1package com.moonlight_aska.android.recorder02; 2 3 import android.app.Activity; 4 import android.media.AudioFormat; 5import android.media.AudioRecord; 6import android.media.MediaRecorder; 7 import android.os.Bundle; 8 import android.util.Log; 9 import android.view.View; 10 import android.widget.Button; 11 12 public class Recorder02 extends Activity implements View.OnClickListener { 13 final static int SAMPLING_RATE = 11025; 14 AudioRecord audioRec = null; 15 Button btn = null; 16 boolean bIsRecording = false; 17 int bufSize; 18 /** Called when the activity is first created. */ 19 @Override 20 public void onCreate(Bundle savedInstanceState) { 21 super.onCreate(savedInstanceState); 22 setContentView(R.layout.main); 23 24 btn = (Button)findViewById(R.id.button_id); 25 btn.setOnClickListener(this); 26 // バッファサイズの計算 27 bufSize = AudioRecord.getMinBufferSize( 28 SAMPLING_RATE, 29 AudioFormat.CHANNEL_CONFIGURATION_MONO, 30 AudioFormat.ENCODING_PCM_16BIT) * 2; 31 // AudioRecordの作成 32 audioRec = new AudioRecord( 33 MediaRecorder.AudioSource.MIC, 34 SAMPLING_RATE, 35 AudioFormat.CHANNEL_CONFIGURATION_MONO, 36 AudioFormat.ENCODING_PCM_16BIT, 37 bufSize); 38 } 39 40 @Override 41 public void onClick(View v) { 42 // TODO Auto-generated method stub 43 if (v == btn) { 44 if (bIsRecording) { 45 btn.setText(R.string.start_label); 46 bIsRecording = false; 47 } 48 else { 49 // 録音開始 50 Log.v("AudioRecord", "startRecording"); 51 audioRec.startRecording(); 52 bIsRecording = true; 53 // 録音スレッド 54 new Thread(new Runnable() { 55 @Override 56 public void run() { 57 byte buf[] = new byte[bufSize]; 58 // TODO Auto-generated method stub 59 while (bIsRecording) { 60 // 録音データ読み込み 61 audioRec.read(buf, 0, buf.length); 62 Log.v("AudioRecord", "read " + buf.length + " bytes"); 63 } 64 // 録音停止 65 Log.v("AudioRecord", "stop"); 66 audioRec.stop(); 67 } 68 }).start(); 69 btn.setText(R.string.stop_label); 70 } 71 } 72 } 73 74 @Override 75 protected void onDestroy() { 76 // TODO Auto-generated method stub 77 super.onDestroy(); 78 audioRec.release(); 79 } 80 }

###上記のコードについて
上記のコードは「http://seesaawiki.jp/w/moonlight_aska/d/%a5%c7%a1%bc%a5%bf%a5%b9%a5%c8%a5%ea%a1%bc%a5%e0%a4%c8%a4%b7%a4%c6%b2%bb%c0%bc%a5%c7%a1%bc%a5%bf%a4%f2%c6%c9%a4%df%b9%fe%a4%e0」のサイトから引用してきました。分からないことがいくつかあるのですが、一番疑問に思っているところについて記述します。サイトの上端にAudioRecord#readメソッドで 音声データを読み込むと書いてあるのですが、マイクに声を出しても出さなくてもLogで値を調べたところ値が変わらないのです。また、bufはbyte型の配列ですので、配列の中身を調べても今度は値が変わるのですが、マイクに声を出さなくても値は変動します。ですので、このreadメソッドを使って音声データを読み込むという意味を具体的に教えて頂きたいです。

###質問の仕方が下手でご迷惑おかけします・・・
プログラムについての質問をあまりしたことがないので、大変分かりづらい質問かと思いますが、回答よろしくお願いします。それと、書いた質問は一つではないので、回答ができる部分だけでいいのでお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

bufの長さを見ても意味がないと思いますよ、常に一定だと思います。
重要なのはbufの中身で、配列の中身はマイクが拾った音です。

マイクは声や息だけを拾っているわけではありません、周囲の人には聞こえない些細な音も拾います。
あなたが特殊な無音な部屋にいるなら別ですが。

あなたがやりたいことはこの配列から息と思われる音を拾う処理を考えないといけないですね。

投稿2016/09/22 14:59

yona

総合スコア18155

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

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

yokoi

2016/09/23 01:41

すみません、その息と思われる値を拾うというのは具体的にどうやったらいいでしょうか。
yona

2016/09/23 02:21

音解析の知識が無いのでわかりませんね。 ただ、2,3行で説明できるものでも無いし、あなた自身に音解析の知識が無いと実装は無理でしょうね。
yokoi

2016/09/23 10:35

分かりました。助言ありがとうございます。引き続き勉強頑張ってみます。
yona

2016/09/23 10:40

かなり難しいですが、面白そうですね。 事前に周囲の音を計測しておき、大きな音がしたら息と判断するなどのなんちゃってな解決方法はありそうですね。
yokoi

2016/09/28 11:19

なるほど!そういう方法もありましたか! 息だというものは検知できそうですけど、その息の強さがどれくらいかを知るのが難しすぎてどうすればいいか積んでます・・・。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問