使用JDK~6&需要对一系列浮点数进行采样。
我想在Android API 10上实现音高检测,它没有YIN使用的javax.sound.sampled包。 API 10确实有RecordAudio,它可以使用read(byte / short [] int pos,int size)传递字节或短路。
什么会优化性能? A)扩展Android 1.5的RecordAudio以获得到YIN的浮动(我的首选方法)或 B)从RecordAudio获取短路,将它们转换为浮点数,然后将它们传递给YIN输入缓冲区。
在任何一种情况下,我都不知道找到短裤的合适方法 (44100,PCM16,签名,单声道,小恩典)浮动。
任何指导意见。
答案 0 :(得分:0)
您可以在this课程中找到所需的算法。
答案 1 :(得分:0)
这应该有效
f = (float) (short) (((short)wavData[i] & 0xFF) + (((short)wavData[i+1] & 0xFF) << 8));
其中wavData
只是一个原始字节数组,从波形文件中读取。
它适用于所有采样率,任何通道数(单声道和立体声)。它仅适用于16位PCM,顺便说一下,它通常是有符号的,但它可以扩展为更大的分辨率。