【发布时间】:2015-04-01 19:14:42
【问题描述】:
我正在尝试从我的 Android Wear 手表获取音量:MOTO 360。 但是,我只从 Audiorecord.read 得到 0 个 PCM 值.....
我在一个单独的线程中运行记录过程。以下是我的代码摘录,你知道我做错了什么吗?
非常感谢您的帮助
jn.
REREDIT:MOTO 的新结果。看起来真的很奇怪!
03-15 20:38:08.740 1420-3994/? W/mot_vr_audio_hw:不允许唤醒(),因为 DSP 被禁用
重新编辑:我用不同的手表(索尼)尝试了我的代码。日志更明确
03-08 22:11:40.342 1165-1650/? D/MICRO:将在 15052 的缓冲区中以 44100Hz 记录
03-08 22:11:40.343 153-153/? E/AudioPolicyManager﹕startInput(21) failed: other input 19 already started
03-08 22:11:40.343 1165-1650/? E/AudioRecord﹕start() status -38
当 2 个音频记录对象同时处于活动状态时,似乎会触发此错误。但我很确定我的只开始了一次。你认为它可能是一个系统音频记录对象阻止我的启动吗?
编辑:我的服装清单中确实有这个 使用权限 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;
}
【问题讨论】:
标签: wear-os watch motorola audiorecord