gpt4 book ai didi

创建输出文件时更改 .wav 文件头中的字节

转载 作者:行者123 更新时间:2023-11-30 15:24:47 24 4
gpt4 key购买 nike

我正在尝试更改 .wav 文件 header 中与文件大小相对应的字节,即第 4 个和第 40 个字节。目前,我正在将整个 header 复制到缓冲区,尝试在那里编辑它,然后将其写入目标文件,但它似乎不起作用。

int main(int argc, char * argv []){

int delay = atoi(argv[1]);
FILE * source = fopen(argv[2], "rb");
FILE * destination = fopen(argv[3], "wb");

void * header = malloc(44); // size of a wav file header
fread(header, sizeof(header), 1, source);

// my attempt at changing the 4nd and 40th bytes
sizeptr1 = (unsigned int *)(header + 4);
sizeptr2 = (unsigned int *)(header + 40);
*sizeptr1 = *sizeptr1 + delay;
*sizeptr2 = *sizeptr2 + delay
fwrite(header, sizeof(header), 1, destination);

return 0;
}

更改这些字节并将新 header 写入输出文件的最有效方法是什么?

最佳答案

如果您确定要更改哪些字节,则字节数组是最简单的。例如,第 4 个字节位于 buffer[3]

#include <stdio.h>
#include <stdlib.h>

#define BUFFSIZE 1024
#define HEADSIZE 44

int main(int argc, char * argv []) {
int delay;
size_t bytes;
FILE * source = NULL;
FILE * destination = NULL;
unsigned char buffer[BUFFSIZE];

if (argc < 4) return 0; // check enough args
delay = atoi(argv[1]);
if (NULL == (source = fopen(argv[2], "rb")))
return 0;
if (NULL == (destination = fopen(argv[3], "wb")))
return 0;

// copy & alter buffer
if (HEADSIZE != fread(buffer, 1, HEADSIZE, source))
return 0;
buffer[4] = delay;
buffer[40] = delay;
if (HEADSIZE != fwrite(buffer, 1, HEADSIZE, destination))
return 0;

// copy rest of file
while ((bytes = fread(buffer, 1, BUFFSIZE, source)) != 0) {
if (bytes != fwrite(buffer, 1, bytes, destination))
return 0;
}
if (0 == fclose(destination))
printf("Success\n");
fclose (source);
return 0;
}

关于创建输出文件时更改 .wav 文件头中的字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28229915/

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