+#include "wavfile.h"\r
+\r
+/**\r
+ * @brief \83G\83\89\81[\82ª\82 \82Á\82½\8e\9e\82É\95W\8f\80\8fo\97Í\82É\89½\82©\8fo\82·\81B\r
+ *\r
+ * @param RESULT \83G\83\89\81[\83R\81[\83h\81B\r
+ */\r
+#define WAVFILE_ERROR_PRINT(RESULT) \\r
+ do { \\r
+ WavFileResult R = RESULT; \\r
+ if (R != WavFileResultOK) { \\r
+ char wavfile_error_print_text[BUFSIZ]; \\r
+ wavfile_result_string(R, wavfile_error_print_text, sizeof(wavfile_error_print_text)); \\r
+ printf("%s (code=%d)\n", wavfile_error_print_text, R); \\r
+ return 1; \\r
+ } \\r
+ } while(0)\r
+\r
+/**\r
+ * @brief Channel separation test.\r
+ *\r
+ * @param filename Source file name.\r
+ */\r
+static int channel_separation(const char *filename)\r
+{\r
+ WavFileResult result;\r
+ wavfile_info_t info_input;\r
+ wavfile_info_t info_output;\r
+ WAVFILE *wf_input;\r
+ WAVFILE *wf_output[WAVFILE_MAXIMUM_CHANNELS];\r
+ int i;\r
+\r
+ /*\r
+ * \93ü\97Í\83t\83@\83C\83\8b\82ð\8aJ\82\81B\r
+ */\r
+ wf_input = wavfile_open(filename, WavFileModeRead, &result);\r
+ WAVFILE_ERROR_PRINT(result);\r
+\r
+ /*\r
+ * \93ü\97Í\83t\83@\83C\83\8b\82©\82ç\8fî\95ñ\82ð\93Ç\82Ý\8d\9e\82Þ\81B\r
+ */\r
+ WAVFILE_ERROR_PRINT(wavfile_read_info(wf_input, &info_input));\r
+\r
+ /*\r
+ * \8e¯\95Ê\8fî\95ñ\82ð\95\\8e¦\82·\82é\81B\r
+ */\r
+ printf("[INPUT]\n");\r
+ printf("\tWAVFILE_INFO_AUDIO_FORMAT(&info) = %d\n", WAVFILE_INFO_AUDIO_FORMAT(&info_input));\r
+ printf("\tWAVFILE_INFO_NUM_CHANNELS(&info) = %d\n", WAVFILE_INFO_NUM_CHANNELS(&info_input));\r
+ printf("\tWAVFILE_INFO_SAMPLE_RATE(&info) = %d\n", WAVFILE_INFO_SAMPLE_RATE(&info_input));\r
+ printf("\tWAVFILE_INFO_BYTE_RATE(&info) = %d\n", WAVFILE_INFO_BYTE_RATE(&info_input));\r
+ printf("\tWAVFILE_INFO_BLOCK_ALIGN(&info) = %d\n", WAVFILE_INFO_BLOCK_ALIGN(&info_input));\r
+ printf("\tWAVFILE_INFO_BITS_PER_SAMPLE(&info) = %d\n", WAVFILE_INFO_BITS_PER_SAMPLE(&info_input));\r
+\r
+ /*\r
+ * \93ü\97Í\82©\82ç\93¾\82½\8fî\95ñ\82ð\8aî\82É\81A\8fo\97Í\82Ì\8fî\95ñ\82ð\90¶\90¬\82·\82é\81B\r
+ */\r
+ WAVFILE_INFO_AUDIO_FORMAT(&info_output) = WAVFILE_INFO_AUDIO_FORMAT(&info_input);\r
+ WAVFILE_INFO_NUM_CHANNELS(&info_output) = WAVFILE_INFO_NUM_CHANNELS(&info_input) / WAVFILE_INFO_NUM_CHANNELS(&info_input);\r
+ WAVFILE_INFO_SAMPLE_RATE(&info_output) = WAVFILE_INFO_SAMPLE_RATE(&info_input);\r
+ WAVFILE_INFO_BYTE_RATE(&info_output) = WAVFILE_INFO_BYTE_RATE(&info_input) / WAVFILE_INFO_NUM_CHANNELS(&info_input);\r
+ WAVFILE_INFO_BLOCK_ALIGN(&info_output) = WAVFILE_INFO_BLOCK_ALIGN(&info_input) / WAVFILE_INFO_NUM_CHANNELS(&info_input);\r
+ WAVFILE_INFO_BITS_PER_SAMPLE(&info_output) = WAVFILE_INFO_BITS_PER_SAMPLE(&info_input);\r
+\r
+ /*\r
+ * \8e¯\95Ê\8fî\95ñ\82ð\95\\8e¦\82·\82é\81B\r
+ */\r
+ printf("[OUTPUT]\n");\r
+ printf("\tWAVFILE_INFO_AUDIO_FORMAT(&info) = %d\n", WAVFILE_INFO_AUDIO_FORMAT(&info_output));\r
+ printf("\tWAVFILE_INFO_NUM_CHANNELS(&info) = %d\n", WAVFILE_INFO_NUM_CHANNELS(&info_output));\r
+ printf("\tWAVFILE_INFO_SAMPLE_RATE(&info) = %d\n", WAVFILE_INFO_SAMPLE_RATE(&info_output));\r
+ printf("\tWAVFILE_INFO_BYTE_RATE(&info) = %d\n", WAVFILE_INFO_BYTE_RATE(&info_output));\r
+ printf("\tWAVFILE_INFO_BLOCK_ALIGN(&info) = %d\n", WAVFILE_INFO_BLOCK_ALIGN(&info_output));\r
+ printf("\tWAVFILE_INFO_BITS_PER_SAMPLE(&info) = %d\n", WAVFILE_INFO_BITS_PER_SAMPLE(&info_output));\r
+\r
+ /*\r
+ * \83t\83@\83C\83\8b\82ð\8aJ\82¢\82Ä\83w\83b\83_\82ð\8f\91\82\81B\r
+ */\r
+ for (i = 0; i < WAVFILE_INFO_NUM_CHANNELS(&info_input); i++) {\r
+ /*\r
+ * \8fo\97Í\83t\83@\83C\83\8b\82ð\8aJ\82\81B\r
+ */\r
+ char buf[BUFSIZ];\r
+ sprintf(buf, "%s-ch%02d.wav", filename, i);\r
+ wf_output[i] = wavfile_open(buf, WavFileModeWrite, &result);\r
+ WAVFILE_ERROR_PRINT(result);\r
+\r
+ /*\r
+ * \8fo\97Í\83t\83@\83C\83\8b\82Ö\8fî\95ñ\82ð\8f\91\82«\8d\9e\82Þ\81B\r
+ */\r
+ WAVFILE_ERROR_PRINT(wavfile_write_info(wf_output[i], &info_output));\r
+ }\r
+\r
+ while (1) {\r
+ wavfile_data_t data_input;\r
+ wavfile_data_t data_output;\r
+\r
+ /*\r
+ * \93ü\97Í\83t\83@\83C\83\8b\82©\82ç\83f\81[\83^\82ð\93Ç\82Ý\8d\9e\82Þ\81B\r
+ */\r
+ WAVFILE_ERROR_PRINT(wavfile_read_data(wf_input, &data_input));\r
+\r
+ /*\r
+ * \83f\81[\83^\82ª\82±\82ê\88È\8fã\82È\82¯\82ê\82Î\8fI\97¹\81B\r
+ */\r
+ if (WAVFILE_DATA_IS_END_OF_DATA(&data_input)) {\r
+ break;\r
+ }\r
+\r
+ /*\r
+ * \8fo\97Í\83t\83@\83C\83\8b\82Ö\83f\81[\83^\82ð\8f\91\82«\8d\9e\82Þ\81B\r
+ */\r
+ for (i = 0; i < WAVFILE_DATA_NUM_CHANNELS(&data_input); i++) {\r
+ WAVFILE_DATA_NUM_CHANNELS(&data_output) = 1;\r
+ WAVFILE_DATA_CHANNEL_DATA(&data_output, 0) = WAVFILE_DATA_CHANNEL_DATA(&data_input, i);\r
+ WAVFILE_ERROR_PRINT(wavfile_write_data(wf_output[i], &data_output));\r
+ }\r
+ }\r
+\r
+ /*\r
+ * \93ü\97Í\83t\83@\83C\83\8b\82ð\95Â\82¶\82é\81B\r
+ */\r
+ WAVFILE_ERROR_PRINT(wavfile_close(wf_input));\r
+\r
+ /*\r
+ * \8fo\97Í\83t\83@\83C\83\8b\82ð\95Â\82¶\82é\81B\r
+ */\r
+ for (i = 0; i < WAVFILE_INFO_NUM_CHANNELS(&info_input); i++) {\r
+ WAVFILE_ERROR_PRINT(wavfile_close(wf_output[i]));\r
+ }\r
+\r
+ return 0;\r
+}\r
+\r