1. 打开设备
snd_pcm_t *handle; /* Open PCM device for playback. */ rc = snd_pcm_open(&handle, "default", SND_PCM_STREAM_PLAYBACK, 0); if (rc < 0) { } 默认是block阻塞方式读写,可以设置成non-block模式。 SND_PCM_NONBLOCK 或 snd_pcm_nonblock()
2. 非阻塞方式写入(一般来说按阻塞方式来写代码就好了,ALSA里面已经写好了,就不要自己做重试操作了)
就是过一段时再尝试的意思
int rc = snd_pcm_writei(handle, buf, n /4 ); printf("done. rc=%d\n", rc); while(rc < 0) { if(rc == -EAGAIN ) { int ms = 20; timespec ts; ts.tv_sec = ms / 1000; ts.tv_nsec = (ms % 1000) * 1000000; nanosleep(&ts, NULL); rc = snd_pcm_writei(handle, buf, n /4 ); } }
第三个参数是frame的个数。对于一个S16 / Stereo的音频, 其frame = 2 * 2 = 4,即微软定义的BlockAlign参数。
如果使用默认的BLOCK模式, 则此writei函数会阻塞直到写入成功。当写入成功时, 返回值rc总是等于传入的frame数。
当为NON-BLOCK模式时,如果内部缓冲区满,则返回-EAGAIN (-11)。注意EAGAIN=11,需要加一个负号。
这个函数要么完全写入,要么返回-EAGAIN,不会发生只写入一部分的情况。
"极星亲友定位": 简单实用,是一款适用于家人、朋友间的定位软件,实时查询对方的位置并以地图方式展示。非常适合用于家人间使用,少一份担心,多一份安全保证,能及时知道家人的去向,能避免找不到孩子、老人等情形。
(其实时性、自动特性,可以在很大程度上保证家人遇到危险时不掉链子)
不需要对方会使用智能手机,因为软件可以设置白名单自动回复,不需要对方作任何操作就能获取对方的位置。
不需要对方打开软件回复,也不需要事先启动软件。
下载位置:360市场(可以用360手机助手下载, 关键词“极星”,“极星亲友定位”)
- 双方只要安装了本软件,并打开了GPS功能(一般手机都已经打开了),即输入对方手机号、查询位置。
- 可以从通讯录中选择联系人,或从“最近联系人”菜单中直接选择。
- 白名单用于指定受信任的联系人,对他们的查询请求会自动回复。
- 集成地图展示功能,如果手机已经安装了百度地图软件,则可以在地图上展示对方的位置。
- 可以防止误操作:发送按钮采用延时反应设计,只有在按下约1秒后才算是确认发送,并以振动和文字提示您发送成功。
----------------------------------------------------------------------------------------------------------------------------------