我试图从android上的麦克风计算响度级别.我使用AudioRecord从麦克风获取原始数据,并进行了一些归一化并在此之后计算出分贝.但结果不对.我得到的分贝值不稳定,无法反映声音.比如即使我拍手时,分贝值也没有反映出声音.我该如何更改代码?如果我想实时计算麦克风的响度,我该怎么办?非常感谢.
recorder = new AudioRecord(AudioSource.MIC, iSampleRate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, iAudioBufferSize);
iBufferReadResult = recorder.read(buffer, 0, iAudioBufferSize);
for (int i = 0; i < buffer.length-1; i++)
{
ByteBuffer bb = ByteBuffer.wrap(buffer, i, 2);
int isample = bb.getShort();
double dsample =(double) isample / 32768.0;
sum += (dsample*dsample);
double rms = Math.sqrt(sum/(buffer.length*0.5));
double decibel = 20*Math.log10(rms);
sum = 0;
}
}
Run Code Online (Sandbox Code Playgroud) 现在很多智能手机都有不止一个麦克风.一个用于语音输入,另一个用于降低环境噪声.
我想知道如何独立访问两个麦克风的信号?或者关闭其中一个麦克风?
欢迎任何想法或意见.非常感谢.
我正在使用 Channel 将音频数据从穿戴设备发送到手持设备。但是,当我将数据写入通道流时,程序有时会卡在将数据写入流的代码处并抛出异常:
com.google.android.gms.wearable.ChannelIOException: Channel 在流完成之前意外关闭。
我没有找到很多与我类似的问题。有没有人对如何解决它有一些想法?非常感谢您的时间!
我用来将数据写入通道的代码是:
// OS is the output stream to write the data into the local file system on the android wear device.
if(null != os){
while(isWriting){
read = audioRecord.read(data, 0, recBufSize);
if(AudioRecord.ERROR_INVALID_OPERATION != read){
try {
if(sChannelOutputStream!=null) {
Log.d(Constants.TAG,"Schanneloutput write starts+ readsize:"+read);
sChannelOutputStream.write(data);
Log.d(Constants.TAG, "Schanneloutput write ends");
}
os.write(data);
} catch (IOException e) {
e.printStackTrace();
}
}
}
try {
os.close();
if(sChannelOutputStream!=null){
Log.d(Constants.TAG,"Schannel out close");
sChannelOutputStream.close();
sChannelOutputStream = null;
}
} catch (IOException e) …Run Code Online (Sandbox Code Playgroud) 我正在研究一个分类问题,它有不同的传感器.每个传感器收集一组数值.
我认为这是一个分类问题,并希望使用weka作为此问题的ML工具.但我不确定如何使用weka来处理输入值?哪个分类器最适合这个问题(一个特征的实例是一组数值)?
例如,我有三个传感器A,B,C.我可以将所有传感器中的5个采集数据定义为一个实例吗?例如,A的一个实例是{1,2,3,4,5,6,7},B的一个实例是{3,434,534,213,55,4,7).13 C {424,24,24,13,24,5,6}.
非常感谢您抽出时间审阅我的问题.