1

AudioRecord を使用して録音するときに、各フレームの時間を計算する際に問題があります。したがって、誰かが仲間になって基本を説明できる場合は、大歓迎です.

次の意味は何ですか?

  • sampleRate - サンプルとして指定したバイト数ですか? または AudioRecord でチェックするサンプルとなるバイト数
  • FFT - 簡単に言えば、それはどういう意味ですか?
  • 時間の計算方法は?buffersize / frameByteSize で計算しますか?

Jacquet Wong からコピーしたサンプルコードを参照

public class RecorderThread extends Thread {

private AudioRecord audioRecord;
private boolean isRecording;
private int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO;
private int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;
private int sampleRate = 44100;
private int frameByteSize = 2048; // for 1024 fft size (16bit sample size)
byte[] buffer;

public RecorderThread(){
    int recBufSize = AudioRecord.getMinBufferSize(sampleRate, channelConfiguration, audioEncoding); // need to be larger than size of a frame
    audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, sampleRate, channelConfiguration, audioEncoding, recBufSize);
    buffer = new byte[frameByteSize];
}

public AudioRecord getAudioRecord(){
    return audioRecord;
}

public boolean isRecording(){
    return this.isAlive() && isRecording;
}

public void startRecording(){
    try{
        audioRecord.startRecording();
        isRecording = true;
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void stopRecording(){
    try{
        audioRecord.stop();
        isRecording = false;
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public byte[] getFrameBytes(){
    audioRecord.read(buffer, 0, frameByteSize);

    // analyze sound
    int totalAbsValue = 0;
    short sample = 0; 
    float averageAbsValue = 0.0f;

    for (int i = 0; i < frameByteSize; i += 2) {
        sample = (short)((buffer[i]) | buffer[i + 1] << 8);
        totalAbsValue += Math.abs(sample);
    }
    averageAbsValue = totalAbsValue / frameByteSize / 2;

    //System.out.println(averageAbsValue);

    // no input
    if (averageAbsValue < 30){
        return null;
    }

    return buffer;
}

public void run() {
    startRecording();
}

}

申し訳ありませんが、私は音声録音について簡単に学習することはできません。まだクリックできないようです。皆さんがこの質問で私を啓発してくれることを願っています。

4

0 に答える 0