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

HunyuanVideo-Foley入门必看:音频质量客观指标(PESQ/STOI)实测报告

HunyuanVideo-Foley入门必看:音频质量客观指标(PESQ/STOI)实测报告 1. 引言 在音视频生成领域,音频质量评估一直是开发者关注的重点。HunyuanVideo-Foley作为一款集视频生成与音效生成于一体的AI工具,其音频输出质量…...

基于STM32与Qwen3-ASR-0.6B的嵌入式语音控制系统

基于STM32与Qwen3-ASR-0.6B的嵌入式语音控制系统 1. 引言 想象一下,你正在开发一个智能家居控制系统,需要让设备听懂人的语音指令。传统的语音识别方案要么需要联网使用云端API,要么本地识别准确率不高。现在,有了Qwen3-ASR-0.6…...

3步掌握sndcpy:Android音频无线转发终极指南

3步掌握sndcpy:Android音频无线转发终极指南 【免费下载链接】sndcpy Android audio forwarding PoC (scrcpy, but for audio) 项目地址: https://gitcode.com/gh_mirrors/sn/sndcpy 在移动办公和内容创作日益普及的今天,你是否遇到过这样的困扰&…...

从混乱到秩序:FancyZones如何重塑你的Windows多任务工作流

从混乱到秩序:FancyZones如何重塑你的Windows多任务工作流 【免费下载链接】PowerToys Microsoft PowerToys is a collection of utilities that supercharge productivity and customization on Windows 项目地址: https://gitcode.com/GitHub_Trending/po/Power…...

YOLOE开放检测实战案例:YOLOE-v8l-seg在文化遗产数字化保护中的应用

YOLOE开放检测实战案例:YOLOE-v8l-seg在文化遗产数字化保护中的应用 1. 引言:当古老文物遇见现代AI 想象一下,你是一位文化遗产保护工作者,面对一座布满精美壁画和复杂雕刻的古建筑。你的任务是快速、准确地记录下每一处细节——…...

文脉定序实战教程:如何将BGE-Reranker-v2-m3集成进现有ES/Meilisearch检索链

文脉定序实战教程:如何将BGE-Reranker-v2-m3集成进现有ES/Meilisearch检索链 你是不是也遇到过这样的问题?用Elasticsearch或者Meilisearch搭建的智能搜索系统,明明能搜到一大堆结果,但排在最前面的往往不是最相关的那个。用户输…...

Qwen-Image-2512-Pixel-Art-LoRA 模型v1.0 版本管理:使用GitHub进行提示词工程与生成作品的协作

Qwen-Image-2512-Pixel-Art-LoRA 模型v1.0 版本管理:使用GitHub进行提示词工程与生成作品的协作 你是不是也遇到过这种情况?和团队一起用AI模型做像素画项目,大家各自尝试不同的提示词,生成了一大堆图片。过几天想找回之前那个效…...

C# WinForms 多摄像头分屏显示 的完整工业级实现

以下是 C# WinForms 多摄像头分屏显示 的完整工业级实现(2025 年最实用写法),专为工控机/上位机场景设计。 支持特点: 动态添加任意路数摄像头(USB / RTSP / 工业相机)网格自动布局(11 → 22 →…...

目前在工业 C# 上位机中使用最广泛的 YOLOv8 实时检测代码模板

以下是一套目前在工业 C# 上位机中使用最广泛的 YOLOv8 实时检测 代码模板(2025 年最新稳定写法)。 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; us…...

C# 上位机开发与工控通讯实战 的完整、务实、极简版拆解(基于 8 年真实产线经验)

以下是 C# 上位机开发与工控通讯实战 的完整、务实、极简版拆解(基于 8 年真实产线经验)。剔除了所有废话,只保留真正能落地的核心逻辑、关键代码、避坑经验和项目推进路径。适合零基础新人快速上手,也适合有经验的工程师查漏补缺…...

【macOS】精选效率神器!大幅提升办公速度的宝藏软件

目录 01 文本编辑 1.1 Notable 1.2 MarkEdit01 文本编辑 1.1 Notable 🌸 开源轻量化 Markdown 笔记,主打数据可控。 🌸 支持多系统:Linux, Windows, macOS。 🌺 网址为:https://notable.app/ 1.2 MarkEdi…...

Sabaki围棋软件终极指南:免费优雅的围棋对弈与棋谱编辑器

Sabaki围棋软件终极指南:免费优雅的围棋对弈与棋谱编辑器 【免费下载链接】Sabaki An elegant Go board and SGF editor for a more civilized age. 项目地址: https://gitcode.com/gh_mirrors/sa/Sabaki 如果你正在寻找一款既美观又功能强大的围棋软件&…...

CoPaw模型安全与伦理考量:内容过滤、偏见缓解与滥用防范配置指南

CoPaw模型安全与伦理考量:内容过滤、偏见缓解与滥用防范配置指南 1. 为什么企业需要关注AI模型安全 最近几年,AI模型在企业中的应用越来越广泛,但随之而来的安全问题也日益凸显。想象一下,如果你的客服机器人突然说出不当言论&a…...

区块链开发最佳实践

区块链开发最佳实践:构建高效安全的去中心化应用 区块链技术正重塑金融、供应链、医疗等多个领域,但开发过程中面临性能、安全、可扩展性等挑战。掌握最佳实践是确保项目成功的关键。本文将围绕智能合约优化、节点部署策略、数据隐私保护等核心方向&…...

Audiveris终极指南:如何用开源工具快速实现乐谱数字化转换

Audiveris终极指南:如何用开源工具快速实现乐谱数字化转换 【免费下载链接】audiveris Latest generation of Audiveris OMR engine 项目地址: https://gitcode.com/gh_mirrors/au/audiveris Audiveris是一款强大的开源光学音乐识别(OMR&#xff…...

GLM-4.1V-9B-Base企业应用:制造业设备图谱识别与故障图文分析案例

GLM-4.1V-9B-Base企业应用:制造业设备图谱识别与故障图文分析案例 1. 制造业设备管理的痛点与机遇 在制造业生产现场,设备管理一直是个令人头疼的问题。想象一下这样的场景:车间主任老王每天要巡检几十台设备,面对复杂的仪表盘、…...

5分钟开启音乐数字化之旅:Audiveris让纸质乐谱瞬间变数字宝藏

5分钟开启音乐数字化之旅:Audiveris让纸质乐谱瞬间变数字宝藏 【免费下载链接】audiveris Latest generation of Audiveris OMR engine 项目地址: https://gitcode.com/gh_mirrors/au/audiveris 还在为整理堆积如山的纸质乐谱而烦恼吗?每次想要编…...

Python Web开发入门(二十一):完整前后端项目实战——从零构建企业级电商系统

一、前言:为什么需要一个完整的实战项目? 有读者在评论区问:"学了这么多天,感觉知识点很散,怎么把它们串联起来?" 我的回答是:真正的学习发生在实战中,特别是当你要把多个模块有机组合成一个可运行的系统时。 让我分享一个真实故事:2025年,我带团队重构…...

3大实战场景:dnSpyEx .NET逆向调试与编辑的完整指南

3大实战场景:dnSpyEx .NET逆向调试与编辑的完整指南 【免费下载链接】dnSpy Unofficial revival of the well known .NET debugger and assembly editor, dnSpy 项目地址: https://gitcode.com/gh_mirrors/dns/dnSpy dnSpyEx是一款功能强大的.NET逆向工具&am…...

Qwen3.5-9B-AWQ-4bit网络协议分析小助手:图解HTTP请求与TCP连接过程

Qwen3.5-9B-AWQ-4bit网络协议分析小助手:图解HTTP请求与TCP连接过程 1. 网络协议可视化的新体验 当你第一次学习网络协议时,是否曾被那些抽象的概念和复杂的交互流程困扰?传统的文字描述往往难以直观展现数据包在网络中的流动轨迹。这正是Q…...

电商卖家注意了!萤火AI实测:从抠图到带货视频,一个人搞定整个团队的工作

在电商行业摸爬滚打这么多年,我深知一个真理:“做图难,做视频更难;请美工贵,请摄影团队更贵。” 无论是国内淘系、抖音,还是出海做亚马逊、TikTok,视觉物料永远是转化的第一道门槛。很多时候&a…...

精通猫抓扩展:7个高级配置与流媒体解析实战技巧

精通猫抓扩展:7个高级配置与流媒体解析实战技巧 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓(cat-catch&#xff09…...

OpCore Simplify终极指南:5分钟搞定Hackintosh EFI配置,小白也能轻松上手

OpCore Simplify终极指南:5分钟搞定Hackintosh EFI配置,小白也能轻松上手 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在…...

基于深度学习CNN的智慧电力电缆状态巡检 电力线路覆冰状态 电力线路覆冰检测数据集 电力巡检系统实现覆冰风险自动识别第10413期 (1)

电力线路覆冰检测数据集 README一、数据集核心信息表项目详情类别数量及名称3 类(线、带冰的线、无冰的线路)数据总量110 张数据集格式YOLO 格式核心应用价值1. 支撑电力线路覆冰状态智能检测模型的训练与优化;2. 助力电力巡检系统实现覆冰风…...

AI 日报 - 2026年4月13日

🔬 科技类 5 条1. GPT-6 明天就来了:内部代号"土豆",性能暴涨40%OpenAI 正式官宣,代号"Spud(土豆)"的 GPT-6 将于明天(4月14日)全球同步发布。这款耗时18个月研…...

017、归一化层改进策略:从训练震荡到推理加速的实战调优

017、归一化层改进策略:从训练震荡到推理加速的实战调优 问题现场:BatchNorm在边缘设备上的“水土不服” 上周调试一个YOLO模型部署到Jetson Nano时遇到了诡异现象:训练时mAP达到78.2%,部署后直接掉到62.3%。同一批测试数据,精度断崖式下跌。排查了三天,最终定位到Batc…...

从PTPX报告反推:低频芯片Clock Tree功耗优化的3个关键决策点(含实验数据对比)

低频芯片Clock Tree功耗优化的3个关键决策点与量化分析 在28nm及以下工艺节点的芯片设计中,clock tree动态功耗占比往往超过总功耗的20%。某次流片后的PTPX报告显示,一个运行在200MHz的图像处理芯片中,clock network竟消耗了27.3%的动态功耗—…...

【NX二次开发】字符串操作-截取文件名

//确保路径格式为\\形式char *q strrchr(p, \\;) 1;...

RabbitMQ系列02 - RabbitMQ 消息模型:Broker、交换器、队列与收发路径

RabbitMQ 消息模型:Broker、交换器、队列与收发路径 RabbitMQ 是遵从 AMQP 0-9-1 的消息中间件(Erlang 实现),消息先进入 Exchange(交换器),再按类型与绑定规则路由到 Queue(队列&a…...