public class AudioRecorderActivity extends Activity {
private static final int RECORDER_SAMPLERATE = 8000;
private static final int RECORDER_CHANNELS = AudioFormat.CHANNEL_IN_MONO;
private static final int RECORDER_AUDIO_ENCODING = AudioFormat.ENCODING_PCM_16BIT;
private AudioRecord recorder = null;
private static final String TAG = "AudioRecorderActivity";
short[][] buffers = new short[256][160];
int ix = 0;
private boolean stopped = false;
private void startRecording() {
Android.os.Process.setThreadPriority(Android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);
try {
int N = AudioRecord.getMinBufferSize (
RECORDER_SAMPLERATE,
RECORDER_CHANNELS,
RECORDER_AUDIO_ENCODING) * 20;
recorder = new AudioRecord(AudioSource.MIC,
RECORDER_SAMPLERATE,
RECORDER_CHANNELS,
RECORDER_AUDIO_ENCODING,N );
recorder.startRecording();
while(!stopped) {
short[] buffer = buffers[ix++ % buffers.length];
N = recorder.read(buffer,0,buffer.length);
}
}
catch(Throwable x) {
Log.v(TAG,"Error reading voice audio",x);
x.printStackTrace();
}
finally {
stopped = true;
stopRecording();
}
}
}
質問:コードスニペットはStackOverflowの例に基づいていますが、機能していません。間違いの可能性があるものを教えてください。
12-20 03:44:32.271: E/AudioRecord(224): AudioFlinger could not create record track, status: -1
12-20 03:44:32.271: E/AudioRecord-JNI(224): Error creating AudioRecord instance: initialization check failed.
12-20 03:44:32.271: E/AudioRecord-Java(224): [ Android.media.AudioRecord ] Error code -20 when initializing native AudioRecord object.
Record_audio権限をAndroidManifest.xmlに追加します
<uses-permission Android:name="Android.permission.RECORD_AUDIO" />
最近のAndroidバージョンでは、マニフェストの権限を変更した後にAndroid Studioからapkをプッシュしても、実際にはアプリ設定の権限は変更されないようです。これが上記の答えがうまくいった理由です。マニフェストにRECORD_AUDIO権限なしでアプリケーションを構築し、ログに権限エラーが表示されました(OPのエラーとともに)。マニフェストに権限を追加し、デバイスでアプリケーションを再実行すると、ログのアクセス許可エラーはなくなりましたが、OPでエラーが発生しました。システム、アプリケーション、アプリケーションマネージャー-> MyApp->アクセス許可に移動し、オーディオの録音が表示されていることを確認しました手動でオンにすると修正されました。
そもそもマニフェストに正しい許可を組み込んでいれば、これでうまくいくと思います(ただし確認はしていません)。または、デバイスからアプリをアンインストールしてから再インストールすると、修正される可能性がありますが、私も試していません。
マシュマロ以前のバージョンのAndroidは、Olexijが言及したものと同じになります...
<uses-permission Android:name="Android.permission.RECORD_AUDIO" />
ただし、開始時Android API 23(Marshmallow)これは危険な許可と見なされ、使用されているアクティビティ内からこの許可を要求する必要があります。デイブの経験はその結果です。マニフェストでアクセス許可を宣言しますが、実行時に(少なくとも最初は)要求しないと、アプリケーションマネージャーのアプリのアクセス許可に表示されますが、オフのままになります。
小切手...
API 23(マシュマロ)のソリューションは単純です。以下の許可を得た後、bulid.gradleファイルで「targetSdkVersion22」を設定する必要があります。
明示的な許可を与えると、問題が修正されました。
これらの手順を試してください
Android Version 7.0
Settings -> Applications -> <MyAPP> -> Permissions
-> [Turn Camera and Microphone ON]