9 * @brief
\83G
\83\89\81[
\82ª
\82 \82Á
\82½
\8e\9e\82É
\95W
\8f\80\8fo
\97Í
\82É
\89½
\82©
\8fo
\82·
\81B
\r
11 * @param RESULT
\83G
\83\89\81[
\83R
\81[
\83h
\81B
\r
13 #define WAVFILE_ERROR_PRINT(RESULT) \
\r
15 WavFileResult R = RESULT; \
\r
16 if (R != WavFileResultOK) { \
\r
17 char wavfile_error_print_text[BUFSIZ]; \
\r
18 wavfile_result_string(R, wavfile_error_print_text, sizeof(wavfile_error_print_text)); \
\r
19 printf("%s (code=%d)\n", wavfile_error_print_text, R); \
\r
25 * @brief Channel separation test.
\r
27 * @param filename Source file name.
\r
29 static int channel_separation(const char *filename)
\r
31 WavFileResult result;
\r
32 wavfile_info_t info_input;
\r
33 wavfile_info_t info_output;
\r
35 WAVFILE *wf_output[WAVFILE_MAXIMUM_CHANNELS];
\r
39 *
\93ü
\97Í
\83t
\83@
\83C
\83\8b\82ð
\8aJ
\82
\81B
\r
41 wf_input = wavfile_open(filename, WavFileModeRead, &result);
\r
42 WAVFILE_ERROR_PRINT(result);
\r
45 *
\93ü
\97Í
\83t
\83@
\83C
\83\8b\82©
\82ç
\8fî
\95ñ
\82ð
\93Ç
\82Ý
\8d\9e\82Þ
\81B
\r
47 WAVFILE_ERROR_PRINT(wavfile_read_info(wf_input, &info_input));
\r
50 *
\8e¯
\95Ê
\8fî
\95ñ
\82ð
\95\
\8e¦
\82·
\82é
\81B
\r
52 printf("[INPUT]\n");
\r
53 printf("\tWAVFILE_INFO_AUDIO_FORMAT(&info) = %d\n", WAVFILE_INFO_AUDIO_FORMAT(&info_input));
\r
54 printf("\tWAVFILE_INFO_NUM_CHANNELS(&info) = %d\n", WAVFILE_INFO_NUM_CHANNELS(&info_input));
\r
55 printf("\tWAVFILE_INFO_SAMPLE_RATE(&info) = %d\n", WAVFILE_INFO_SAMPLE_RATE(&info_input));
\r
56 printf("\tWAVFILE_INFO_BYTE_RATE(&info) = %d\n", WAVFILE_INFO_BYTE_RATE(&info_input));
\r
57 printf("\tWAVFILE_INFO_BLOCK_ALIGN(&info) = %d\n", WAVFILE_INFO_BLOCK_ALIGN(&info_input));
\r
58 printf("\tWAVFILE_INFO_BITS_PER_SAMPLE(&info) = %d\n", WAVFILE_INFO_BITS_PER_SAMPLE(&info_input));
\r
61 *
\93ü
\97Í
\82©
\82ç
\93¾
\82½
\8fî
\95ñ
\82ð
\8aî
\82É
\81A
\8fo
\97Í
\82Ì
\8fî
\95ñ
\82ð
\90¶
\90¬
\82·
\82é
\81B
\r
63 WAVFILE_INFO_AUDIO_FORMAT(&info_output) = WAVFILE_INFO_AUDIO_FORMAT(&info_input);
\r
64 WAVFILE_INFO_NUM_CHANNELS(&info_output) = WAVFILE_INFO_NUM_CHANNELS(&info_input) / WAVFILE_INFO_NUM_CHANNELS(&info_input);
\r
65 WAVFILE_INFO_SAMPLE_RATE(&info_output) = WAVFILE_INFO_SAMPLE_RATE(&info_input);
\r
66 WAVFILE_INFO_BYTE_RATE(&info_output) = WAVFILE_INFO_BYTE_RATE(&info_input) / WAVFILE_INFO_NUM_CHANNELS(&info_input);
\r
67 WAVFILE_INFO_BLOCK_ALIGN(&info_output) = WAVFILE_INFO_BLOCK_ALIGN(&info_input) / WAVFILE_INFO_NUM_CHANNELS(&info_input);
\r
68 WAVFILE_INFO_BITS_PER_SAMPLE(&info_output) = WAVFILE_INFO_BITS_PER_SAMPLE(&info_input);
\r
71 *
\8e¯
\95Ê
\8fî
\95ñ
\82ð
\95\
\8e¦
\82·
\82é
\81B
\r
73 printf("[OUTPUT]\n");
\r
74 printf("\tWAVFILE_INFO_AUDIO_FORMAT(&info) = %d\n", WAVFILE_INFO_AUDIO_FORMAT(&info_output));
\r
75 printf("\tWAVFILE_INFO_NUM_CHANNELS(&info) = %d\n", WAVFILE_INFO_NUM_CHANNELS(&info_output));
\r
76 printf("\tWAVFILE_INFO_SAMPLE_RATE(&info) = %d\n", WAVFILE_INFO_SAMPLE_RATE(&info_output));
\r
77 printf("\tWAVFILE_INFO_BYTE_RATE(&info) = %d\n", WAVFILE_INFO_BYTE_RATE(&info_output));
\r
78 printf("\tWAVFILE_INFO_BLOCK_ALIGN(&info) = %d\n", WAVFILE_INFO_BLOCK_ALIGN(&info_output));
\r
79 printf("\tWAVFILE_INFO_BITS_PER_SAMPLE(&info) = %d\n", WAVFILE_INFO_BITS_PER_SAMPLE(&info_output));
\r
82 *
\83t
\83@
\83C
\83\8b\82ð
\8aJ
\82¢
\82Ä
\83w
\83b
\83_
\82ð
\8f\91\82
\81B
\r
84 for (i = 0; i < WAVFILE_INFO_NUM_CHANNELS(&info_input); i++) {
\r
86 *
\8fo
\97Í
\83t
\83@
\83C
\83\8b\82ð
\8aJ
\82
\81B
\r
89 sprintf(buf, "%s-ch%02d.wav", filename, i);
\r
90 wf_output[i] = wavfile_open(buf, WavFileModeWrite, &result);
\r
91 WAVFILE_ERROR_PRINT(result);
\r
94 *
\8fo
\97Í
\83t
\83@
\83C
\83\8b\82Ö
\8fî
\95ñ
\82ð
\8f\91\82«
\8d\9e\82Þ
\81B
\r
96 WAVFILE_ERROR_PRINT(wavfile_write_info(wf_output[i], &info_output));
\r
100 wavfile_data_t data_input;
\r
101 wavfile_data_t data_output;
\r
104 *
\93ü
\97Í
\83t
\83@
\83C
\83\8b\82©
\82ç
\83f
\81[
\83^
\82ð
\93Ç
\82Ý
\8d\9e\82Þ
\81B
\r
106 WAVFILE_ERROR_PRINT(wavfile_read_data(wf_input, &data_input));
\r
109 *
\83f
\81[
\83^
\82ª
\82±
\82ê
\88È
\8fã
\82È
\82¯
\82ê
\82Î
\8fI
\97¹
\81B
\r
111 if (WAVFILE_DATA_IS_END_OF_DATA(&data_input)) {
\r
116 *
\8fo
\97Í
\83t
\83@
\83C
\83\8b\82Ö
\83f
\81[
\83^
\82ð
\8f\91\82«
\8d\9e\82Þ
\81B
\r
118 for (i = 0; i < WAVFILE_DATA_NUM_CHANNELS(&data_input); i++) {
\r
119 WAVFILE_DATA_NUM_CHANNELS(&data_output) = 1;
\r
120 WAVFILE_DATA_CHANNEL_DATA(&data_output, 0) = WAVFILE_DATA_CHANNEL_DATA(&data_input, i);
\r
121 WAVFILE_ERROR_PRINT(wavfile_write_data(wf_output[i], &data_output));
\r
126 *
\93ü
\97Í
\83t
\83@
\83C
\83\8b\82ð
\95Â
\82¶
\82é
\81B
\r
128 WAVFILE_ERROR_PRINT(wavfile_close(wf_input));
\r
131 *
\8fo
\97Í
\83t
\83@
\83C
\83\8b\82ð
\95Â
\82¶
\82é
\81B
\r
133 for (i = 0; i < WAVFILE_INFO_NUM_CHANNELS(&info_input); i++) {
\r
134 WAVFILE_ERROR_PRINT(wavfile_close(wf_output[i]));
\r
141 int main(int argc, char **argv)
\r
145 double *x_real, *x_imag;
\r
148 printf("ffttool <wave file name>\n");
\r
152 /* WAVE
\83t
\83@
\83C
\83\8b\82©
\82ç
\83\82\83m
\83\89\83\8b\82Ì
\89¹
\83f
\81[
\83^
\82ð
\93ü
\97Í
\82·
\82é */
\r
153 mono_wave_read(&pcm0, argv[1]);
\r
156 x_real = calloc(N, sizeof(double));
\r
157 x_imag = calloc(N, sizeof(double));
\r
159 for (n = 0; n < N; n++)
\r
161 /* x(n)
\82Ì
\8eÀ
\90\94\95\94 */
\r
162 x_real[n] = pcm0.s[n];
\r
163 /* x(n)
\82Ì
\8b\95\90\94\95\94 */
\r
167 /* FFT
\82Ì
\8cv
\8eZ
\8c\8b\89Ê
\82Íx_real
\82Æx_imag
\82É
\8fã
\8f\91\82«
\82³
\82ê
\82é */
\r
168 FFT(x_real, x_imag, N);
\r
170 /*
\8eü
\94g
\90\94\93Á
\90« */
\r
171 for (k = 0; k < N; k++) {
\r
172 printf("%d %f+j%f\n", k, x_real[k], x_imag[k]);
\r