基于C的PCM音频数据的读取、处理与写入(二)

本文介绍如何使用C语言读取16位PCM音频文件,降低音量并保存到新文件。涉及fopen_s安全读取,转换运算符优先级,结构体应用,以及移位运算符的左移和右移操作。通过代码示例展示了具体的实现过程。
摘要由CSDN通过智能技术生成

要求,同一:
16位PCM音频文件中的数据读取后降低音量并另存到另一文件中。

1、后续使用fopen_s替代fopen,增强安全性,多了溢出检测,成功则返回0,失败返回非0。其调用格式为:errno_t fopen_s( FILE** pFile, const char *filename, const char *mode );其中errno_t就是int,一般使用方法如下:

int err = 0;
err =fopen_s(&input_file_ptr,"origin_audio.pcm","rb");
	if (0 != err)
	{
   
		return -1;
	}

如果上述读取成功,则err为0,程序继续运行,若读取不成功,err不为0,则在显示窗口显示为-1.
2、由short-float转换式中出现的是否添加括号引申出的运算符的优先级的问题
强制转换运算符>算数运算符
3、if(){return -1;},根据具体情况,如读入新的文件、导入新的指针等,确定是否添加以上语句。

4、结构体的用法:将相关的指针、变量放到一起,易查看,调用方便,后续代码优化过程中慢慢体会。
本次代码中,首次出现了"→"运算符,其类似的运算符还有“.”,箭头是指针访问成员变量的 ,点运算符是用于结构体变量访问结构体成员变量的 也就是说:如果定义的结构变量是指针 那么要访问它的成员变量用箭头 如果定义的是结构体变量的话就是用点”。

5、移位运算符:<<: 左移; >>:右移
(1)<<:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。格式是:需要移位的数字 << 移位的次数。例如: 3 << 2,则是将数字3左移2位,结果是12.在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。
(2)>>:按二进制形式把所有的数字向右移动对应位移位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。例如11 >> 2,则是将数字11右移2位,结果为2.右移一位相当于除2,右移n位相当于除以2的n次方。

实现代码如下:

//该文件由Li编写,实现PCM音频文件的音量调节,调节后另存到另一文件中。

#include <stdio.h>
//short-float归一化转换时,需要用到的常数
const short MAX_VOL_S16_P = 32767;
const short MAX_VOL_S16_N = 32768;

//声明一个结构体,类型名为Pcm_data,里面存放与PCM相关的数据
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值