Опитвам се да получа силата на звука от моя часовник с 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﹕ ЩЕ ЗАПИСВА НА 44100Hz В БУФЕР ОТ 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 обекта на аудиозапис са активни едновременно. Но съм напълно сигурен, че моята се стартира само веднъж. Мислите ли, че може да е обект на системен аудиозапис, който предотвратява стартирането на моя?
РЕДАКТИРАНЕ: Имам това в моя манифест на износване uses-permission 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;
}