gpt4 book ai didi

c++ - 分析.WAV文件

转载 作者:行者123 更新时间:2023-12-03 02:30:24 25 4
gpt4 key购买 nike

我当前正在使用.WAV文件,我有一个问题。

我解决此问题的方法是创建一个包含以下信息的结构:

typedef struct header_file{
char chunk_id[4];
int chunk_size;
char format[4];
char subchunk1_id[4];
int subchunk1_size;
short int audio_format;
short int num_channels;
int sample_rate;
int byte_rate;
short int block_align;
short int bits_per_sample;
char subchunk2_id[4];
int subchunk2_size;
}header;

typedef struct header_file* wav_p;

现在,我试图像下面这样运行WAV文件:
    ofstream myFile;
myFile.open("file.txt");
FILE * file = fopen("file.wav", "rb");

const int BUFFSIZE = 256;
int count = 0;
short int buff[BUFFSIZE];
wav_p wav = (wav_p)malloc(sizeof(header));
int nb;

if (file)
{
fread(wav, 1, sizeof(header), file);
while (!feof(file)){
nb = fread(buff, 1, BUFFSIZE, file);
count++;

for (int i = 0; i<BUFFSIZE; i += 1){
//the following part i found on the internet so i'm not sure if it is good
int h = (signed char)buff[i + 1];
int c = (h << 8) | buff[i];
double t = c / 32768.0;

myFile << t << endl;
if(abs(t)>1){
//checking that a value is between -1 to 1
}
}
}
}
fclose(file);
myFile.close();

我的问题是:内部 for是否正确?在 file.txt中,我所有的值都在-1到1之间,所以我认为这很好,但是我不确定,我是否可以正确地遍历.wav文件,并且将其放入“file.txt”中的方式是否很好( “file.txt”是否包含文件功能的“y轴”值,其中“x轴”是时间)

最佳答案

您的代码大部分是正确的。您无需检查wav header 即可验证wave文件是否实际包含16位样本。

您对16位值的计算是错误的,因为buffshort int的数组。如果buffchar数组,则您使用的计算将是正确的(但是您必须将i递增2)。

使用short int数组,除非系统是big-endian系统,否则您只能说int c = buff[i];

因为-1.0 <= abs(t) > 1 <1.0,所以不需要检查c

关于c++ - 分析.WAV文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47379548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com