由于我需要句末没有静音的wav文件,开始时使用的方法是直接对wav进行指定字节数读写,虽然重新写入的wav文件播放至静音段时就停止播放,但是音频的总时长未发生改变。查阅资料得到wav文件的总时长t=文件字节总数/数据传输速率,数据传输速率即每秒传输的字节数,通过参考其他博客中关于wav文件的详细信息点击打开链接;点击打开链接
若需要彻底切割音频,修改其时长,也需要对修改wav文件头中的关键信息,即下面两个位置所存储的数据:(其余关于wav的介绍见上方链接)
修改后的程序为:输入需要切割的音频末尾时间长度,读取wav文件,将其文件头和关键信息存储起来,静音字节总数mid=(采样频率×采样位数×声道数×时间)/8 ,将获取到的04H位置所存储的当前地址的总字节数(=总字节数-8)
下面是切割音频的头文件CutMusicWav.h,此代码是参考他人代码做的修改
#ifndef __CUTMUSIC_H__
#define __CUTMUSIC_H__
#pragma once
#include <stdio.h>
#include <string.h>
using namespace std;
#define RIFF_SIGN_ID 0x46464952ul
#define WAVE_SIGN_ID 0x45564157ul
#d