个人PC音频系统构建
个人PC音频系统部署
音频系统必然要使用舒适,就不能简单,最起码的功能:
音乐播放单独一个音频通道
让手机声音进入宿主进行统一管理
要有一个备用提供给其他软件的音频通道
人声通道 和 效果通道
音乐通道环绕声
个人喜欢整点花活 所以必须有 变声
前置准备
PC1
PC2
主力机
辅机
192.168.3.2
192.168.3.1
还有声卡设备 , 我选用的是 midiplus studio m 和一个手机声卡
一根双绞线
主力机声卡驱动 midiplus
主力机声音设置录制
播放
主力机宿主跳线输入
输出
创建音轨后
这一套下来音乐伴奏就已经独立通道了,它的音乐环绕效果靠插件实现 ,DearVR pro 插件
让插件读取我画在包络线上的路径去控制 插件中的 X 和 Z 轴 并且 将包络线路径循环读取运作就实现了音乐环绕效果
手机声音处理将手机输出 到 手机声卡 , 后将手机声卡与主力机连接 ,此时Voicemeeter Banana 会识别到设备,将设备Inout 选中手机声卡
将Out 处的 A1 输出到 5 ...
LeetCode题解 19.删除链表的倒数第 N 个节点
19.删除链表的倒数第 N 个节点
解题思路:
1.首先拿到链表需要做预处理,如果为空或 <=0 就返回原链表
2.然后开始用 current指针遍历 ,并计数有多少节点
3.处理 counter 和 position 相同就是删除头节点
4.遍历结束就可以 将 current 重置 指向头节点, counter(链表节点总数) - position 就得到正向索引值
5.用for 指向目标节点的前一个节点,将目标节点的 前后节点相连,目标节点自然就会脱离链表,最后delete 将其释放
123456789101112131415161718192021222324252627282930313233343536373839// struct ListNode {// int val;// ListNode *next;// ListNode() : val(0), next(nullptr) {}// ListNode(int x) : val(x), next(n ...
逆向工程 - 外挂 PACIFY安抚
逆向工程 - 外挂 PACIFY安抚
人在焦虑中总是要逃避一小段时间 , 比如玩游戏 ,可是多巴胺消退不再给我刺激时 ,焦虑还是会萦绕于心 ,不面对就永远无法摆脱。 ——jelly
兴趣于学业结合我也会想短短的逃避一下,但又不能抛弃学业,陷入其中
我会在玩游戏的时候 ,去对一个游戏逆向工程,这就是兴趣于学业结合
我做了什么
首先就是内存地址
我采用 Github开源的 ImGui框架 编写
我获取到了游戏的 关键的 模块地址,基址,内存偏移,我把他们写在如下
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 ...
开放节点资源
开放分享的节点,点击节点页面可获取Linked:加入群组:Butterfly
节点页面:Butterfly
V2rayN: Butterfly
V2rayNG: Butterfly
Xray-core: Butterfly
Cheat Engine编译
事情起因我想自己重新编译一个最新的Cheat Engine在配置文件和项目设置里改了一通。
点击编译,结果发现 ????
Cheat Engine Release 64-Bit O4 AVX2 ,Error: Identifier not found “ExtractFileNameWithoutExt”
然后我上 stackoverflow 也没找到解决办法 最后在一则 Issues 找到了原因https://github.com/cheat-engine/cheat-engine/issues/2642
原来是环境问题 新版本的lazarus编译不起作用 ,我尝试了2.2.4版本的lazarus 编译正常通过
从Lazarus 2.2开始,FileUtil中的某些功能在较新的版本中已更改为LazFileUtils ,ExtractFileNameWithoutExt这个函数在 LazFileUtils 中,而不是在较新的 Lazaruses 中的 FileUtil 中
还是太粗心大意了,这就是不看文档的后果,踩到不该踩的坑
解决采用旧版本lazarus ,2.2.4 或2. ...
C++ 链接表从 0 到 1 的实践应用
C++ 链接表从 0 到 1 的实践应用
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 ...
与GPT的题目问答1
容器的选择
GPT: 在什么情况下,你会选择使用std::vector而不是std::list?请解释你的理由。
答:在存储大量且连续的数据会使用 vector,因为vector的容量的扩充是 以幂次扩充的它特别适合存储大量且连续的数据,相对于list 它还有迭代器的随机访问能力,时间复杂度是O1,这是list做不到的,std::vector在需要频繁随机访问和插入/删除操作主要集中在末尾时性能更优。相比之下,std::list在需要频繁在中间插入或删除元素时更合适,因为它的插入和删除操作不涉及大量元素的移动。
GPT: 描述std::map和std::unordered_map的主要区别,以及它们各自的使用场景。
答:他们两个的区别仅仅在于 ,std::map是基于红黑树实现的,键值对有序且键不允许重复。std::unordered_map是基于哈希表实现的,键值对无序但键同样不允许重复。如果需要保持元素的排序顺序,应该使用std::map;如果不需要排序但更关注查找效率,可以使用std::unordered_map,它提供平均O(1)的查找复杂度
迭代器的类型
GPT: 请解 ...
LeetCode题解 13.罗马数字转整数
13.罗马数字转整数
解题思路:
1.首先 既然是罗马转阿拉伯数字 那就是接受参数无外乎是字符串的 ‘I’,’V’,’X’,’L’,’C’,’D’,’M’
2.然后将接受的字符串 转换成 字符数组
3.接下来很自然的用到 switch() ,将罗马数字按照依次判断,然后将对应的阿拉伯数组 放在对应整形数组中
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。
4.IV是表示4 , 相当于 V 减去 前面的 I,这样就可以转换阿拉伯数字后,按照这样运算就能求出正确结果,只需要判断 if(num[n] < num[n+1]) 如果成立,则需要减去 num[n] 的数,如果不成立则需要把 num[n] 加进sum
5.最后再累加整形数组中的最后一位元素,返回sum
1234567891011121314151617181920212223242526272829303132333435class S ...
LeetCode题解 35.搜索插入位置
35. 搜索插入位置
解题思路:
1.函数传入 2个参数 ,一个是vector容器以引用传递 , 一个是target目标值
2.用for循环遍历容器 去判断当前循环的nums[i] 是否 == target ,成立则返回其索引,反之则判断 target < nums[i] 如成立则 插入到 nums.begin{} + i 处的索引,并返回索引数值
3.循环外是末尾添加的情况 ,在nums数组末尾添加target,并返回最后数组的下标
123456789101112131415161718class Solution {public: int searchInsert(vector<int> &nums, int target) { for (int i = 0 ; i < nums.size() ; ++i) { if (nums[i] == target) { ...
自我约束
公约
每日任务:
每日一题:每天至少完成一道数据结构或算法题。可以从LeetCode、HackerRank、CodeSignal等平台选择题目。
学习笔记:完成题目后,写一篇简短的学习笔记,记录解题思路、遇到的困难及解决方法。
长期任务:
每月总结:每月末总结本月完成的题目,分析进步和需要改进的地方。
专项突破:每月选择一个数据结构或算法专题(如排序算法、图算法、动态规划等)进行深入学习,并至少完成相关的10道题目。
惩罚机制
每日惩罚:若未完成每日任务,逐次减少1小时娱乐时间,如达到2次以上失去所有娱乐时间,将任务完成即恢复。
每周惩罚:若未完成一周目标,周末取消一次休闲活动
Habitica
需要搭配 Habitica使用 ,设定自定义的任务
工具
地址
Habitica
https://habitica.com/