Android的声波通信实例中如何传输11个0~9的数字以及代码详解
从网上看到了一个声波通信例子,但自己琢磨不透,不知道他的原理,不懂他是怎么将数字转变成一个声波穿出去的,也不懂怎么把他改成能传输11个0~9。求大神讲解。
private final static int[] CODE_FREQUENCY = { 1422, 1575, 1764, 2004, 2321, 2940, 4410 };//是什么意思??
下面这个函数的意思
public void gen(int genRate, int duration) {
if (STATE_START == mState) {
mGenRate = genRate;
mDuration = duration;
if (null != mListener) {
mListener.onStartGen();
}
// 定值16384
int n = mBits / 2;
int totalCount = (mDuration * mSampleRate) / 1000;
double per = (mGenRate / (double) mSampleRate) * 2 * Math.PI;
double d = 0;
LogHelper.d(TAG, "genRate:" + genRate);
if (null != mCallback) {
mFilledSize = 0;
// 获取要编码的数据
BufferData buffer = mCallback.getGenBuffer();
if (null != buffer) {
for (int i = 0; i < totalCount; ++i) {
if (STATE_START == mState) {
// 算出不同点的正弦值
int out = (int) (Math.sin(d) * n) + 128;
// 如果填充数量超过了缓冲区的大小,就重置mFilledSize,释放bufferData
if (mFilledSize >= mBufferSize - 1) {
// free buffer
buffer.setFilledSize(mFilledSize);
mCallback.freeGenBuffer(buffer);
mFilledSize = 0;
buffer = mCallback.getGenBuffer();
if (null == buffer) {
LogHelper.e(TAG, "get null buffer");
break;
}
}
// 转码为byte类型并保存,& 0xff是为了防止负数转换出现异常
buffer.mData[mFilledSize++] = (byte) (out & 0xff);
if (BITS_16 == mBits) {
buffer.mData[mFilledSize++] = (byte) ((out >> 8) & 0xff);
}
d += per;
} else {
LogHelper.d(TAG, "sin gen force stop");
break;
}
}
} else {
LogHelper.e(TAG, "get null buffer");
}
if (null != buffer) {
buffer.setFilledSize(mFilledSize);
mCallback.freeGenBuffer(buffer);
}
mFilledSize = 0;
if (null != mListener) {
mListener.onStopGen();
}
}