Я пытаюсь создать какой-то звуковой метр на платформе Android. (я использую HTC wildfire). Я использую класс AudioRecord
для этой цели, однако кажется, что значения , возвращаемые из «прочитанного», не являются разумными.Чтение AudioRecord возвращает странные значения
Это, как я создал объект AudioRecord:
int minBufferSize =
AudioRecord.getMinBufferSize(sampleRateInHz,
android.media.AudioFormat.CHANNEL_IN_MONO,
android.media.AudioFormat.ENCODING_PCM_16BIT);
audioRecored = new AudioRecord(MediaRecorder.AudioSource.MIC,
44100,
android.media.AudioFormat.CHANNEL_IN_MONO,
android.media.AudioFormat.ENCODING_PCM_16BIT,
minBufferSize);
Это, как я пытаюсь читать данные из него:
short[] audioData = new short[bufferSize];
int offset =0;
int shortRead = 0;
int sampleToReadPerGet = 1000;//some value in order to avoid momentaraly nosies.
//start tapping into the microphone
audioRecored.startRecording();
//start reading from the microphone to an internal buffer - chuck by chunk
while (offset < sampleToReadPerGet)
{
shortRead = audioRecored.read(audioData, offset ,sampleToReadPerGet - offset);
offset += shortRead;
}
//stop tapping into the microphone
audioRecored.stop();
//average the buffer
int averageSoundLevel = 0;
for (int i = 0 ; i < sampleToReadPerGet ; i++)
{
averageSoundLevel += audioData[i];
}
averageSoundLevel /= sampleToReadPerGet;
Каковы эти ценности? они децибелы?
Редактировать: Значения от -200 до 3000. Значение shortRead - sampleToReadPerGet (1000).
Какие ценности вы получаете? Конечно, вы просто возвращаете 16-битные образцы PCM. – Brad
Какова ценность «shortRead» после вызова для чтения? –
Добавлены значения к вопросу. – talel