【问题标题】:AudioRecord: Continuously record audio data and simultaneously analyse itAudioRecord:连续记录音频数据并同时进行分析
【发布时间】:2014-11-13 03:23:34
【问题描述】:

我正在尝试使用 android 中的 AudioRecord 对象将音频数据记录到字节数组中,同时对记录的数据进行一些分析。但我不确定该怎么做。 如果我直接使用字节数组,应用程序就会崩溃。我需要一个字节数组作为分析线程的输入我对 android 开发相对较新,我将不胜感激有关此主题的任何帮助。 谢谢

byte[] data;
public void Record()throws IOException{
    int bufferSize = AudioRecord.getMinBufferSize(RECORDER_SAMPLERATE,RECORDER_CHANNELS,RECORDER_AUDIO_ENCODING);
    AudioRecord recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
            RECORDER_SAMPLERATE, RECORDER_CHANNELS,RECORDER_AUDIO_ENCODING, bufferSize);
    recorder.startRecording();        
    isRecording = true;
    boolean flag = true;
    data = new byte[bufferSize];
    while(isRecording){
        try {               
            int result = recorder.read(data, 0, bufferSize);                
            if(flag){
                Thread analyseThread = new Thread(new Runnable() {
                    @Override
                    public void run() {
                        theAnalysingFunction();
                    }
                },"AudioRecorder Thread");
                analyseThread.start();
                flag=false;
            }
            if (AudioRecord.ERROR_INVALID_OPERATION !=result ) {

            } else if (result == AudioRecord.ERROR_INVALID_OPERATION) {
                Log.e("Recording", "Invalid operation error");
                break;
            } else if (result == AudioRecord.ERROR_BAD_VALUE) {
                Log.e("Recording", "Bad value error");
                break;
            } else if (result == AudioRecord.ERROR) {
                Log.e("Recording", "Unknown error");
                break;
            }
        } catch (Exception e) {
            Log.i("Error", "AudioRecord error");

        }
    }       
}
public void theAnalysingFunction(){
    //
    //Analyse the byte array named data
    //
}

【问题讨论】:

    标签: android bytearray audiorecord audio-analysis


    【解决方案1】:

    这是多线程。您尝试分析缓冲区。而另一个线程同时更改它。

    关于您的崩溃,如果您使用字节缓冲区,请确保您使用 ENCODING_PCM_8BIT 进行编码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-24
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 2021-12-05
      • 2019-04-01
      • 1970-01-01
      • 2011-06-15
      相关资源
      最近更新 更多