Я пытаюсь получить объем от моего Android часов Wear: MOTO 360. Но я получаю только значения 0 ИКХ из Audiorecord.read .....audiorecord андроид значения износа 0
я бег записи процесс в отдельном потоке. Ниже приведен фрагмент моего кода, есть ли у вас какие-либо идеи, что я делаю неправильно?
Большое спасибо за помощь
jn.
REREDIT: новый результат с MOTO. Это выглядит действительно странно!
03-15 20: 38: 08.740 1420-3994 /? W/mot_vr_audio_hw: Не разрешать wake(), так как DSP отключен
RE-EDIT: Я пробовал использовать свой код с другим WATCH (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() status -38
Эта ошибка, кажется, срабатывает, когда одновременно активны 2 объекта звукового сопровождения. Но я уверен, что моя только началась. Как вы думаете, это может быть объект System Audiorecord, который предотвращает запуск моей шахты?
EDIT: У меня есть это в моем износе проявляется использует разрешение-андроид: имя = «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;
}
благодарит за прекрасный ответ!Я попробую ваш случайный номер, это очень хороший совет. Я также буду записывать readresult = -3, чтобы уловить эту проблему. Я знаю, что знаю результаты. Интересным моментом является то, что я пробовал использовать один и тот же код на другом устройстве (sony smartwatch 3), и у меня нет ПРОБЛЕМЫ, присоединяющейся к микрофону ..... ..... – bisonfute
Я не понял смысл вашего EDIT. Я делаю нить sleep AFTER read(). Потому что мне не нужна очень высокая частота микрофона. Я читаю() блокирует, отлично, но я хочу приостановить минимальное время (может быть больше, если read() блоки), прежде чем перезапустить read()). Я где-то ошибаюсь? – bisonfute
Я попробовал прочитать результат audiorecord.read(), и это дает мне большое положительное число, например 1323. Я думаю, это означает, что все кажется правильным. Но сегодня у меня новая ОШИБКА: 03-15 20: 38: 08.740 1420-3994 /? W/mot_vr_audio_hw: Не разрешать wake(), поскольку DSP отключен – bisonfute