Android的声波通信实例中如何传输11个0~9的数字以及代码详解

jkhuanghuaji 2015-01-10 04:24:23
从网上看到了一个声波通信例子,但自己琢磨不透,不知道他的原理,不懂他是怎么将数字转变成一个声波穿出去的,也不懂怎么把他改成能传输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();
}
}
...全文
436 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Erice 2017-09-22
  • 打赏
  • 举报
回复
它采用的思路是dtmf,将定义不同的频率代表一个码值。然后接收端检测这些频率。参看:http://blog.csdn.net/erice/article/details/77833041
xiehoushilianna 2016-01-18
  • 打赏
  • 举报
回复
这是一个发送端的代码,大体思路是将所要传输的数字 用一个单频声音信号来表示,比如,1对应2000HZ,而android可以使用AudioTrack来进行播放声音,所以就只需要产生对应频率的正弦波进行PCM编码,将编码后的数据放在byte[]数组中,再通过AudioTrack将这段数据发出去。你就听到声音了。声波识别真正难得是解码端
jkhuanghuaji 2015-01-10
  • 打赏
  • 举报
回复
求大神!!!

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧