Я пытаюсь получить громкость от своих часов Android Wear: MOTO 360. Но я получаю только 0 значений PCM от Audiorecord.read .....
Я запускаю процесс записи в отдельном потоке. Ниже приведен фрагмент моего кода, вы знаете, что я делаю неправильно?
Большое спасибо за вашу помощь
jn.
REREDIT: новый результат с MOTO. Выглядит действительно очень странно!
03-15 20:38:08.740 1420-3994/? W/mot_vr_audio_hw﹕ Не разрешать wake(), так как DSP отключен
ПОВТОРНОЕ РЕДАКТИРОВАНИЕ: я попробовал свой код с другими ЧАСАМИ (Sony). Журналы более явные
03-08 22:11:40.342 1165-1650/? D/MICRO﹕ БУДЕТ ЗАПИСАТЬ НА ЧАСТОТЕ 44100 Гц В БУФЕРЕ 15052
03-08 22:11:40.343 153-153/? E/AudioPolicyManager﹕ startInput(21) не удалось: другой ввод 19 уже запущен
03-08 22:11:40.343 1165-1650/? Статус E/AudioRecord﹕ start() -38
Эта ошибка, по-видимому, возникает, когда одновременно активны 2 объекта аудиозаписи. Но я совершенно уверен, что мой запускается только один раз. Как вы думаете, это может быть объект System Audiorecord, который препятствует запуску моего?
РЕДАКТИРОВАТЬ: у меня есть это в моем манифесте износа, использует разрешение android:name=android.permission.RECORD_AUDIO
private int sampleRateInHz = 8000;
private int channelConfig = AudioFormat.CHANNEL_IN_MONO;
private int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
public void run(){
running=true;
bufferSize = AudioRecord.getMinBufferSize(sampleRateInHz, channelConfig, audioFormat);
recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,sampleRateInHz, channelConfig, audioFormat, bufferSize);
Log.d(TAG,"WILL RECORD AT "+sampleRateInHz+"Hz IN A BUFFER OF "+bufferSize);
recording=true;
try{
while (recording){
if ((recorder.getState()==android.media.AudioRecord.STATE_INITIALIZED)&&(recorder.getRecordingState()==android.media.AudioRecord.RECORDSTATE_STOPPED)){
recorder.startRecording();
Log.d(TAG,"START RECORDING DUDE");
}
int theVolume = getVolume(sampleRateInHz, bufferSize);
Thread.sleep(10);
}
if (!recording){
Thread.currentThread().interrupt();
Log.d(TAG,"MIC THREAD STOPPED");
}
}catch (InterruptedException e){
e.printStackTrace();
}
private int getVolume(int sampleRate, int bufferSize){
short[] audioData = new short [bufferSize];
int nbOfSamples = recorder.read(audioData,0,bufferSize);
int numSamples = audioData.length;
int numCrossing = 0;
double volume = 0;
for (int p = 0; p < numSamples-1; p++){
volume += audioData[p]*audioData[p];
}
Log.d(TAG,"volume from pcm: "+volume);
volume = Math.sqrt(volume/nbOfSamples);
currentVolume = (int) (0.5*currentVolume+ 0.5*volume);
Log.d(TAG,"currentVolume: "+currentVolume);
return currentVolume;
}