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