我有以下问题:我使用SpeechRecognizer来识别几个单词.我用
public void onResults
Run Code Online (Sandbox Code Playgroud)
销毁SpeechRecognizer的方法.
在破坏之后我初始化AudioRecord并从麦克风开始录音.这导致我的logcat中出现以下错误:
12-09 00:44:01.976: E/AudioRecord(21185): start() status -38
Run Code Online (Sandbox Code Playgroud)
我的代码中没有异常.AudioRecord无法正常启动.我假设SpeechRecognizer没有足够快地释放麦克风,因为如果我在AudioRecord初始化之前添加Thread.sleep(200),我不会遇到这个问题.
由于显而易见的原因,此解决方案非常糟 因此,我有以下问题:
如何检查AudioRecord是否已正确初始化?(我的代码中没有异常.)
_audioRecord.getState() == AudioRecord.STATE_UNINITIALIZED
Run Code Online (Sandbox Code Playgroud)
也是假的.
或者我如何检查SpeechRecognizer是否正确释放麦克风?
非常感谢!
Hej,我目前正试图让AudioRecord工作.因为我需要一个更大的项目.但它似乎搞得很多.我一直在尝试很多东西,所以当我追踪这个bug时我回到了基础.我正在使用我的三星Galaxy S作为我的调试设备.
我的问题是,第一次重启我的设备后,我可以初始化我创建的AudioRecord对象没有问题.但是第二次运行它时,它不会初始化AudioRecord对象.我已经尝试了几个频率,fyi.
这是我的代码:
package android.audiorecordtest;
import android.app.Activity;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class AudioRecordTest extends Activity {
int frequency;
AudioRecord audRec;
TextView txtVw;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
txtVw = (TextView) findViewById(R.id.txtVw);
frequency=8000;
int bufferSize=(AudioRecord.getMinBufferSize(frequency, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT))*2;
if (bufferSize>0) {
audRec = new AudioRecord(MediaRecorder.AudioSource.MIC, frequency, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize);
int status = audRec.getState();
if (status == …Run Code Online (Sandbox Code Playgroud) 我已经阅读了很多关于Android的AudioRecorder的网页.您可以在问题下方看到它们的列表.
我正在尝试使用AudioRecorder录制音频,但效果不佳.
public class MainActivity extends Activity {
AudioRecord ar = null;
int buffsize = 0;
int blockSize = 256;
boolean isRecording = false;
private Thread recordingThread = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void baslat(View v)
{
// when click to START
buffsize = AudioRecord.getMinBufferSize(44100, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
ar = new AudioRecord(MediaRecorder.AudioSource.MIC, 44100, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, buffsize);
ar.startRecording();
isRecording = true;
recordingThread = new Thread(new Runnable() {
public void run() {
writeAudioDataToFile();
}
}, "AudioRecorder Thread"); …Run Code Online (Sandbox Code Playgroud) 我已经尝试将代码简化为最低限度,但它仍然无效:
public class MainActivity extends AppCompatActivity {
AudioRecord rec;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rec= new AudioRecord(MediaRecorder.AudioSource.MIC,44100, AudioFormat.CHANNEL_IN_MONO,AudioFormat.ENCODING_PCM_16BIT,8192);
short buff[] = new short[8192];
int read = rec.read(buff,0,buff.length);
System.out.print(read);
}
Run Code Online (Sandbox Code Playgroud)
无论如何,总是返回-3.我错过了什么?
我正在尝试实现一个监听麦克风输入(特别是呼吸)的应用程序,并根据它提供数据.我正在使用Android类AudioRecord,在尝试实例化AudioRecord时,我得到了三个错误.
AudioRecord: AudioFlinger could not create record track, status: -1
AudioRecord-JNI: Error creating AudioRecord instance: initialization check failed with status -1.
android.media.AudioRecord: Error code -20 when initializing native AudioRecord object.
Run Code Online (Sandbox Code Playgroud)
我发现这个优秀的线程:AudioRecord对象没有初始化
我从已接受的答案中借用了代码,尝试所有采样率,音频格式和通道配置以尝试解决问题,但它没有帮助,我得到了所有设置的上述错误.我还根据线程中的一个答案在几个地方添加了对AudioRecord.release()的调用,但它没有任何区别.
这是我的代码:
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.util.Log;
public class SoundMeter {
private AudioRecord ar = null;
private int minSize;
private static int[] mSampleRates = new int[] { 8000, 11025, 22050, 32000, 44100 };
public boolean start() {
ar = findAudioRecord();
if(ar != null){
ar.startRecording();
return …Run Code Online (Sandbox Code Playgroud) 我得到的错误就像开始录制()在Android 2.3.4版本的手机(LG)中称为未初始化的音频录制,它在Android 2.2中正常工作但在android 2.3中抛出错误.
当我尝试使用以下代码通过我的Nexus 5录制音频时
record = new AudioRecord(MediaRecorder.AudioSource.MIC, sampleRate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_8BIT, BYTE_OF_SAMPLE * bufferSampleSize);
record.startRecording();
Run Code Online (Sandbox Code Playgroud)
然后我在logcat中得到以下异常:
E/AudioRecord: AudioFlinger could not create record track, status: -1
E/AudioRecord-JNI: Error creating AudioRecord instance: initialization check failed with status -1.
E/android.media.AudioRecord: Error code -20 when initializing native AudioRecord object.
E/AndroidRuntime: FATAL EXCEPTION: Thread-855
E/AndroidRuntime: Process: com.*.*, PID: 14206
E/AndroidRuntime: java.lang.IllegalStateException: startRecording() called on an uninitialized AudioRecord.
E/AndroidRuntime: at android.media.AudioRecord.startRecording(AudioRecord.java:885)
E/AndroidRuntime: at com.*.*.MainActivity$Looper.run(MainActivity.java:265)
E/Surface: getSlotFromBufferLocked: unknown buffer: 0x9e476d00
Run Code Online (Sandbox Code Playgroud)
我在清单文件中添加了以下行.
<uses-permission android:name="android.permission.RECORD_AUDIO" />
Run Code Online (Sandbox Code Playgroud)
我已经测试了AudioRecord对象未初始化.这些解决方案都不起作用.
但它在另一个项目中工作.有什么遗漏?
我正在开发一个 android 应用程序。我想完成以下功能。我将使用手机的内置麦克风进行录音,同时我希望通过手机的扬声器或耳机播放录制的音频。可行吗?如果是,请帮助我。