windows 音量设置mic输入“级别”中的坑(UAC开发)

最近在搞uac设备,客户给提了个需求,要求windows设置麦克风输入音量时要不进行音量操作保持音量不变。我当时就想“我根本就没开volume功能啊,这不是windows系统操作的么?”

后来研究发现,还真没这么简单。

windows10可以支持(USB audio)uac2.0 uac1.0版本,但是2.0不支持volume功能持。所以,如果我们在录音场景(录音机录音,会议软件通话,语音输入等)使用windows10的麦克音量设置时,实际上是麦克采集到的原始数据之后,windows在进行数字层面的放大、缩小。

但是,如果输入麦克是带有volume功能的uac1.0设备时,此选项是是通过标准uac的volume设置uac设备的输出音量,而不是收到的音量。这就是为什么在一些商业windows通话场景,需要uac设备开启volume功能,并将volume功能设置为空。防止windows改动音频数据导致通话时对方听到的全是爆音或者静音。

Chromecast with Google TV使用体验

家里的小米机顶盒经常自己会把分辨率设到1280*720,使用起来很不方便,经常需要手动去调整,另外1080P的分辨率也很难满足电视本身的4K需求。于是最近开始关注电视盒子,最终在Amazon Fire TV Max和Chromecast with Google TV之间选择了后者。

Google TV支持4K 60Hz SDR,HDR及杜比输出,我的电视设置杜比之后会花屏,应该是本身不支持。HDR模式正常。

激活之后首页会显示推荐的影片,这些影片可能来源自不同的平台,比如A在Netflix,B在Hulo,C在tubi,需要安装对应的APP。

片源方面,免费的电影很多,大部分都是4K HDR,5.1声道。不过有的会有广告。我体验了一下Netflix的4K效果真的是很不错。

另外首页也会根据你的观看记录推荐各个APP的视频。同时也可以使用语音功能去搜索,可以同时支持中文跟英文。

功能方面比较好的一点是,使用google TV的遥控器可以直接操作电视的音量跟开关机,这对于电视只有一个盒子的用户来说就很方便了,一个遥控器搞定一切。

激活时遇到的问题:

1、手机无法连接,最后不得已使用遥控器操作。
2、激活时需要DNS劫持,将time.android.com解析到国内的(阿里云)服务器。

[wordpress]wordpress升级失败解决办法

从很早开始,Wordpress就一直提升升级失败。最近站点被植入了木马程序只好重新安装。

重装之前那使用Duplicator插件导出之后可以很方便再次导入,浏览信息,图片等都会保存。

为了安全,不得不考虑升级Wordpress版本,过程中要不就是ftp登录不上,要不就是提示解码失败。于是开始寻找其他方案,没想到如此简单。

下载最新版之后解压到临时目录中,将wp-content目录删掉之后,其他所有文件及目录覆盖到原始wp目录。这样,再次登录之后会弹出更新数据库,点击确定即可完成升级。

You can also use the same methord to upgrade the Themes or other plugins. For example, if you want to upgrade one of you themes, just download the latest version and unzip is to wp-content/themes/. After refreshing, the new theme will appear in your site.

[NAS]synology 群晖 DS920+ NAS使用体会


        前一阵为了备份照片及一些资料,想到了之前一直想买的Nas。

其实最早已经使用树莓派+移动硬盘模拟了Nas的一些功能,比如局域网视频播放,离线下载等,但是在播放一些高清视频时,这种方式还是会有卡顿,于是就开始关注Nas。最终经过对比选择了群晖的DS920+。

920+有4个硬盘位,内置intelJ4125 4核CPU及4G DDR,两个千兆有线网卡及USB3.0。当时选择920+还有一个原因是因为配置能高点,想在其中安装虚拟机运行软路由系统(后来买了一直没折腾好久放弃了)。

Anyway,最后在咸鱼上买了同城的一个亚马逊直邮未开封的版本,比国行便宜不少。个人感觉从外观来看,颜值还是不错的。

上面是登录之后的主页,之后的操作跟本地电脑基本是一致的,很方便。
由于功能实在是太多,就提几个我觉得常用又比较好用的功能吧

1、下载:内置download station, 基本可以下载任何链接格式
2、Note station:笔记服务,类似有道云笔记,可以保存一些记录
3、moment:照片备份应用,可以将手机照片实时同步至NAS
4、Video/Audio station,可以组建自己的家庭多媒体平台
5、Git Server,建立自己的github
6、其他下载、同步功能,比如电脑数据自动同步,网盘数据(百度网盘,google driver,Onedriver等)自动同步
7、自己的个人网站(中国大陆默认端口应该无法实现)
8、虚拟机:安装其他的操作系统
其他还有docker,多人协作办公,语音会议,视频监控等各种功能。

比较重要的一点是,如果需要离家之后也能访问,需要网络运营商提供公网IP(或者也可以使用收费的内网穿透),synology注册之后会提供一个免费的二级域名,如果有公网IP,可以直接使用二级域名进行访问,比如mynas.synology.me。如果想通过自己的域名访问,可以将自己域名的CNAME指向上述域名。

之所以不建议自己的域名直接绑定公网ip,是因为现在运营商的公网IPV4是动态的,随时会变,但是synology的二级域名服务会检测当前的公网ip重新指向。

NAS运行的是修改的Linux系统,如果你是开发者,完全可以当成这是一台服务器,可以远程ssh,可以在上面进行各种开发,运行各种服务(前提是运营商允许)。

[Linux]RV1126 多pdm mic + 回采输入配置

由于RV1126 kernel驱动已经包含多数字mic及各种i2s输入,因此只需要针对dts进行配置。
如果是仅仅需要8mic pdm,则修改声卡使用pdm array就行。
同时需要pdm为okay及设定对应的pin(通道数),默认启用3pin(6声道)。
如果是需要多mic+2 路i2s回采输入,此时需要按照rk文档使用multi dais(启动multi dais可能回编译出错,需要联系rk提供patch),我的回采使用的是ES7243E,单芯片可以同时采两个声道,满足要求。
dts配置如下:
ip_dais: ip-dais {
status = “okay”;
compatible = “rockchip,rv1126-multi-dais”, “rockchip,multi-dais”;
#sound-dai-cells = <0>;
dais = <&i2s2_2ch>, <&pdm>;
capture,channel-mapping = <2 6>; #可以调整Mic与回采的顺序及通道数
playback,channel-mapping = <0 0>;
};
my_sound: my-sound {
status = “okay”;
compatible = “simple-audio-card”;
simple-audio-card,name = “rockchip,my_sound”;
simple-audio-card,format = “i2s”;
simple-audio-card,mclk-fs = <256>;
simple-audio-card,cpu {
sound-dai = <&ip_dais>;
};
simple-audio-card,codec {
sound-dai = <&es7243e>;
};
};
正常配置重启之后,执行arecord -L会显示有一个叫“my_sound”的声卡设备,说明配置成功。

[wordpress]另一个wordpress站点好像被黑了

好久没有打开另外一个WP站点了,今天打开一看竟然显示

error establishing a database connection

于是马上ssh过去一看,wp-config.php中数据库的信息全都被改了,地址指向一个德国的ip,怀疑当了肉鸡。

问题来了,如何反差对方是如何入侵并修改我的配置文件的。

oculus quest 2 使用体会

最近受网上一段视频的影响,入手了一个oculus quest2,这也是我的第一个VR设备。经过最近3个周的使用,越来越发现这个产品的体验真的很不错。
购买:我买的是quest2,亚马逊直邮的价格大约为2200人民币,后来又在TB,JD,PDD看了一下,价格也都差不多。有的还包激活+安装软件,但是需要开封。 最后我是在咸鱼上下单的,全新未拆封,包装盒也是美国亚马逊当时的箱子。

激活:激活需要facebook账号,同时需要无限制的互联网访问(TB上一些商家的套餐里会带特定路由器)。虽然我使用的网络本身并无限制,但是开机联网的时候还是提示连接限制。最后我通过手机配对,在手机上连接就可以了。

使用:由于是我的第一个vr设备,使用时候感觉效果非常好,真的是身临其境。尤其是看一些vr航拍视频,真的就感觉自己在飞机上飞行一样。
在看一些非VR视频时,可以通过手柄按钮调节虚拟屏幕大小。调到最大的时候效果相当于坐在影院前几排看电影的感觉。调到最小也相当于在家里看100寸电视的效果。同时,手柄的操作也是非常简单,而且定位非常准确,稳定。不会出现光标漂移。手柄使用的是5号电池,用了这么多天电量仍然是100%,看来低功耗是做的很好。
系统也支持手势操作,我也实验了一下,体验虽然不如手柄,但是正常使用也没有问题。手势操作时,会在画面中实时绘制你的手势,然后出现提示。
在激活开发者模式之后,也可以安装通用的android程序,比如爱奇艺之类的视频app。
另外,quest2还可以通过airlink或者有线方式连接电脑,玩steam vr游戏。我只试了FS2020,效果真是太逼真了。如果不是vr,我可能一辈子也体会不到坐在飞机的驾驶舱内,点击一个个真实的按钮操作飞机起飞的体验。感觉自己就是在操纵一架真实的飞机。

头盔耗电方面,每次充满电大约能使用5个小时左右,也算比较正常。

 

缺点:
作为一个vr头盔,缺点也有一些
1、带起来前重后轻,容易下坠。
2、戴眼镜看不太舒服。虽然自带眼睛托架,但还是有点难受。
3、需要特殊网络。

 

[Linux]最近遇到的奇怪的不同平台编译相同代码生产的elf运行不一致问题

在不同的平台上(virtualbox/vmware/windowssubsystem),编译出的elf运行不一致,有的平台运行之后一直高频率进input dma中断。

查看主要的库版本,libc libm等版本一致,操作系统为ubuntu,大版本一致,小版本有差别。从现象上看怀疑工具链在不同平台运行有问题。

后来平台编译信息对比,发现最后的链接顺序不一样。正常的平台按照异常的平台的链接顺序编译的话,也是无法运行。

由于问题跟中断有关,无法用gdb进行单步跟踪,只好用其他方法。

中断分析:
正常状态下,input dma中断为10ms一次(100hz),发现出问题时dma的中断频率为(730hz)。之后发现另外的一个现象,修改某个函数的代码,之前正常的平台编译出来的elf运行也是730hz。 两个不同的行为出现了相同的现象。

于是,要来了DMA与dma搬运数据的codec模块寄存器表,发现dma一切正常,但是codec异常,寄存器全部为默认值。此时开始怀疑模块没有初始化。后来跟踪代码发现,codec模块初始化是由一个判断控制。这个判断用于一个power模块,而这个模块又没有使用。此时这个判断会从0地址去获取数据用于判断。

由于不同的链接顺序下,0地址的代码并不一致,从而导致的不同平台的不同表现。至于修改某个函数的代码也会出现,恰恰是这个函数被链接到了0地址,从而也引发了相应的现象。

现在回头想的话,在修改代码也出现问题的时候,应该去怀疑对应的地址的变化会导致出问题。当然最终定位还是需要看寄存器的相关信息。

 

[linux]select实现非阻塞异步输入

最近要实现一个非阻塞输入的C代码,查到可以通过select函数来完成。
select用于同时监控多个fd,在io可读/写时返回。
正常来说,select是阻塞的,除非超时或者等待的fd内容发生变化。因此,我我们将select的超时时间设为0,便可以非阻塞。按照返回来判断当前监视的fd内容是否变化,从而根据这个返回进行相应的操作。
以下为根据select man page修改的非阻塞输入的代码。
int main(void)
{
fd_set rfds;//fd集合
struct timeval tv;
int retval;
/* Watch stdin (fd 0) to see when it has input. */
/* Wait up to five seconds. */
char c;
char buf[100];
while(1)
{
//select返回后会把以前加入的但并无事件发生的fd清空,则每次开始select前都要重新从array取得fd逐一加入
FD_ZERO(&rfds);
FD_SET(0, &rfds); //监控fd为0,也就是stdin
//FD_ISSET(int fd, fd_set *set);//若存在多个fd,可以用此接口逐个判断
tv.tv_sec = 0; //时间设0,无论fd有没有数据均继续运行
tv.tv_usec = 0;
retval = select(1, &rfds, NULL, NULL, &tv); //1 here means (fd=0)+1,see man page
/* Don’t rely on the value of tv now! */
if (retval == -1)
perror(“select()”);
else if (retval)//select检测到有数据之后,通过read读fd=0的数据
{
int ret = 0;
ret = read(0, buf, 100);
if(ret > 0)
{
int i = 0;
for(i = 0;i < ret; i++)
printf(“%c”, buf[i]);
}
//printf(“Data is available now.\n”);
}
/* FD_ISSET(0, &rfds) will be true. */
else//此处为非阻塞正常运行的程序
{
//printf(“No data\n”);
}
retval = 0;
}
exit(EXIT_SUCCESS);
}

[心情]premium是最值得买的视频会员

一般来说,y超过15s的广告都可以在5s之后跳过,因此单次广告时长最多15s。但是由于有的上传用户为了盈利,在视频中间自行增加多次广告,会很大的影响观看体验。

买了会员才发现,这是我买的最值的一个会员了,这个会员不会让你得到更清晰的视频和更快的加载速度,因为这些对任何用户都没有限制。

主要优势在于:

1、无广告。不仅视频中间无广告,视频开始,app页面,网页版播放页面全部一点广告也没有。不会跟某些国内视频厂商有所谓的会员专属广告和跳过广告。

2、视频下载。可以以最高1080p的分辨率将视频到本地。当然,这个在andriod下可以使用各种y downloader进行下载。

3、音乐会员,同样是无广告,可以下载。很简单的使用界面。缺点是中文歌曲不是很完整。

当然劣势就是价格,如果自行购买一年大概6,700人民币。不过,可以在tb上购买拼车的家庭会员,一年8,90块钱就可以。另外如果自己购买可以使用印度代理购买印度区会员,价格也能稍微便宜,一年大概50人民币。