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

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

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

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

Android

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

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

2回答

10373閲覧

Androidで録音処理を行うと必ずエラーが出てしまいます。

kiriyaman

総合スコア11

Java

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

Android

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

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

1グッド

0クリップ

投稿2017/10/21 18:00

###前提・実現したいこと
AndroidstudioでAudiorecordを使用して録音をしようとすると毎回同じエラーが表示されてします。1つのサンプルではなく多くのAudioRecordを使用したソースコードやGithubからダウンロードしたものでも実機のログを確認すると同じエラーが表示されます。
参考にしているアプリでは作動しているのに私が同じことするとエラーが出るということは私のPCのAndroidStudioがおかしいのでしょうか。
同じ現象になったことがある方や解決法がわかる方、原因を推測できる方などがいましたらエラーを無くす協力をお願いいたします。
アプリ自体は立ち上がるのですが録音を開始する動作をするとアプリが落ちてしまいます。
毎回録音を開始するソースコード
audioRec.startRecording();
に問題があると表示されます。

###録音を開始するとログに表示されるエラーメッセージ

0-22 02:43:03.501 10965-10965/? E/AndroidRuntime: FATAL EXCEPTION: main Process: com.test.testfft004, PID: 10965 java.lang.IllegalStateException: startRecording() called on an uninitialized AudioRecord. at android.media.AudioRecord.startRecording(AudioRecord.java:989) at com.test.testfft004.MainActivity.onClick(MainActivity.java:57) at android.view.View.performClick(View.java:5646) at android.view.View$PerformClick.run(View.java:22459) at android.os.Handler.handleCallback(Handler.java:761) at android.os.Handler.dispatchMessage(Handler.java:98) at android.os.Looper.loop(Looper.java:156) at android.app.ActivityThread.main(ActivityThread.java:6523) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:941) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:831) 10-22 02:43:03.522 10965-10965/? I/Process: Sending signal. PID: 10965 SIG: 9

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

import android.app.Activity; import android.media.AudioFormat; import android.media.AudioRecord; import android.media.MediaRecorder; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import org.jtransforms.fft.DoubleFFT_1D; public class MainActivity extends Activity implements View.OnClickListener { /** Called when the activity is first created. */ final static int SAMPLING_RATE = 44100; AudioRecord audioRec = null; Button btn = null; boolean bIsRecording = false; int bufSize; final static int FFT_SIZE = 512; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn = (Button)findViewById(R.id.button_id); btn.setOnClickListener(this); // バッファサイズの計算 bufSize = AudioRecord.getMinBufferSize( SAMPLING_RATE, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT); if (FFT_SIZE > bufSize) { bufSize = FFT_SIZE; } // AudioRecordの作成 audioRec = new AudioRecord( MediaRecorder.AudioSource.MIC, SAMPLING_RATE, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, bufSize); } @Override public void onClick(View v) { // TODO Auto-generated method stub if (v == btn) { if (bIsRecording) { bIsRecording = false; } else { // 録音開始 Log.v("AudioRecord", "startRecording"); audioRec.startRecording(); bIsRecording = true; // 録音スレッド new Thread(new Runnable() { @Override public void run() { byte buf[] = new byte[bufSize]; // TODO Auto-generated method stub // 録音データ読み込み audioRec.read(buf, 0, buf.length); // 録音停止 //audioRec.stop(); //高速フーリエ変換 DoubleFFT_1D fft = new DoubleFFT_1D(FFT_SIZE); double[] FFTdata = new double[FFT_SIZE]; for (int i = 0; i < FFT_SIZE; i++) { FFTdata[i] = (double) buf[i]; } fft.realForward(FFTdata); double[] dbfs = new double[FFT_SIZE / 2]; double max_db = 0; int max_i = 0; for (int i = 0; i < FFT_SIZE / 2; i += 2) { dbfs[i / 2] = (int) (Math.sqrt(Math.pow(FFTdata[i], 2) + Math.pow(FFTdata[i + 1], 2))); if (max_db < dbfs[i / 2]) { max_db = dbfs[i / 2]; max_i = i / 2; } } //Log.d("db", "Hz" + (SAMPLING_RATE/ (double) FFT_SIZE)*max_i*2 + "maxdb" + max_db); } }).start(); } } } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); audioRec.release(); } }

###試したこと
多くのサンプルコードを試したがaudioRec.startRecording();で落ちてしまう
Mediarecordでは録音はうまくいった

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

tatsuya1018👍を押しています

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/10/22 00:04

uninitialized ← 初期化処理入れてる?
kiriyaman

2017/10/22 13:57

コメントありがとうございます。uninitializedの初期化処理とはどこで行うものでしょうか?
guest

回答2

0

ベストアンサー

考えられるのは下記の2点です。
・アプリケーションに対して、マイク使用のパーミッションを付与していない。
・端末が指定したSAMPLING_RATEに対応していない。

投稿2017/10/22 02:39

yona

総合スコア18155

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

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

kiriyaman

2017/10/22 15:58

コメントありがとうございます。 マイクのパーミッションですがandroidManifestに  <uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> の二つを記述しています。 SAMPLING_RATEですがいくつかの数値で試してみます。
yona

2017/10/22 16:53

マニフェストにパーミッションを書いて準備完了になるのは古いバージョンだけです、端末の設定アプリからパーミッションの付与を行なってください。
kiriyaman

2017/10/22 17:23

端末の設定を変更したらできました! 本当にありがとうございます!
guest

0

yora様のコメントのおかげさまで問題が解決しました。
どうやら現在のAndroidStudioのバージョンではManifestにパーミッションを<uses-permission android:name="android.permission.RECORD_AUDIO"/>を付与するだけでは準備完了にはならないので端末の設定アプリからアプリで使用するアプリを選択しマイクの許可をしなければAudioRecordは落ちてしまうみたいです。
もし同じ現象になる方はこちらの方法を試してみてください。
ソースコード自体に端末のマイク設定を許可するものが組み込まれていたらおそらく使用できますが、うまく起動しない場合はこちらの方法を試してみてください。
エミュレータでのテストでもしうまくいかなかった方も設定でマイクが許可されているか試してみてください。
イメージ説明

投稿2017/10/22 17:42

kiriyaman

総合スコア11

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

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

yona

2017/10/23 01:00

AndroidStudioのバージョンではなく、Android OSのバージョンですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問