当前位置: 首页 > article >正文

我用 AI 辅助开发了一系列小工具():文件提取工具丛

从0构建WAV文件读懂计算机文件的本质虽然接触计算机有一段时间了但是我的视野一直局限于一个较小的范围之内往往只能看到于算法竞赛相关的内容计算机各种文件在我看来十分复杂认为构建他们并能达到目的是一件困难的事情然而近期我观看了油管上Magicalbat大神的视频发现其实它们的本质都惊人地简单所有计算机文件都是按特定规则组织的二进制数据是人为规定好格式再由计算机解析对于我们来说只要根据规定格式进行编辑就能够成功构建。今天我们就从最朴素的方式入手通过手动构建一个WAV音频文件拆解WAV格式的底层逻辑同时理解一个核心认知只要掌握了文件的格式规范任何类型的文件都能像搭积木一样一行行代码“拼”出来。先认识WAVWAV文件的格式WAV是微软开发的无损音频格式相比于压缩后的MP3它的结构更直白没有复杂的编码压缩因此我们能够通过C文件写入的方式直接完成wav文件的构建wav文件的核心由三个关键的“数据块(Chunk)”组成RIFF块文件的“身份卡”告诉计算机“我是一个WAV文件”fmt块音频的“参数说明”记录采样率、声道数、位深等核心参数data块真正的音频数据存储着声音的数字信号。而每个块的内容又如下图所示RIFF:字段名 字节数 数据类型 固定值/计算规则ChunkID 4 ASCII字符 固定为RIFF无终止符严格4字节ChunkSize 4 32位无符号整数 取值 整个WAV文件大小 - 8字节减去ChunkID和ChunkSize自身的8字节Format 4 ASCII字符 固定为WAVE无终止符严格4字节fmt:字段名 字节数 数据类型 固定值/计算规则ChunkID 4 ASCII字符 固定为fmt 末尾空格无终止符ChunkSize 4 32位无符号整数 PCM编码最常用下固定为16代表后续字段的总字节数不含ChunkID和ChunkSizeAudioFormat代码中Tag 2 16位无符号整数 编码格式1PCM无压缩通用3IEEE浮点6μ律7A律等NumChannels代码中Chnnels拼写笔误 2 16位无符号整数 声道数1单声道2立体声2多声道SampleRate 4 32位无符号整数 采样率每秒采样次数常见44100HzCD音质、48000Hz、22050Hz等ByteRate 4 32位无符号整数 每秒音频数据字节数 SampleRate × NumChannels × BitsPerSample / 8BlockAlign代码中BloclAlign拼写笔误 2 16位无符号整数 每个“采样帧”的字节数 NumChannels × BitsPerSample / 8播放器一次读取的最小单位BitsPerSample代码中BitsperSample 2 16位无符号整数 采样位深每个采样点的比特数8/16/24/3216位最常用data:字段名 字节数 数据类型 固定值/计算规则ChunkID代码中DataId 4 ASCII字符 固定为data无终止符严格4字节DataSize 4 32位无符号整数 音频数据总字节数 采样总数 × BlockAlign采样总数 SampleRate × 音频时长音频数据区 可变 二进制流 PCM编码下为线性整数/浮点数16位位深对应int16_t8位对应uint8_t32位浮点对应float我们接下来的代码就是严格按照这个模板把每个部分的二进制数据“写”进文件里。从零构建WAV一行代码拆解核心逻辑下面是完整的C代码新手也能看懂我们逐段拆解看如何从0生成一个能播放的440Hz正弦波WAV文件#includeusing namespace std;// 类型别名让代码更易读明确数据的字节长度#define u32 uint32_t // 32位无符号整数4字节#define u16 uint16_t // 16位无符号整数2字节#define f32 float // 32位浮点数4字节#define i16 int16_t // 16位有符号整数2字节#define HZ 44100 // 采样率每秒采集44100个声音样本标准音频采样率#define DURATION 5 // 音频时长5秒// 1. 定义WAV的三个核心数据块结构对应格式规范// RIFF块文件整体标识struct chunk1{char ChunkID[4]; // 块标识固定为RIFFu32 ChunkSize; // 从该字段到文件末尾的字节数总字节数-8char Format[4]; // 格式类型固定为WAVE}RIFF;// fmt块音频参数配置struct chunk2{char ChunkID[4]; // 块标识固定为fmt 注意末尾有空格u16 Tag; // 编码格式1代表PCM无压缩u32 ChunkSize; // fmt块的大小PCM格式固定为16u16 Chnnels; // 声道数1单声道2立体声u32 SampleRate; // 采样率u32 ByteRate; // 每秒数据量 采样率×声道数×位深/8u16 BloclAlign; // 每个采样的总字节数 声道数×位深/8u16 BitsperSample; // 每个采样的位深16位常见}Fmt;// data块音频数据存储区struct chunk3{char DataId[4]; // 块标识固定为datau32 DataSize; // 音频数据的总字节数}Data;signed main(int argc,char* argv[]){// 打开文件wb表示以二进制模式写入关键文件本质是二进制FILE *fp fopen(test.wav,wb);// 计算总采样数采样率×时长5秒×44100220500个样本u32 NumSamples HZ * DURATION;// 2. 填充RIFF块并写入文件memcpy(RIFF.ChunkID,RIFF,4); // 写入块标识RIFF.ChunkSize NumSamples*sizeof(u16)36; // 计算块大小memcpy(RIFF.Format,WAVE,4); // 声明为WAVE格式fwrite(RIFF.ChunkID,sizeof(char),4,fp); // 写入4个字符的ChunkIDfwrite(RIFF.ChunkSize,sizeof(u32),1,fp); // 写入4字节的ChunkSizefwrite(RIFF.Format,sizeof(char),4,fp); // 写入4个字符的Format// 3. 填充fmt块并写入文件memcpy(Fmt.ChunkID,fmt ,4);Fmt.ChunkSize 16; // PCM格式下fmt块固定16字节Fmt.Tag 1; // PCM无压缩编码Fmt.Chnnels 1; // 单声道Fmt.SampleRate HZ; // 44100Hz采样率Fmt.ByteRate HZ*sizeof(u16); // 每秒字节数44100×288200Fmt.BloclAlign Fmt.Chnnels * sizeof(u16); // 每个采样2字节Fmt.BitsperSample 16; // 16位位深// 按顺序写入fmt块的所有参数严格遵循格式规范fwrite(Fmt.ChunkID,sizeof(char),4,fp);fwrite(Fmt.ChunkSize,sizeof(u32),1,fp);fwrite(Fmt.Tag,sizeof(u16),1,fp);fwrite(Fmt.Chnnels,sizeof(u16),1,fp);fwrite(Fmt.SampleRate,sizeof(u32),1,fp);fwrite(Fmt.ByteRate,sizeof(u32),1,fp);fwrite(Fmt.BloclAlign,sizeof(u16),1,fp);fwrite(Fmt.BitsperSample,sizeof(u16),1,fp);// 4. 填充data块并写入文件memcpy(Data.DataId,data,4);Data.DataSize NumSamples * sizeof(u16); // 音频数据总字节数fwrite(Data.DataId,sizeof(char),4,fp);fwrite(Data.DataSize,sizeof(u32),1,fp);// 5. 生成音频数据并写入440Hz正弦波标准A调for(int i0;if32 t (f32)i/HZ; // 计算当前时间点秒// 生成440Hz正弦波的数值声音的本质是振动正弦波模拟声波f32 y sinf(t*440.0f*2.0f*3.1415926f);// 转换为16位整数适配16位位深的音频i16 sample (i16)(y*INT16_MAX);// 写入单个音频样本2字节fwrite(sample,sizeof(i16),1,fp);}fclose(fp); // 关闭文件return 0;}所有文件都是“按规则写二进制”的产物写完这段代码你可能会发现生成WAV文件的过程就是“按格式规范往文件里写二进制数据”的过程。而这个逻辑适用于所有计算机文件TXT文档本质是字符的ASCII/UTF-8编码比如字符A对应二进制01000001我们按顺序写入这些编码就成了TXT文件BMP图片由文件头记录宽、高、位深 像素数据每个像素的RGB值组成按BMP格式写这些数据就能生成图片MP4视频哪怕是压缩过的视频也是按MP4的格式规范把编码后的视频帧、音频帧组织成二进制数据EXE可执行文件遵循PE格式把指令、数据、资源按规则写入操作系统就能识别并运行。计算机之所以能“看懂”不同的文件不是因为文件有“魔法”而是因为程序员提前约定了“格式规范”——就像我们约定“RIFF”开头的是WAV文件播放器读到这个标识就按WAV的规则解析后续数据。计算机的本质是“朴素的规则”对刚接触计算机的人来说各种文件、软件、系统看似复杂但拆解到最底层都是“数据规则”的组合只要我们对着格式手册即便使用最朴素的方式也能够成功构建出可以使用的音频文件。计算机的世界没有想象中那般复杂计算机只在乎那最终排好队的 0 和 1。进一步思考从文件到软件了解了各类文件本质我们自然能理解计算机中各个编辑软件的原理是什么了就比如今天举的wav的例子如果我们将示例程序改进一下加入输入那么这是否就成了一个简单的音频编辑软件了呢所有的复杂软件如 Photoshop、Premiere底层逻辑都是如此读取特定规则的二进制 - 在内存中加工处理 - 按规则写回二进制。当你不再把文件看作“黑盒”你便拥有了重塑数字世界的能力。贩手匾殴

相关文章:

我用 AI 辅助开发了一系列小工具():文件提取工具丛

从0构建WAV文件:读懂计算机文件的本质 虽然接触计算机有一段时间了,但是我的视野一直局限于一个较小的范围之内,往往只能看到于算法竞赛相关的内容,计算机各种文件在我看来十分复杂,认为构建他们并能达到目的是一件困难…...

硬件散热的智能管家:FanControl全维度调控指南

硬件散热的智能管家:FanControl全维度调控指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/FanCon…...

2024升级版资源捕获工具:猫抓Cat-Catch全解析

2024升级版资源捕获工具:猫抓Cat-Catch全解析 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在数字化时代,网页资源的获取…...

代码之外周刊(第期):当技术让一切趋同,我们还剩什么?渭

1. 前言 本文详细介绍如何使用 kylin v10 iso 文件构建出 docker image,docker 版本为 20.10.7。 2. 构建 yum 离线源 2.1. 挂载 ISO 文件 mount Kylin-Server-V10-GFB-Release-030-ARM64.iso /media 2.2. 添加离线 repo 文件 在/etc/yum.repos.d/下创建kylin-local…...

深度神经网络训练全攻略:从梯度消失到Adam优化器,一篇搞懂所有技巧

训练深度神经网络就像调教一匹烈马——既要选对方向(优化器),又要控制好缰绳(学习率),还得给它戴好马鞍(正则化)。本文将带你系统掌握这些核心技巧,从此告别“训练不收敛…...

大模型之Linux服务器部署大模型菊

一、各自优势和对比 这是检索出来的数据,据说是根据第三方评测与企业数据,三款产品在代码生成质量上各有侧重: 产品 语言优势 场景亮点 核心差异 百度 Comate C核心代码质量第一;Python首生成率达92.3% SQL生成准确率提升35%&…...

避坑指南:云深处X20与Kinova机械臂URDF模型组合时,关节命名与坐标对齐的那些坑

云深处X20与Kinova机械臂URDF模型组合避坑实战指南 当机械狗遇上机械臂,本该是强强联合的完美组合,却在URDF模型整合过程中频频翻车。关节错位、模型飞散、仿真崩溃——这些看似简单的坐标系对齐问题,往往让开发者耗费数日调试。本文将直击云…...

OBS绿幕抠像技术解析:chroma_key_filter.effect源码实现与优化

1. 绿幕抠像技术基础与OBS实现原理 绿幕抠像(Chroma Key)是视频处理领域的经典技术,就像魔术师用的隐身斗篷,它能让特定颜色范围(通常是绿色或蓝色)变得透明。我在实际项目中发现,OBS Studio作为…...

别再搞混了!天线近场和远场到底怎么分?用喇叭天线和对数周期天线实测告诉你

天线近场与远场划分的工程实践指南:从理论误区到实测解决方案 在微波暗室中调试天线时,工程师小王遇到了一个棘手问题:使用同一套测试设备,喇叭天线在18GHz频段的辐射方向图总是出现异常波动,而对数周期天线在2GHz频段…...

电商客服+导购智能体的设计与开发指

这个代码的核心功能是:基于输入词的长度动态选择反义词示例,并调用大模型生成反义词,体现了 “动态少样本提示(Dynamic Few-Shot Prompting)” 与 “上下文长度感知的示例选择” 的能力。 from langchain.prompts impo…...

游戏安全社区建设终极指南:awesome-game-security 如何推动游戏安全生态发展

游戏安全社区建设终极指南:awesome-game-security 如何推动游戏安全生态发展 【免费下载链接】awesome-game-security awesome game security [Welcome to PR] 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-game-security 在当今数字游戏时代&#…...

避开ArduPilot地面无人平台调试大坑:ACRO模式下的转向速率设置详解

ArduPilot无人平台ACRO模式转向调参实战:从参数解析到竞技级手感优化 第一次在空地上测试ArduPilot无人车时,我满心期待它能像竞技级RC模型那样做出精准的漂移过弯。但现实是——转向要么迟钝得像在泥沼里打转,要么突然变得过于敏感导致车辆原…...

企业文件共享必看:用组策略实现精细化磁盘配额管理(含客户机权限分配技巧)

企业级存储资源管控:基于组策略的磁盘配额深度实践指南 在数字化转型浪潮中,企业数据量呈现指数级增长。某调研机构数据显示,超过78%的中大型企业面临存储资源分配不均的问题——市场部员工抱怨设计素材无处存放,而行政部门50%的…...

一个Ingress搞定前后端分离:实战配置将API请求转发后端,静态页面留给前端

一个Ingress搞定前后端分离:实战配置将API请求转发后端,静态页面留给前端 在前后端分离架构成为主流的今天,如何优雅地部署应用成了开发者必须面对的挑战。想象一下:用户访问你的网站时,浏览器应该加载React或Vue构建的…...

实战指南:从零构建高可用 Kubernetes 多节点集群(生产环境最佳实践)

1. 环境准备:生产级集群的硬件与系统配置 搭建生产级Kubernetes集群的第一步是做好硬件选型和系统配置。很多新手容易忽视这个环节,结果在后期遇到性能瓶颈时才后悔莫及。根据我在金融和电商行业的部署经验,控制平面和工作节点的配置需要严格…...

Go语言的未来发展:趋势与展望

Go语言的未来发展:趋势与展望 1. 引言 Go语言自2009年发布以来,已经成为现代软件开发中最受欢迎的编程语言之一。它以其简洁、高效、并发友好的特性,在云原生、微服务、DevOps等领域获得了广泛的应用。本文将回顾Go语言的发展历程&#xff…...

Nginx 学习总结犊

1. 引入 在现代 AI 工程中,Hugging Face 的 tokenizers 库已成为分词器的事实标准。不过 Hugging Face 的 tokenizers 是用 Rust 来实现的,官方只提供了 python 和 node 的绑定实现。要实现与 Hugging Face tokenizers 相同的行为,最好的办法…...

保姆级教程:用OpenCV SGBM算法从双目图像生成彩色点云(附完整Python代码与参数调试心得)

从双目图像到彩色点云:OpenCV SGBM算法实战与参数调优全解析 双目视觉技术正在工业检测、自动驾驶、三维重建等领域获得广泛应用。本文将手把手带您实现从双目图像采集到彩色点云生成的全流程,重点剖析SGBM算法核心参数的调优技巧,并分享视差…...

Windows 11/10下Genymotion与VirtualBox的‘网络适配器战争’:彻底解决启动报错与VirtualBox Host-Only Network #N泛滥问题

Windows 11/10下Genymotion与VirtualBox的网络适配器冲突全解析 每次启动Genymotion虚拟机时,你是否注意到系统里又悄悄多出一个带编号的VirtualBox Host-Only Network适配器?这背后隐藏着Windows网络管理机制与虚拟化软件之间一场看不见的"军备竞…...

猫抓插件:智能资源嗅探引擎与无缝媒体管理体验

猫抓插件:智能资源嗅探引擎与无缝媒体管理体验 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在数字化内容爆炸的时代,用户…...

深入解析ActivityMainBinding:从基础绑定到高级应用

1. ActivityMainBinding基础入门 第一次接触ActivityMainBinding时&#xff0c;我完全被它自动生成的特性震惊了。这个看似简单的类&#xff0c;实际上是Android DataBinding技术的核心枢纽。简单来说&#xff0c;每当你在res/layout目录下创建带有<layout>标签的XML文件…...

快速上手Jimeng LoRA:Streamlit可视化界面,无需代码基础

快速上手Jimeng LoRA&#xff1a;Streamlit可视化界面&#xff0c;无需代码基础 你是否对AI绘画感兴趣&#xff0c;想尝试不同的艺术风格&#xff0c;却被复杂的命令行和代码部署劝退&#xff1f;你是否下载了多个不同训练阶段的LoRA模型&#xff0c;却苦于每次测试都要重新加…...

微信小程序反编译实战:用wxappUnpacker获取他人源码的完整流程(附常见报错解决方案)

微信小程序逆向工程全流程解析&#xff1a;从缓存提取到源码重构 最近两年微信小程序生态爆发式增长&#xff0c;各类创新应用层出不穷。作为开发者&#xff0c;我们常常会遇到一些令人惊艳的交互效果或功能实现&#xff0c;却苦于无法了解其背后的技术细节。本文将带你深入微信…...

Linux桌面应用管理革命:AppImageLauncher完整使用指南

Linux桌面应用管理革命&#xff1a;AppImageLauncher完整使用指南 【免费下载链接】AppImageLauncher Helper application for Linux distributions serving as a kind of "entry point" for running and integrating AppImages 项目地址: https://gitcode.com/gh_…...

UE5.4渲染设置详解:从‘眼部适应’到‘后处理Volume’,一步步驯服自动曝光

UE5.4曝光控制全链路解析&#xff1a;从视觉原理到多层级精准调控 当你在昏暗的UE5场景中点燃一盏虚拟烛光时&#xff0c;引擎如何决定该让画面保持幽暗氛围还是强行提亮所有细节&#xff1f;这背后是一场由眼部适应算法主导的"亮度战争"。不同于简单开关的二元选择&…...

第02章-操作系统的发展与挑战

第2章 操作系统的发展与挑战 本章目标:从更宏观的视角审视操作系统的发展脉络,深入探讨移动操作系统和嵌入式操作系统的演进,分析现代操作系统面临的核心挑战与新兴技术趋势。 2.1 移动操作系统的演进 第1章我们回顾了操作系统的整体发展历程,本章聚焦于与开源鸿蒙关系最密…...

用AI写代码踩坑记:让DeepSeek帮我搞定CH32V003驱动WS2812B的PWM+DMA程序

从AI生成到实战调试&#xff1a;CH32V003驱动WS2812B的PWMDMA完整指南 第一次让DeepSeek帮我写CH32V003驱动WS2812B的代码时&#xff0c;我天真地以为只要把芯片手册扔给它就能坐享其成。直到看到它生成的PWM配置把TIM1_CH4映射到了PA8&#xff08;实际应该是PC4&#xff09;&a…...

论文阅读:arxiv 2026 Don‘t Let the Claw Grip Your Hand: A Security Analysis and Defense Framework for Ope

总目录 大模型安全研究论文整理 2026年版&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/159047894 Don’t Let the Claw Grip Your Hand: A Security Analysis and Defense Framework for OpenClaw https://arxiv.org/pdf/2603.10387 arxiv 2026 | OpenClaw安…...

Java 25虚拟线程压测突崩实录:QPS从12万骤降至200,我们用1小时定位并修复的4层嵌套阻塞根源

第一章&#xff1a;Java 25虚拟线程压测突崩事件全景复盘某金融核心支付网关在升级至 JDK 25 并全面启用虚拟线程&#xff08;Virtual Threads&#xff09;后&#xff0c;于全链路压测中突发大规模 StackOverflowError 与 OutOfMemoryError: Metaspace 混合崩溃&#xff0c;TPS…...

为什么92%的.NET团队在AI推理上卡在.NET 6/7?揭秘.NET 11新增AOT+TensorRT绑定+动态图编译三大硬核能力(附架构图对比表)

第一章&#xff1a;.NET 11 AI模型推理加速架构全景概览 .NET 11 将原生 AI 推理能力深度集成至运行时与 SDK 层&#xff0c;构建起端到端的高性能、跨平台模型执行栈。该架构摒弃传统“模型导出外部引擎调用”的松耦合模式&#xff0c;转而采用统一张量抽象&#xff08; Tenso…...