c 读取音频协议WAV文件头(再生成wav文件)
查找wav文件头关键struct 位置,当然也可查找avi文件头。用这个方法找到avi文件data位置后,可直接读出文件的每一帧图片。当然avi数据的标志位不是data,可以是00dc等。
WAV音频头文件有三个关键struct:RIFF, fmt,data。
AVI 视频文件头的关键struct:RIFF, LIST, avih,movi,strl,strh,strf.
搞懂了wav 音频格式后,可以把wav加入avi视频中,合成带音乐的avi视频,也可以把麦克风的语音录入合成为avi音视频文件。
1. struct RIFF {
char[4] id; //RIFF
int size;
char[4] type; //WAV
}
RIFF 下面必须有 fmt 和data 两个块
2. fmt:
struct fmt{
char[4] id; //fmt
unsigned int size;
short format_tag
2字节,表示音频数据的格式。如值为1,表示使用PCM格式。
short channels
2字节,声道数。值为1则为单声道,为2则是双声道。
unsigned int samples_per_sec
采样率,主要有22.05KHz,44.1kHz和48KHz。
unsigned int bytes_per sec
音频的码率,每秒播放的字节数。samples_per_sec * channels * bits_per_sample / 8,可以估算出使用缓冲区的大小
short block_align
数据块对齐单位,一次采样的大小,值为声道数 * 量化位数 / 8,在播放时需要一次 处理多个该值大小的字节数据。
short bits_per_sample
音频sample的量化位数,有16位,24位和32位等。
// cbSize
// 扩展区的长度
}
3. data 块
struct data{
char [4] id; //data
unsigned int size;
}
4. data 块的size 字节后面紧跟音频数据。
音频数据按时间先后顺序放入,如采样后数据是8位,刚好一字节,则直接放入,如是16位,则采样数据的低位放在文件的低位,高位放高位。
FILE * 与int 文件描述符之间的互转;
nt fileno(FILE *tream)
FILE *fdopen(int fd, const char *mode) //mode 读写方式
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <malloc.h>
#include <wait.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/mman.h>static unsigned int t=0;
static unsigned int q=0;int main(void){struct riff{char id[4];int size;char type[4];}ri;struct fmt{char id[4]; //fmtunsigned int size;unsigned short format_tag; //1unsigned short channels; //1unsigned int samples_per_sec; //22.05khz,44.1,48unsigned int bytes_per_sec; //每秒播发的字节数 unsigned short block_align; //数据块对齐单位,一次采样的大小,值为声道数 * 量化位数 / 8unsigned short bits_per_sample; //16,24,32}fm;struct data{char id[4];//dataunsigned int size;}da;FILE *f=fopen("/home/wzpc/1.wav","r+b");FILE *file=fopen("/home/wzpc/sample.wav","w+b"); //生成wav文件fseek(f, 0, SEEK_END);int size = ftell(f);fseek(f, 0, SEEK_SET);int fd=open("/home/wzpc/1.wav",O_RDONLY);char *m=mmap(NULL,size,PROT_READ,MAP_SHARED,fd,0);// unsigned int a=40;// unsigned int len=256*256*256*( unsigned char)m[a+3]+256*256*(unsigned char)m[a+2]+256*( unsigned char)m[a+1]+(unsigned char)m[a]; //4字节ascii转int// printf("%d\n",len);for(int t=0;t<size;t++){if((m[t]=='R')&&(m[t+1]=='I')&&(m[t+2]=='F')&&(m[t+3])=='F'){memcpy(&ri,&m[t],sizeof(ri));printf("%s\n",ri.id);printf("%d\n",ri.size);printf("%s\n",ri.type);printf("--------------------------------------\n");typedef struct riff RIFF;RIFF r={{'R','I','F','F'},3382308,{'W','A','V','E'}};q=size;fseek(file,0,SEEK_SET);fwrite(&r,12,1,file);}}for(t=0;t<size;t++){if((m[t]=='f')&&(m[t+1]=='m')&&(m[t+2]=='t')){printf("t:%d\n",t);memcpy(&fm,&m[t],sizeof(fm));printf("%s\n",fm.id);printf("%d\n",fm.size);printf("%d\n",fm.format_tag);printf("%d\n",fm.channels);printf("%d\n",fm.samples_per_sec);printf("%d\n",fm.bytes_per_sec);printf("%d\n",fm.block_align);printf("%d\n",fm.bits_per_sample);printf("---------------------------------------\n");typedef struct fmt FMT;FMT m1={{'f','m','t',' '}, //必须要加' '16,1, //pcm2, //两声道44100, //每秒采样频率176400, //每秒播发的字节数:声道数*采样频率*采样宽度/8=2*44100*16/8=176004, //声道数*采样宽度/8=2*16/8=416 // 采样宽度:8,16,24,32};fwrite(&m1,24,1,file);}}for(int t=0;t<size;t++){if((m[t]=='d')&&(m[t+1]=='a')&&(m[t+2]=='t')&&(m[t+3])=='a'){printf("t:%d\n",t);memcpy(&da,&m[t],sizeof(da));printf("%s\n",da.id);printf("%d\n",da.size);printf("--------------------------------------\n");typedef struct data DATA;DATA d={{'d','a','t','a'},3382272};fwrite(&d,8,1,file);fwrite(&m[44],(size-44),1,file); //此内容为纯音频数据,由alsa部分输入}}//---------------------------------------------------------------------------------------------------fclose(file);munmap(m,size);puts("采集over");return 0;}
相关文章:
c 读取音频协议WAV文件头(再生成wav文件)
查找wav文件头关键struct 位置,当然也可查找avi文件头。用这个方法找到avi文件data位置后,可直接读出文件的每一帧图片。当然avi数据的标志位不是data,可以是00dc等。 WAV音频头文件有三个关键struct:RIFF, fmt,data。 AVI 视频文件头的关键…...
Prompt设计与大语言模型微调
本文主要介绍了Prompt设计、大语言模型SFT和LLM在手机天猫AI导购助理项目应用。 ChatGPT基本原理 “会说话的AI”,“智能体” 简单概括成以下几个步骤: 预处理文本:ChatGPT的输入文本需要进行预处理。输入编码:ChatGPT将经过预处理…...
修复VS2015没有代码提示的问题【已解决】
问题描述 在Visual Studio 中编写代码时,发现使用库函数的时候,在类对象后输入点后,并没有出现类对应的成员信息的提示。 解决过程 1)方法1: 百度“vs 没有代码提示”,搜索解决方案。 方案1࿱…...
DeepSpeed: 大模型训练框架 | 京东云技术团队
背景: 目前,大模型的发展已经非常火热,关于大模型的训练、微调也是各个公司重点关注方向。但是大模型训练的痛点是模型参数过大,动辄上百亿,如果单靠单个GPU来完成训练基本不可能。所以需要多卡或者分布式训练来完成这…...
暄桐推荐|学书法的必读书目
在暄桐教室,写字之外,读书、静坐也是桐学们修习的功课。今天,便向你推荐,关于学习书法,暄桐教室的那些必读书目: 暄桐推荐学书法必读书之初阶书目: 对零基础的小白同学或刚入门…...
2023年赋能更多的人
最近接触到一些新人,是真正的网络新人,慢慢理解了新人的困惑。 对于新人,每天获取的信息五花八门,这是好的也是极其不好的。因为他们不知道如何筛选,到底适不适合自己去做。 我一直在劝大家去做一些内容创造性的事情…...
量子计算与量子密码(入门级)
量子计算与量子密码 写在最前面一些可能带来的有趣的知识和潜在的收获 1、Introduction导言四个特性不确定性(自由意志论)Indeterminism不确定性Uncertainty叠加原理(线性)superposition (linearity)纠缠entanglement 虚数的常见基本运算欧拉公式&#x…...
将安全作为首要目标 — Venus 的现状和前景展望
DeFi 的全面爆发将上一轮牛市推向巅峰。在不断的演化中,DeFi 领域也产生了很多新兴的细分领域,比如收益聚合器、合成资产、各种 DeFi 收益工具,以及最近整个市场都在讨论的 RWA 等。 DeFi 在不断进化,不变的是,DEX 和借…...
『第七章』翩翩起舞的雨燕:顺序与并发执行
在本篇博文中,您将学到如下内容: 1. 顺序执行2. 主线程 Main Thread 的秘密3. 并发执行:GCD 与分发队列(DispatchQueue)4. 延时执行5. 数据竞争(Data Race)6. 线程间的同步7. 避免线程爆炸8. RunLoop 与定时器总结楚客自相送,沾裳春水边。 晚来风信好,并发上江船。 花映…...
c语言进制的转换10进制转换16进制
c语言进制的转换10进制转换16进制 c语言的进制的转换 c语言进制的转换10进制转换16进制一、16进制的介绍二、10进制转换16进制的方法 一、16进制的介绍 十六进制: 十六进制逢十六进一,所有的数组是0到9和A到F组成,其中A代表10,B代…...
js中的Formdata数据结构
这里写目录标题 一、基本概念二、常用方法1.append(name, value)、set(name, value)2.get()、getAll()3.has(name)4.delete(name)5.keys(),values(),entries() 三、其他细节1.for of遍历2.转为对象3.结合 URLSearchParams 转为queryString 一、基本概念 FormData 提供了一种表…...
Spring MVC 执行流程
前言 Spring MVC 是一个非常强大的框架,它能够帮助开发人员快速构建高效的 Web 应用程序。然而,要理解 Spring MVC 的执行流程并不容易,因为它涉及到多个组件和模块。在本文中,我们将介绍 Spring MVC 的执行流程,帮助…...
JAVA毕业设计104—基于Java+Springboot+Vue的医院预约挂号小程序(源码+数据库)
基于JavaSpringbootVue的医院预约挂号小程序(源码数据库)104 一、系统介绍 本系统前后端分离带小程序 小程序(用户端),后台管理系统(管理员,医生) 小程序: 预约挂号,就诊充值&…...
一文了解独立站黑科技:clock斗篷技术
FP产品作为高利润高回报的产品,它热度在出海商品中是一直居高不下的。但这类产品在独立站的运营中往往会遇到很多问题,例如最让商家头疼的投流问题,FP产品的推广营销很容易遭到平台的管控封禁,这时候往往会用到市面上现在很火的黑…...
Java IDEA controller导出CSV,excel
Java IDEA controller导出CSV,excel 导出excel/csv,亲测可共用一个方法,代码逻辑里判断设置不同的表头及contentType;导出excel导出csv 优化:有数据时才可以导出参考 导出excel/csv,亲测可共用一个方法&…...
FFmpeg编译安装(windows环境)以及在vs2022中调用
文章目录 下载源码环境准备下载msys换源下载依赖源码位置 开始编译编译x264编译ffmpeg 在VS2022写cpp调用ffmpeg 下载源码 直接在官网下载压缩包 这个应该是目前(2023/10/24)最新的一个版本。下载之后是这个样子: 我打算添加外部依赖x264&a…...
gRPC之gateway集成swagger
1、gateway集成swagger 1、为了简化实战过程,gRPC-Gateway暴露的服务并未使用https,而是http,但是swagger-ui提供的调用服 务却是https的,因此要在proto文件中指定swagger以http调用服务,指定的时候会用到文件 prot…...
Pytorch从零开始实战07
Pytorch从零开始实战——咖啡豆识别 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——咖啡豆识别环境准备数据集模型选择训练模型可视化模型预测其他问题总结 环境准备 本文基于Jupyter notebook,使用Python3.8,Pytor…...
大数据知识扫盲
MapReudece作业启动和运行机制 MapReduce是一种分布式计算框架,最初由Google开发,用于处理大规模数据集的批处理任务。其核心思想是将数据划分为小的块,然后并行处理这些块,最后将结果合并。以下是MapReduce作业的启动和运行机制…...
使用Ubuntu虚拟机离线部署RKE2高可用集群
环境说明 宿主机和虚拟机的OS与内核相同,如下 $ cat /etc/issue Ubuntu 22.04.3 LTS \n \l$ uname -sr Linux 6.2.0-34-generic虚拟化软件版本 $ kvm --version QEMU emulator version 6.2.0 (Debian 1:6.2dfsg-2ubuntu6.14) Copyright (c) 2003-2021 Fabrice Be…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
QT开发技术【ffmpeg + QAudioOutput】音乐播放器
一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下,音视频内容犹如璀璨繁星,点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频,到在线课堂中知识渊博的专家授课,再到影视平台上扣人心弦的高清大片,音…...
Java中HashMap底层原理深度解析:从数据结构到红黑树优化
一、HashMap概述与核心特性 HashMap作为Java集合框架中最常用的数据结构之一,是基于哈希表的Map接口非同步实现。它允许使用null键和null值(但只能有一个null键),并且不保证映射顺序的恒久不变。与Hashtable相比,Hash…...
Unity-ECS详解
今天我们来了解Unity最先进的技术——ECS架构(EntityComponentSystem)。 Unity官方下有源码,我们下载源码后来学习。 ECS 与OOP(Object-Oriented Programming)对应,ECS是一种完全不同的编程范式与数据架构…...
