fscanf (文件指针, "%d\n%lg\n", sig_length, sample_rate);怎么解释呢?
fscanf (filepointer, "%d\n%lg\n", sig_length, sample_rate); how to interpret it?
我从互联网之前存在的科学音频文件类型(称为 TFD v1)进行音频格式转换,这是一个未压缩的简单原始样本值数组...在 get_signal() 函数中this page,我不知道样本值是如何格式化的,为什么我需要样本率才能从数组中读取 256 个点?
fscanf (filepointer , "%d\n%lg\n" , sig_length, fsam );
fscanf (raw_audio_array_file, ?? , 256 , SRate_Float );
/*******************************************************
* function get_signal reads signal data into sig_re from
* the file pointed to by filepointer. If the file is a
* type 2 TFD file then the imaginary part is set too.
* If the signal is type 1, its hilbert transform is
* returned in the imaginary part (sig_im).
********************************************************/
void get_signal (filepointer, sig_re, sig_im, fsam, sig_length)
FILE *filepointer;
double sig_re[],
sig_im[],
*fsam;
int *sig_length;
{
register int i; /* counter variable */
int sigtype; /* data file type */
double dummy1,
dummy2; /* dummy temporary variables */
fscanf (filepointer, "%d\n", &sigtype);
if (sigtype == 1) { /* Type one TFD file */
fscanf (filepointer, "%d\n%lg\n", sig_length, fsam);
for (i = 0; i < *sig_length; i++) {
fscanf (filepointer, "%lg\n", &sig_re[i]);
}
analytic (sig_re, sig_im, *sig_length);
}
else {
if (sigtype == 2) { /* Type 2 TFD file */
fprintf(stderr,"Complex signal.\n");
fscanf (filepointer, "%d\n%lg\n", sig_length, fsam);
for (i = 0; i < *sig_length; i++) {
fscanf (filepointer, "(%lg,%lg)\n", &sig_re[i], &sig_im[i]);
printf("%lg\n",sig_re[i]);
}
}
else {
fprintf (stderr, "ccg : incorrect input format.\n");
exit (7);
}
fclose (filepointer);
}
} /* END OF FUNCTION get_signal */
fscanf (filepointer, "%d\n%lg\n", sig_length, fsam);
调用C函数fscanf,根据格式字符串从文件中读取格式化数据。
本例中的格式字符串是 "%d\n%lg\n"
,它分解为 %d
(一个整数)、一个换行符、%lg
(一个 double
)和另一个新队。所以,基本上,它从文件中读取两行,第一行应该包含一个带有采样长度的整数,第二行包含采样率。
例如,使用现代采样率:
1
256
44100.0
1.0
0.98
0.96
...
其中第一行是 sigtype,第二行和第三行是信号长度(以样本为单位)和采样率,其余行是信号值。
我从互联网之前存在的科学音频文件类型(称为 TFD v1)进行音频格式转换,这是一个未压缩的简单原始样本值数组...在 get_signal() 函数中this page,我不知道样本值是如何格式化的,为什么我需要样本率才能从数组中读取 256 个点?
fscanf (filepointer , "%d\n%lg\n" , sig_length, fsam );
fscanf (raw_audio_array_file, ?? , 256 , SRate_Float );
/*******************************************************
* function get_signal reads signal data into sig_re from
* the file pointed to by filepointer. If the file is a
* type 2 TFD file then the imaginary part is set too.
* If the signal is type 1, its hilbert transform is
* returned in the imaginary part (sig_im).
********************************************************/
void get_signal (filepointer, sig_re, sig_im, fsam, sig_length)
FILE *filepointer;
double sig_re[],
sig_im[],
*fsam;
int *sig_length;
{
register int i; /* counter variable */
int sigtype; /* data file type */
double dummy1,
dummy2; /* dummy temporary variables */
fscanf (filepointer, "%d\n", &sigtype);
if (sigtype == 1) { /* Type one TFD file */
fscanf (filepointer, "%d\n%lg\n", sig_length, fsam);
for (i = 0; i < *sig_length; i++) {
fscanf (filepointer, "%lg\n", &sig_re[i]);
}
analytic (sig_re, sig_im, *sig_length);
}
else {
if (sigtype == 2) { /* Type 2 TFD file */
fprintf(stderr,"Complex signal.\n");
fscanf (filepointer, "%d\n%lg\n", sig_length, fsam);
for (i = 0; i < *sig_length; i++) {
fscanf (filepointer, "(%lg,%lg)\n", &sig_re[i], &sig_im[i]);
printf("%lg\n",sig_re[i]);
}
}
else {
fprintf (stderr, "ccg : incorrect input format.\n");
exit (7);
}
fclose (filepointer);
}
} /* END OF FUNCTION get_signal */
fscanf (filepointer, "%d\n%lg\n", sig_length, fsam);
调用C函数fscanf,根据格式字符串从文件中读取格式化数据。
本例中的格式字符串是 "%d\n%lg\n"
,它分解为 %d
(一个整数)、一个换行符、%lg
(一个 double
)和另一个新队。所以,基本上,它从文件中读取两行,第一行应该包含一个带有采样长度的整数,第二行包含采样率。
例如,使用现代采样率:
1
256
44100.0
1.0
0.98
0.96
...
其中第一行是 sigtype,第二行和第三行是信号长度(以样本为单位)和采样率,其余行是信号值。