从相位声码器到共振峰修正:人声变调插件源码复刻与音频工程实践
简介一份面向音频制作人与音乐创作者的LittleAlterBoy VST插件源码包覆盖人声音高修正、音色重塑和特殊效果生成等常见需求无论新手还是专业制作人都能快速上手应用。该插件以直观的控制和灵活的人声处理算法著称常用于电子音乐、嘻哈与人声实验等风格中。压缩包体积仅4KB共包含3个文件由html说明页面、inscode配置和gitignore辅助文件组成便于查看源码结构、运行说明及版本管理整体十分精简。目前已有382人学习/下载尤其适合电子音乐制作、录音后期、现场演出等场景中的VST插件使用者。借助该压缩包用户可直接获得相关源码和页面文件免去网上盲目搜索的周折同时也可借鉴社群互助分享音频资源的经验为后续获取更多VST工具、参与音乐制作社区交流打下基础。1. LittleAlterBoy 这类插件到底值不值得读源码LittleAlterBoy 这类插件的核心卖点是把音高Pitch和共振峰Formant拆成两个独立旋钮。很多第一次接触源码的人会想当然变调不就是把音频变速再重采样吗真这么做人声直接变成“小矮人”——变速和重采样会把基频和共振峰一起搬走音高变了音色也跟着塌掉。而这类插件的源码价值恰恰在于用相位声码器在频域搬移基频再用共振峰修正把音色拉回来两条链路既独立又共用同一组频谱帧。它适合两类人想用好插件的制作人以及想复刻它的开发者。前者的收获是知道那些旋钮背后在干什么、边界在哪后者能拿到一条可运行的最小实现路径从 STFT 到共振峰补偿每段都有代码、参数和坑。2. 复刻前先想清楚两件事声码器选型与模块边界2.1 为什么音高不能靠“重采样”一条路走到顶基频与共振峰的耦合关系人声的频谱可以粗略拆成两层底层是基频及其谐波决定你听到的“音高”上层是频谱包络的共振峰决定“这是谁在发声”。重采样会把整个频率轴等比压缩或拉伸基频和共振峰同时被搬动。男声升 4 个半音后基频变高了共振峰也跟着上移还原出来的声音像动画片里的角色——不是“这个人在升高”而是“这个人变成了另一个人”。所以变调要做的是“解耦”把基频挪到目标位置再把共振峰留在原位或按需要单独挪。这个解耦在时域做很别扭在频域却很自然——先把一帧频谱拆成幅度谱和相位谱幅度谱决定音色相位谱决定谐波对齐关系搬移基频只需要对频率轴做缩放搬回共振峰只需要对包络再做一次反向缩放。两个操作共用一组复数谱避免二次 STFT 带来的相位损失。这就是 LittleAlterBoy 这类插件和普通播放器变速的本质区别。播放器的变速重采样是一次性缩放插件则是把缩放拆成多次叠加每次只动频域里的一个量。源码里真正值得读的就是这几次叠加怎么共用同一批 STFT 帧、怎么避免各自为政导致音色劣化。2.2 三种主流算法怎么选PSOLA 只适合短句相位声码器适合连续人声复刻前先选算法。做变调的常见路线有三条PSOLA在时域精确检测基音周期按周期切帧、复制或删减再拼接。优点是短句语音质量极高缺点是需要可靠的基频检测尔和声、气声、快速转音就翻车而且不适合做“实时连续可调”。相位声码器STFT 分帧后在频域对相位做累加来改变频率时间轴不动。优点是连续人声、乐器都稳支持实时连续滑音缺点是瞬态辅音、打击有预回声和金属味需要额外补偿。WSOLA时域波形相似性重叠相加擅长变速不擅长变调。变调要先变速再重采样中间多一次插值音质损失叠加而且偏移范围一大就出现“镶边”。LittleAlterBoy 这类实时人声插件场景是连续演唱、配音、直播选相位声码器是主流。实际商业源码里通常还会加“相位锁定”Phase Lock来抑制金属味低频 bin 做相位累加高频 bin 参考相邻低频 bin 的相位保证谐波之间不发散。2.3 模块划分与参数表Pitch、Formant、Robot、Tremolo 各管什么拿到源码不要一上来读算法先按旋钮把模块切分好。这类插件的典型参数表和对应模块如下参数范围作用对应模块实现要点Pitch-12 ~ 12 半音基频搬移量PitchShifterα 2^(st/12)ω 域缩放Formant-12 ~ 12 半音共振峰搬移量FormantShifterβ 2^(st/12)包络映射Robot0 ~ 100%音高量化成半音台阶Robotizer对 st 取整后再算 αTremolo深度 速率周期性音量起伏Modulator低频 LFO 乘增益Mix0 ~ 100%干湿比DryWetMixy dry*(1-m)wet*m模块边界最重要的一点是PitchShifter 和 FormantShifter 必须共用同一组 STFT 帧。常见错误是变调一版、共振峰又一版各做各的分析与合成结果两版相位不一致叠加后声音像两个人在打架。正确做法是在频域里按顺序处理同一批帧先做基频缩放再做包络搬移最后统一 IFFT 重建。我一般会在源码结构里先找“谁先谁后”再决定自己复刻时的数据流顺序。3. 核心源码相位声码器把 Pitch Shift 跑通3.1 STFT 的三个隐形参数窗长、hop、窗函数决定音色下限相位声码器的输入是 STFT 帧帧参数的选型直接决定成品下限。三个参数里最容易被人忽略的是 hop 和窗函数的搭配。常见配置是44.1kHz 采样率下窗长 N1024hop256即 N/4窗函数用 Hann。N1024 约 23ms频率分辨率够分辨说话声的基频100Hz 左右时 bin 宽度约 43Hz偏低但可接受hop256 让时间分辨率到 5.8ms辅音起始段不会糊成一片。如果 N 加到 2048低频更干净但 pre-echo预回声会变明显N 降到 512瞬态更利落但低频调变时“颗粒感”很重。窗长 Nhop延迟适用场景512128约 11.6ms实时直播、快速辅音1024256约 23ms常规人声处理、翻唱2048512约 46ms离线精修、纯旋律窗函数不用矩形窗。矩形窗频谱泄漏严重相位累加后高次谐波之间会互相串扰出来的声音是“沙沙”的。Hann 或 Blackman-Harris 都行Hann 的旁瓣衰减和计算成本最平衡。注意分析窗和合成窗要满足 COLA常数重叠相加条件否则重建信号幅度会周期性起伏。3.2 相位累加相位声码器真正“玄学”的地方相位声码器的核心不是搬幅度而是搬相位。每帧 FFT 得到的相位是信号在一个时间窗内的“平均相位旋转”。两帧之间的相位差等于信号真实频率在 hop 时间内转过的弧度。问题在于FFT 输出的相位被 wrap 到 [-π, π]直接做差会有 2π 跳变必须先把“期望相位差”减掉再把剩余偏差 wrap 回区间得到的就是相对 bin 中心频率的偏移量。把这个偏移量转成“真实 bin 位置”乘上变调比例 α再作为下一帧的目标相位增量去累加就实现了频率搬移而时间轴不动。换句话说每一帧的幅度谱保持不变相位谱按目标频率重新旋转。这个步骤里最容易出错的是 wrap 的方向和 hop 的单位——代码里用弧度还是 bin 一定要统一否则声音直接“散架”。3.3 可直接运行的最小 Python 实现import numpy as np from scipy.io import wavfile def stft(x, n_fft1024, hop256): win np.hanning(n_fft).astype(x.dtype) # 首尾反射补零保证每个采样点都被覆盖 pad n_fft // 2 x np.pad(x, (pad, pad), modereflect) n_frames 1 (len(x) - n_fft) // hop frames np.zeros((n_frames, n_fft // 2 1), dtypenp.complex128) for i in range(n_frames): seg x[i * hop : i * hop n_fft] * win frames[i] np.fft.rfft(seg) return frames, win def pitch_shift_frame(frames, alpha, hop, n_fft): 直接频率缩放幅度不变相位按真实瞬时频率搬移 n_frames, n_bins frames.shape freqs np.arange(n_bins) # bin 索引 phase_advance freqs * 2 * np.pi * hop / n_fft # bin中心频率每帧相位增量 y frames.copy() for t in range(1, n_frames): # 1. 计算真实瞬时频率相对 bin 中心频率的偏差 delta np.angle(frames[t]) - np.angle(frames[t - 1]) delta delta - phase_advance # 减掉期望增量 delta np.mod(delta np.pi, 2 * np.pi) - np.pi # wrap 到 [-pi, pi] # 2. 偏差转成 bin 单位加上中心频率就是真实频率 true_bin freqs delta * n_fft / (2 * np.pi * hop) target_bin true_bin * alpha # 按变调比例搬移 # 3. 合成相位上一帧合成相位 目标增量 y[t] np.abs(frames[t]) * np.exp( 1j * (np.angle(y[t - 1]) target_bin * 2 * np.pi * hop / n_fft) ) return y def istft(frames, win, hop, n_fft): out np.zeros((len(frames) - 1) * hop n_fft) scale np.zeros_like(out, dtypefloat) for i, spec in enumerate(frames): seg np.fft.irfft(spec, nn_fft) * win start i * hop out[start : start n_fft] seg scale[start : start n_fft] win ** 2 return out[n_fft // 2 : -(n_fft // 2)] / scale[n_fft // 2 : -(n_fft // 2)] # 使用示例升 4 个半音 sr, x wavfile.read(input.wav) x x.astype(np.float64) / 32768.0 alpha 2 ** (4 / 12) spec, win stft(x, 1024, 256) spec_shift pitch_shift_frame(spec, alpha, 256, 1024) y istft(spec_shift, win, 256, 1024) wavfile.write(output.wav, sr, (y * 32768).astype(np.int16))代码逻辑说明第 11 行phase_advance是每个 bin 在 hop 长度内“本来应该”转过的弧度第 14 行把两帧的实际相位差减去这个期望值剩下的是真实频率偏离 bin 中心造成的增量第 16 行 wrap 是关键不加这一步相位就全是 2π 跳变。第 19 行把偏差从弧度换算回 bin 单位加上中心频率得到真实频率。第 22 行乘alpha得到目标频率再换算成相位增量叠加到上一帧合成相位上。幅度始终取自原帧只动相位所以音高升了动态包络基本不塌。参数说明alpha用半音公式计算12 半音是 α2频率整体翻倍这是“八度”效果-12 是 0.5。hop越小时间分辨率越高但 CPU 越大实时场景 256 起步。这段实现只做了最朴素的相位累加偏移量超过 ±5 个半音后会有明显金属味属于预期内下一步用共振峰补偿和相位锁定改善。4. 把共振峰拆出来Formant Shift 与 Robot 的实现路径4.1 共振峰是“频率轴的包络”先明白这点再动手共振峰不是某个具体频点而是频谱包络上的凸起。人声发“a”和发“i”区别就在包络峰值位置不同。变调做完后如果你只把基频和包络一起搬了人声听起来就像换了个人把包络峰值留在原位或单独搬才是“同一个人的不同音高”和“不同人的同一个音高”之间的切换。低频分辨率不够直接在高频叠加齿音会炸。我一般先把包络搬移限制在 20Hz~8kHz 之间8kHz 以上做 6dB/oct 的倾斜衰减保护齿音区。4.2 一个能跑的包络搬移 Demo移动平均包络 频域插值def extract_envelope(log_mag, sr, n_fft, bw400): 用移动平均提取 log 域包络bw 为平滑带宽Hz bin_w max(1, int(bw * n_fft / sr)) kernel np.ones(bin_w) / bin_w return np.convolve(log_mag, kernel, modesame) def formant_shift_frame(mag, beta, sr, n_fft, bw400): 共振峰搬移幅度谱减去原包络加上搬移后的包络 log_mag np.log(mag 1e-8) log_env extract_envelope(log_mag, sr, n_fft, bw) out_env np.zeros_like(log_mag) n_bins len(mag) for i in range(n_bins): src int(i / beta) if 0 src n_bins: out_env[i] log_env[src] return np.exp(log_mag - log_env out_env)逻辑说明extract_envelope在 log 域做卷积等效于频谱包络的低通滤波bw400表示包络只跟随 400Hz 尺度的大起伏不跟随谐波细节。formant_shift_frame里src int(i / beta)是关键映射——β1 时共振峰向低频搬β1 时向高频搬方向和 Pitch 旋钮一致Formant 上调听起来“身材变小”下调“身材变大”。最后在 log 域做原幅度 - 原包络 新包络本质是把共振峰换了位置但保留了精细谐波结构。参数说明bw决定包络提取的平滑程度。说话声建议 300~500Hz音乐声可以放到 800Hz。beta同样用半音公式计算。这段实现是轻量级近似商业级会用倒谱或 LPC 提取包络但移动平均对 demo 验证和源码理解足够了。要接到第 3 章的链路里就在pitch_shift_frame之后、istft之前对每帧np.abs(spec_shift)调用formant_shift_frame再乘回原相位。4.3 Robot 效果本质是量化开关Tremolo 只是幅度调制Robot机器人音效果听起来像音高被“格子化”——不是连续滑音而是一个个半音台阶。源码里实现极简把 Pitch 旋钮对应的半音数先取整再算 α。比如 Pitch 是 4.7 个半音Robot100% 时实际用 5 个半音Robot50% 时半量化部分帧取 5、部分帧取 4按比例混合会有一点“人在电子音和自然音之间飘”的感觉。代码上就是st_quant round(semitones) if robot_percent 0.5 else int(semitones) alpha 2 ** (st_quant / 12)Tremolo 更简单不碰频谱在合成输出上直接乘一个低频振荡器。一般深度 0~100%速率 0.5~20Hz。注意 Tremolo 是对整个干湿混合信号的幅度调制放在 Mix 之后不要放在湿信号内部否则干声不受影响、湿声一鼓一鼓的相位上会出现奇怪的“抽吸感”。5. 复刻与调参避坑指南5 个我在工程里踩过的坑5.1 一偏移就有“金属味”相位累加引起的 phasiness现象Pitch 偏移 2~3 个半音后人声发“闷”、有空洞的金属味像在一个罐子里唱歌。原因相邻帧各自做相位累加高频 bin 的真实频率估计受窗泄漏干扰累加相位发散多个 bin 指向不连贯的瞬时频率重建时相位抵消产生梳状滤波感。解决给高频加相位锁定——把 5kHz 以上的 bin 分组成谐波族每个族共享低频导频 bin 的合成相位增量而不是各自独立累加。或者用双分辨率 STFT低频用长窗、高频用短窗分别做相位声码器再合并。我一般先做前者改动小效果立刻能听出来。5.2 大偏移量就“卡顿吞字”瞬态处的时间分辨率不够现象12 半音时辅音“t、k、p”明显断裂字头像被啃掉一块。原因hop256 时瞬态定位精度只有 5.8ms相位声码器在突变段会把这 5.8ms 内的能量扩散到前后几帧里产生预回声字头就糊了。解决先做瞬态检测检测到能量突变帧时改用 hop128 或窗长 N512 重新分析这一段。离线批处理里可以把人声分成“瞬态段”和“稳态段”分别处理瞬态段变速不做变调只做共振峰修正稳态段走完整相位声码器。实时系统里这个方案太贵退而求其次把 window 换成 Blackman-Harris预回声能压掉一部分。5.3 Formant 下调后齿音刺耳高频包络叠能量现象Formant-6 时低频变厚实了但“s、z、sh”等齿音变得尖锐刺耳。原因共振峰向低频搬时包络在低频区变密集齿音区的高频分量同时被插值放大能量叠加后超过听觉舒适区。解决包络搬移时加高频保护8kHz 以上不搬移只做原样保留再把 6kHz 以上的频段做一个 -3dB 的倾斜衰减。源码里通常表现为一个可选的HF Protect旋钮复刻时直接内置默认开启即可。5.4 把半音倍率算错12 个半音是 2 倍不是 12 倍现象升 12 半音后人声变成“快进磁带”而不是正常八度升调。原因把 α 直接写成1 st/100以为 12 个半音是 1.12 倍。人耳对频率感知是对数的半音是等比关系12 个半音是频率翻倍。解决统一用alpha 2 ** (st / 12)负数同理。这个坑最常见也最隐形——听起来“变了但不对”新手容易在调参数上兜圈子实际是公式就错了。5.5 实时 DAW 延迟爆表窗口和 hop 不是越大越好现象接了插件录唱耳机里明显有延迟人跟着拍子慢半拍。原因STFT 的延迟约为 N hopN2048、hop512 时延迟约 58ms录唱完全不可用。解决实时场景压低到 N512、hop128延迟约 14ms同时开启插件的“低延迟模式”内部切到子帧处理。离线渲染再切回 N2048 提音质。复刻时把窗长做成可切换参数而不是写死常量否则调不了。6. 验证与进阶用正弦波和扫频确认源码没写错复刻完先不要拿人声试正弦波测试能最快暴露算法错误。生成一段 441Hz 的正弦波做 4 个半音α≈1.2599理想输出应为 555.6Hz 附近441×1.2599≈555.6。读输出 wav做短时 FFT观察峰值是否落在 555 附近。如果峰值在原位或偏移偏差超过 2Hz说明相位累加的 wrap 或 hop 换算有误。再测 -12 半音441Hz 应落到 220Hz 左右一个八度。共振峰验证用粉噪声先对原噪声做频谱记下几个包络峰的位置Formant6 后再做频谱包络峰应整体上移约 1.414 倍而基频区的能量分布不应剧烈变化。如果包络峰没动多半是formant_shift_frame的srci/beta方向写反了。过了这两关再拿真实人声做 AB 对比男声升 4 个半音应该还是同一个人的“嗓子变高”而不是变成卡通声。真正进阶是把离线脚本改成实时结构——用环形缓冲按 512 样本一块块推入重叠区用上一帧相位初始化保证无点击声。另一个值得投入的方向是把 Pitch 和 Formant 分离接到 MIDI 轨用弯音轮连续控制半音做出滑音和“说话唱歌”之间的过渡效果这在这类插件里是最有表演价值的玩法。我早期复刻时总想一步到位做成“完美音质版”结果卡在相位偏差上耗掉好几天。后来学乖了先跑通最简实现正弦波验证再用一句清唱试听最后才补相位锁定和包络保护。每一步都先确保“至少能听”再追求“好听”。这个顺序帮我少走了很多弯路希望帮到你。本文还有配套的精品资源点击获取

相关新闻

文本聚类四算法并存原理与课设落地实践

文本聚类四算法并存原理与课设落地实践

简介:本资源是一份面向机器学习初学者与课程设计实践者的中文文本聚类算法综合实现包,聚焦无监督文本聚类核心方法,覆盖KMeans、DBSCAN、LDA及Single_Pass四类典型算法,解决实际中文语料下无需标注、自动发现主题簇的建模需求。压…

2026/10/18 19:29:22 阅读更多 →
Welsh算法灰度图上色:原理、Python实现与优化

Welsh算法灰度图上色:原理、Python实现与优化

简介:这套基于Welsh算法的灰度图像彩色化处理及优化Python实现,包含完整源码、项目说明与详细注释,面向计算机相关专业学生、教师或开发者,适用于毕业设计、课程设计、课题初期演示及算法学习进阶。压缩包共16个文件,含…

2026/10/18 19:29:22 阅读更多 →
Spring Event事件机制详解:从解耦到异步与事务监听实战

Spring Event事件机制详解:从解耦到异步与事务监听实战

简介:这是一份Spring事件机制示例工程,面向需要掌握Spring框架中事件发布与监听机制的Java开发者。项目基于Maven构建,采用标准Spring项目结构,覆盖事件定义、事件发布、监听方式、执行顺序控制、广播模式、线程模型等核心知识点。…

2026/10/18 19:29:22 阅读更多 →

最新新闻

artcraft 项目实战:从零搭建创意工具的技术选型与核心模块拆解

artcraft 项目实战:从零搭建创意工具的技术选型与核心模块拆解

1. 从“artcraft”这个名字说起:它到底想解决什么问题第一次看到“artcraft”这个标题,我脑子里蹦出来的第一反应是“艺术”加“手艺”的组合词。直觉告诉我,这不是一个纯技术框架的名字,也不是某个具体产品的品牌名,它…

2026/10/19 0:24:02 阅读更多 →
前端登录密码加密实战:RSA-OAEP与Web Crypto API全解析

前端登录密码加密实战:RSA-OAEP与Web Crypto API全解析

这是一个几乎所有前端开发都绕不开的需求:登录页的密码加密。我自己刚工作那会儿接手过一个老系统,接口直接把明文密码放在请求体里,当时觉得“内网没事”,结果有一次在公共Wi-Fi环境下联调,抓包一看,密码完…

2026/10/19 0:24:02 阅读更多 →
Flutter HitTestBehavior 深度解析:从点击穿透到手势竞技场

Flutter HitTestBehavior 深度解析:从点击穿透到手势竞技场

1. 从一个点击穿透的诡异 Bug 说起做过 Flutter 开发的朋友大概率都遇到过这种场景:你在一个Stack里叠了两层 Widget,上面那层是个半透明的遮罩或者一个带GestureDetector的容器,下面那层是个按钮。你满心以为点击遮罩的时候事件会被遮罩吃掉…

2026/10/19 0:24:01 阅读更多 →
Java Swing飞翔的小鸟游戏实战:课设高分与完整源码解析

Java Swing飞翔的小鸟游戏实战:课设高分与完整源码解析

简介:飞翔的小鸟游戏Java实现源码及配套详细教程,面向Java初学者与需要完成期末大作业、课程设计或毕业设计的学生,提供一套可直接运行、便于二次开发的完整小游戏项目,个人手打九十八分并获导师认可。资源共四十五个文件&#xf…

2026/10/19 0:23:01 阅读更多 →
中文教育场景下的AIGC检测:原理、应用与教师实操指南

中文教育场景下的AIGC检测:原理、应用与教师实操指南

1. 从“AI代写泛滥”到“检测刚需”:中文教育场景的需求拆解一个学期末,某高校的A老师连续收到三篇“风格突变”的课程论文。第一篇措辞工整但缺乏个人视角,第二篇引用了大量教材原文却没有任何延伸思考,第三篇连标点符号都规范得…

2026/10/19 0:23:01 阅读更多 →
Spring Boot单体商城源码:从扣库存到JWT鉴权的电商后端实战解析

Spring Boot单体商城源码:从扣库存到JWT鉴权的电商后端实战解析

简介:面向Java中高级开发者与商城系统学习者的单商户商城小程序项目源码包,基于Spring Boot、MyBatis、Thymeleaf、Redis及Maven构建,并融入微服务拆分、小程序接口对接、数据库设计、OAuth2安全认证、Docker部署与监控测试等电商开发核心知识…

2026/10/19 0:23:01 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →