android/iphone/windows/linux声波通讯库

来源:互联网 发布:淘宝售前和售后哪个累 编辑:程序博客网 时间:2024/06/04 23:20

声波通讯让传统的各种linux设备,单片机设备等等能编程的设备与智能手机之间有了数据传输的能力,这在智能家居、医疗设备、工业应用等各个行业有了大力应用的机会。

声波通讯让电脑与手机连通:电脑一般都有音箱或者扬声器,而手机具有麦克风。这样数据通过声波就很容易的打通电脑与手机之间的通讯。比如说我们每次电脑与手机之间传输文件都是要先连接usb数据线,而且经常连不上,不要说电脑小白了,就连我是专门搞IT的连接数据线的时候都经常不灵,需要不停的插拔手机与数据、或者手机与数据线,甚至重启电脑,这些问题我经常都不知道是什么原因让线又不灵了。而声波很容易就搞定这些问题了:电脑播放声波,这样1秒就能让电脑连接上手机,就可以传输任何东西了。

 

电脑与手机可能还有很多的应用场景,这里另外分享一个,大家有一些好的想法可以分享出来讨论讨论,说不定有一些好的创意可以发展成好的项目。在今年年初的时候,以色列的SlickLogingoogle收购,google看中的项目是什么呢?简单一点说,他们就是使用声波做安全认证。详细的产品功能流程是这样的:在电脑上进行某个网页或某个产品等进行登陆的时候,要让网站通过用户电脑的扬声器播放一段特殊的声音(人耳无法听到的高频声音,给人的感觉几乎就是静音的),只要将手机放在电脑前,便可通过高频声音完成验证过程,无须再输入认证码。

 

声波通讯库特征

简单说一下android/iphone/windows/linux声波通讯库特征:

可传输数字,字母,汉字等任意字符

支持双向传输

支持设置声音传输频段

支持设置声音采样率

准确性95%以上,其实一般是不会出错的。 

接口非常简单,有完整的示例,3分钟就可以让你的应用增加声波通讯功能 

抗干扰性强,基本上无论外界怎么干扰,信号都是准确的 

基本的编码为16进制,而通过编码可传输任何字符 

性能非常强,没有运行不了的平台,而且通过内存池优化,长时间解码不再分配新内存,可7*24小时运行 

可支持任何平台,常见的平台android, iphone, windows, linux, arm, mipsel都有示例 

库大小(android版):jar+so一起大概90k左右。.a链接的话加入声波通讯后可能使原可执行文件增加40k-60k

 

Android工程示例:

 

Android工程项目使用步骤:

1,添加录音权限:

AndroidManifest.xml文件中添加:<uses-permission android:name="android.permission.RECORD_AUDIO" />

2,加入库到工程中:

armeabi\libvoiceRecog.sovoiceRecog.jar加入到库路径下(一般为libs目录)

3,导入so库:

    static {

        System.loadLibrary("voiceRecog");

}   

 

 

Ios版工程示例:

 

在下载的工程源码中,在工程目录下有libcvoiceRecognize.a是真机版的库,libcvoiceRecognize_simulator.a是模拟器版的库,自己在xcode环境中根据自己的需要链接不同的库即可。

 

Windows工程示例

可传输任意数据内容,包括数字,字母,各种语言字符:

 

 

支持双向传输:

双向传递时一般设置为“不接收自己发送的信号”模式。

 

 

各平台的demo工程需注意:

windows音频支持:

有麦克风,音量,是否静音,不要打开“增强音效”功能

 

 

Linux工程示例

Linux下识别数字,字母,ssid和密码组成的wifi信息:

 

 

编程接口


发送端接口:

/************************************************************************ android/iphone/windows/linux声波通讯库声波通讯库特征: 准确性95%以上,其实一般是不会出错的。 接口非常简单,有完整的示例,3分钟就可以让你的应用增加声波通讯功能 抗干扰性强,基本上无论外界怎么干扰,信号都是准确的 基本的编码为16进制,而通过编码可传输任何字符 性能非常强,没有运行不了的平台,而且通过内存池优化,长时间解码不再分配新内存,可7*24小时运行 可支持任何平台,常见的平台android, iphone, windows, linux, arm, mipsel都有示例 详情可查看:http://blog.csdn.net/softlgh 作者: 夜行侠 QQ:3116009971 邮件:3116009971@qq.com ************************************************************************/  #ifdef VOICE_RECOG_DLL#define VOICERECOGNIZEDLL_API __declspec(dllexport)#else#define VOICERECOGNIZEDLL_API#endif#ifndef VOICE_PLAY_H#define VOICE_PLAY_H#ifdef __cplusplusextern "C" {#endiftypedef void (*vp_pPlayerStartListener)(void *_listener);typedef void (*vp_pPlayerEndListener)(void *_listener);/************************************************************************//* 创建编码端发送对象/************************************************************************/VOICERECOGNIZEDLL_API void * vp_createVoicePlayer();/************************************************************************//* 发送端编码并发送数据/* 该函数以异步的形式工作,不阻塞主线程,判断是否发送完成由下面的vp_isStopped/* _data为任意数据,以十六进制的形式发送/* _dataLen为需发送的数据内容长度/************************************************************************/VOICERECOGNIZEDLL_API void vp_play(void *_player, char *_data, int _dataLen, int _playCount, int _muteInterval);//设置播放监听器VOICERECOGNIZEDLL_API void vp_setPlayerListener(void *_player, void *_listener, vp_pPlayerStartListener _startListener, vp_pPlayerEndListener _endListener);/************************************************************************//* 设置声波发送端音量/* _volume为0-1之间的浮点数,0为无声,1为最大/************************************************************************/VOICERECOGNIZEDLL_API void vp_setVolume(void *_player, double _volume);/************************************************************************//* 设置声波发送端频段/************************************************************************/VOICERECOGNIZEDLL_API void vp_setFreqs(void *_player, int *_freqs, int _freqCount);/************************************************************************//* play函数以异步的方式播放并发送,在销毁对象之前需确保播放已经完成/************************************************************************/VOICERECOGNIZEDLL_API int vp_isStopped(void *_player);/************************************************************************//* 销毁声波发送端对象/************************************************************************/VOICERECOGNIZEDLL_API void vp_destoryVoicePlayer(void *_player);//应用层发送方接口//返回4bit个数int vp_encodeData(char *_data, int _dataLen, char *_result);VOICERECOGNIZEDLL_API void vp_playString(void *_player, char *_str, int _playCount, int _muteInterval);/************************************************************************//* 发送端编码并发送wifi信息,以mac,pwd的形式/************************************************************************/VOICERECOGNIZEDLL_API void vp_playWiFi(void *_player, char *_mac, int _macLen, char *_pwd, int _pwdLen, int _playCount, int _muteInterval);/************************************************************************//* 发送端编码并发送wifi信息,以ssid,pwd的形式/************************************************************************/VOICERECOGNIZEDLL_API void vp_playSSIDWiFi(void *_player, char *_ssid, int _ssidLen, char *_pwd, int _pwdLen, int _playCount, int _muteInterval);/************************************************************************//* 发送端编码并发送手机标志信息,(imei,手机名字)/************************************************************************/VOICERECOGNIZEDLL_API void vp_playPhone(void *_player, char *_imei, int _imeiLen, char *_phoneName, int _nameLen, int _playCount, int _muteInterval);#ifdef __cplusplus}#endif#endif


接收端接口:

/************************************************************************ android/iphone/windows/linux声波通讯库声波通讯库特征: 准确性95%以上,其实一般是不会出错的。 接口非常简单,有完整的示例,3分钟就可以让你的应用增加声波通讯功能 抗干扰性强,基本上无论外界怎么干扰,信号都是准确的 基本的编码为16进制,而通过编码可传输任何字符 性能非常强,没有运行不了的平台,而且通过内存池优化,长时间解码不再分配新内存,可7*24小时运行 可支持任何平台,常见的平台android, iphone, windows, linux, arm, mipsel都有示例 详情可查看:http://blog.csdn.net/softlgh 作者: 夜行侠 QQ:3116009971 邮件:3116009971@qq.com ************************************************************************/  #ifdef VOICE_RECOG_DLL#define VOICERECOGNIZEDLL_API __declspec(dllexport)//#else//#ifdef WIN32//#define VOICERECOGNIZEDLL_API __declspec(dllimport)#else#define VOICERECOGNIZEDLL_API//#endif#endif#ifndef VOICE_RECOG_H#define VOICE_RECOG_H#ifdef __cplusplusextern "C" {#endifenum VRErrorCode{VR_SUCCESS = 0, VR_NoSignal = -1, VR_ECCError = -2, VR_NotEnoughSignal = 100, VR_NotHeaderOrTail = 101, VR_RecogCountZero = 102};enum DecoderPriority{CPUUsePriority = 1//不占内存,但CPU消耗比较大一些, MemoryUsePriority = 2//不占CPU,但内存消耗大一些};typedef enum {vr_false = 0, vr_true = 1} vr_bool;typedef void (*vr_pRecognizerStartListener)(void *_listener, float _soundTime);//_result如果为VR_SUCCESS,则表示识别成功,否则为错误码,成功的话_data才有数据typedef void (*vr_pRecognizerEndListener)(void *_listener, float _soundTime, int _result, char *_data, int _dataLen);//创建声波识别器VOICERECOGNIZEDLL_API void *vr_createVoiceRecognizer(enum DecoderPriority _decoderPriority);VOICERECOGNIZEDLL_API void *vr_createVoiceRecognizer2(enum DecoderPriority _decoderPriority, int _sampleRate);//销毁识别器VOICERECOGNIZEDLL_API void vr_destroyVoiceRecognizer(void *_recognizer);//设置解码频率//总共需16+3个频率,依次为1个开始字符, 0-f的16进制字符,1个重复标志字符,1个结束字符//_freqs数组是静态的,整个解码过程中不能释放VOICERECOGNIZEDLL_API void vr_setRecognizeFreqs(void *_recognizer, int *_freqs, int _freqCount);//设置识别到信号的监听器VOICERECOGNIZEDLL_API void vr_setRecognizerListener(void *_recognizer, void *_listener, vr_pRecognizerStartListener _startListener, vr_pRecognizerEndListener _endListener);//开始识别//这里一般是线程,这个函数在停止识别之前不会返回VOICERECOGNIZEDLL_API void vr_runRecognizer(void *_recognizer);//暂停信号分析VOICERECOGNIZEDLL_API void vr_pauseRecognize(void *_recognizer, int _microSeconds);//停止识别,该函数调用后vr_runRecognizer会返回//该函数只是向识别线程发出退出信号,判断识别器是否真正已经退出要使用以下的vr_isRecognizerStopped函数VOICERECOGNIZEDLL_API void vr_stopRecognize(void *_recognizer);//判断识别器线程是否已经退出VOICERECOGNIZEDLL_API vr_bool vr_isRecognizerStopped(void *_recognizer);//要求输入数据要求为44100,单声道,16bits采样精度,小端编码的音频数据//小端编码不用特别处理,一般你录到的数据都是小端编码的VOICERECOGNIZEDLL_API int vr_writeData(void *_recognizer, char *_data, int _dataLen);//应用层解码接口int vr_decodeData(char *_hexs, int _hexsLen, int *_hexsCostLen, char *_result, int _resultLen);VOICERECOGNIZEDLL_API vr_bool vr_decodeString(int _recogStatus, char *_data, int _dataLen, char *_result, int _resultLen);//传输层中数据类型标志enum InfoType{IT_WIFI = 0//说明传输的数据为WiFi, IT_SSID_WIFI = 1//ssid编码的WIFI, IT_PHONE = 2//说明传输的数据为手机注册信息, IT_STRING = 3//任意字符串};VOICERECOGNIZEDLL_API enum InfoType vr_decodeInfoType(char *_data, int _dataLen);//wifi解码struct WiFiInfo{char mac[8];int macLen;char pwd[80];int pwdLen;};VOICERECOGNIZEDLL_API vr_bool vr_decodeWiFi(int _result, char *_data, int _dataLen, struct WiFiInfo *_wifi);struct SSIDWiFiInfo{char ssid[32];int ssidLen;char pwd[80];int pwdLen;};VOICERECOGNIZEDLL_API vr_bool vr_decodeSSIDWiFi(int _result, char *_data, int _dataLen, struct SSIDWiFiInfo *_wifi);struct PhoneInfo{char imei[18];int imeiLen;char phoneName[20];int nameLen;};VOICERECOGNIZEDLL_API vr_bool vr_decodePhone(int _result, char *_data, int _dataLen, struct PhoneInfo *_phone);#ifdef __cplusplus}#endif#endif



详情可查看:http://blog.csdn.net/softlgh
作者: 夜行侠 QQ:3116009971 邮件:3116009971@qq.com


库及源码下载


相关参考:


声波通讯的原理

3分钟为你的应用添加声波通讯功能

android/iphone/windows/linux声波通讯库

Android/iphone手机通过声波初始化智能设备的WIFI信息





0 0
原创粉丝点击