.au ファイルのヘッダー (6 つの uint32_t に分割された最初の 24 バイト) を読み取って、エンコード、サンプル レート、およびチャネル数を出力しようとしています。最終的に残りの .au ファイルを再生しますが、現在、fread 行に到達したときに segfault が発生してスタックしています (gdb で確認しました)。これはなぜでしょうか?私のコードは以下です。ありがとう。
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <alsa/asoundlib.h>
#include <fcntl.h>
#define AUDIO_FILE_MAGIC (uint32_t)0x02E736E64
#define AUDIO_FILE_ENCODING_MULAW 1
#define AUDIO_FILE_ENCODING_LINEAR_8 2
#define AUDIO_FILE_ENCODING_LINEAR_16 3
#define STEREO 2
#define MONO 1
typedef struct {
uint32_t magic;
uint32_t hdr_size;
uint32_t data_size;
uint32_t encoding;
uint32_t sample_rate;
uint32_t channels;
} au_header;
int main(int argc, char **argv) {
// Check arguments
if(argc != 2) {
fprintf(stderr, "Usage: %s <filename.au>\n", argv[0]);
exit(1);
}
au_header header;
char str[32];
FILE *f = fopen(argv[1], "rb");
fread(str, 4, 6, f);
fclose(f);
uint32_t *intptr = (uint32_t *) str;
// Remember to change from network order
header.magic = ntohl(intptr[0]);
header.hdr_size = ntohl(intptr[1]);
header.data_size = ntohl(intptr[2]);
header.encoding = ntohl(intptr[3]);
header.sample_rate = ntohl(intptr[4]);
header.channels = ntohl(intptr[5]);
printf("endcoding: %d\nsample rate: %d\nchannels: %d\n", header.encoding, header.sample_rate, header.channels);
/* TO DO:
Implement audio file playback here
*/
}