--- /dev/null
+/* Roast+ License
+
+// ### C compilable ###
+
+// WAVE File Format Header
+*/
+#ifndef __SFJP_ROAST_roast_riff_H__
+#define __SFJP_ROAST_roast_riff_H__
+
+#include <stdio.h> /* FILE */
+#include "roast_common.h" /* ROAST_BOOL */
+
+
+/*typedef unsigned long roast_ul32;*/
+
+
+/*------------------------------------*/
+/* RIFF Chunk Header */
+/*------------------------------------*/
+typedef struct
+{
+ char chunk_name[4]; /* "RIFF", "WAVE", "AVI ", "LIST" ... */
+ unsigned long chunk_size; /* Chunk Size */
+
+} ROAST_RIFF_CHUNK_HEADER;
+
+
+
+/*------------------------------------*/
+/* RIFF Header */
+/*------------------------------------*/
+typedef struct
+{
+ char riff_fix_str[4]; /* "RIFF" Fix String */
+ unsigned long riff_size; /* RIFF Size (After the this item length. = File Size-8) */
+ char riff_form_type[4]; /* Form Type. e.g.) "WAVE", "AVI " ... */
+
+/*} ROAST_WAVE_FILE_FORMAT_RIFF_HEADER;*/
+} ROAST_RIFF_HEADER;
+
+#define ROAST_RIFF_FIX_STRING "RIFF"
+#define ROAST_RIFF_LIST_STRING "LIST"
+#define ROAST_RIFF_FORM_TYPE_LIST "LIST"
+#define ROAST_RIFF_FORM_TYPE_WAVE "WAVE"
+#define ROAST_RIFF_FORM_TYPE_AVI "AVI "
+
+
+
+/* === Functions ===================== */
+
+__ROAST_EXTERN_C_START
+
+
+
+
+ROAST_BOOL roast_riff_fseek_RIFF_header( FILE* fp );
+
+ROAST_BOOL roast_riff_read_RIFF_header( const char* filename, ROAST_RIFF_HEADER* p_riff_out );
+ROAST_BOOL roast_riff_read_RIFF_header_fp( FILE* fp, ROAST_RIFF_HEADER* p_riff_out ); /* fp : Require! File Pointer Setted SEEK_SET 0. */
+
+/*ROAST_BOOL roast_read_riff_chunk( const char* filename, ROAST_RIFF_CHUNK_HEADER* p_parent_chunk,
+ const char* chunk_name, void* p_chunk_out, unsigned int chunk_bufsize );*/
+ROAST_BOOL roast_riff_read_chunk_fp( FILE* fp, ROAST_RIFF_CHUNK_HEADER* p_parent_chunk,
+ const char* chunk_name, void* p_chunk_out, unsigned int chunk_bufsize ); /* fp : Require! File Pointer Setted SEEK_SET 0. */
+
+
+
+
+
+/* RIFF Read Chunk Header (File Pointer Specify) */
+/*
+ * fp : Require! File Pointer Setted Chunk Header.
+*/
+ROAST_RIFF_CHUNK_HEADER* roast_riff_read_chunk_header_fp( FILE* fp, ROAST_RIFF_CHUNK_HEADER* p_chunk_out );
+
+/* RIFF Next Chunk Header (File Pointer Specify) */
+/*
+ * fp : Require! File Pointer Setted Chunk Body.
+*/
+ROAST_RIFF_CHUNK_HEADER* roast_riff_next_chunk_header_fp( FILE* fp, ROAST_RIFF_CHUNK_HEADER* p_parent_chunk, ROAST_RIFF_CHUNK_HEADER* p_chunk_out );
+
+/* Read RIFF Chunk Header (File Pointer Specify) */
+/*
+ * fp : Require! File Pointer Setted Chunk Header.
+*/
+ROAST_BOOL roast_riff_find_chunk_header_fp( FILE* fp, ROAST_RIFF_CHUNK_HEADER* p_parent_chunk,
+ const char* chunk_name, ROAST_RIFF_CHUNK_HEADER* p_chunk_header_out );
+
+/* Read RIFF Chunk Body (File Pointer Specify) */
+/*
+ * fp : Require! File Pointer Setted Chunk Body.
+*/
+ROAST_BOOL roast_riff_read_chunk_body_fp( FILE* fp, ROAST_RIFF_CHUNK_HEADER* p_chunk_header, void* p_body_out );
+#define roast_riff_read_chunk_data_fp roast_riff_read_chunk_body_fp
+
+
+
+
+ROAST_RIFF_HEADER* roast_riff_create_chunk( ROAST_RIFF_HEADER* buf, unsigned long riff_size, const char* form_type );
+
+
+
+
+
+__ROAST_EXTERN_C_END
+
+
+
+
+/* === errno ============================ */
+
+/* RIFF: Chunk Header Read Failed. (fread() return error) */
+#define ROAST_RIFF_ERRNO_RIFF_HEADER_READ_FAILED (ROAST_ERRNO__RIFF_START + 0x0060)
+
+
+
+/* --- RIFF --- */
+
+/* RIFF: RIFF Header fseek() Failed. */
+#define ROAST_RIFF_ERRNO_RIFF_FSEEK_FAILED (ROAST_ERRNO__RIFF_START + 0x0110)
+
+/* RIFF: RIFF Header Read Failed. (fread() return error) */
+#define ROAST_RIFF_ERRNO_RIFF_RIFF_HEADER_READ_FAILED (ROAST_ERRNO__RIFF_START + 0x0120)
+
+/* RIFF: RIFF Header Invalid. (Chunk Name was not "RIFF") */
+#define ROAST_RIFF_ERRNO_RIFF_RIFF_HEADER_INVALID (ROAST_ERRNO__RIFF_START + 0x0121)
+
+
+
+#endif/*__SFJP_ROAST_roast_riff_H__*/
--- /dev/null
+/* Roast+ License
+
+// ### C compilable ###
+
+// \83t\83@\83C\83\8b\8cn\8aÖ\90\94
+*/
+#ifndef __SFJP_OPENMGL_roast_wave_file_H__
+#define __SFJP_OPENMGL_roast_wave_file_H__
+
+#include "roast_common.h"
+#include "roast_file.h"
+
+#include "roast_wave_file_format.h"
+
+#include <stdio.h>
+
+
+/*=============================================================================*/
+
+
+__ROAST_EXTERN_C_START
+
+
+/* === PCM Wave ===================== */
+
+#define ROAST_READ_PCM_WAVE_PART_RIFF_HEADER (0x00000010)
+#define ROAST_READ_PCM_WAVE_PART_FMT_HEADER (0x00000100)
+#define ROAST_READ_PCM_WAVE_PART_FMT_BODY (0x00000200)
+#define ROAST_READ_PCM_WAVE_PART_DATA_HEADER (0x00001000)
+#define ROAST_READ_PCM_WAVE_PART_DATA_BODY (0x00008000)
+
+
+/*ROAST_BOOL roast_read_wave_file( const char* filename, ROAST_PCM_WAVEFILE* p_out );*/
+ROAST_PCM_WAVEFILE* roast_read_pcm_wave_file( const char* filename );
+
+ROAST_BOOL roast_part_read_pcm_wave_file( const char* filename, int part_flags, ROAST_PCM_WAVEFILE *p_buf );
+ROAST_BOOL roast_part_read_pcm_wave_file_fp( FILE* fp, int part_flags, ROAST_PCM_WAVEFILE *p_buf );
+
+void roast_free_pcm_wave_file( ROAST_PCM_WAVEFILE* p_wavefile );
+
+
+
+__ROAST_EXTERN_C_END
+
+
+
+#endif/*__SFJP_OPENMGL_roast_wave_file_H__*/
--- /dev/null
+/* Roast+ License
+
+// ### C compilable ###
+
+// WAVE File Format Header
+*/
+#ifndef __SFJP_OPENMGL_roast_wave_file_format_H__
+#define __SFJP_OPENMGL_roast_wave_file_format_H__
+
+#include "roast_riff.h"
+
+
+/*------------------------------------*/
+/* WAVE "fmt" Header */
+/*------------------------------------*/
+typedef struct
+{
+ char fmt_fix_str[4]; /* "fmt " Fix String (Include Space!) */
+ unsigned long fmt_size; /* fmt Size */
+
+ /*void* WAVEfmt_data;*/
+ unsigned short usFormatType; /* PCM:1 */
+ unsigned short usChannels; /* Mono:1 / Streo:2 */
+ unsigned long ulSampleRate; /* Sample Per Second. = 11025, 22050, 44100.. */
+ unsigned long ulBytesPerSec; /* ulSamplesPerSec * usChannels * usBit/8 */
+ unsigned short usBytePerSample; /* block size of data (usBit/8 * usChannels) */
+ unsigned short usSampleBit; /* Sample Bit. 8, 16, 24... */
+
+ /*unsigned short usExtendSize;*/ /* Extend Data Size -> Not PCM Only... */
+
+/*} ROAST_WAVE_FILE_FORMAT_WAVEFMT_HEADER;*/
+} ROAST_WAVE_FMT_HEADER;
+
+#define ROAST_WAVEFILE_FMT_FIX_STRING "fmt "
+#define ROAST_WAVEFILE_CHUNK_NAME_FMT ROAST_WAVEFILE_FMT_FIX_STRING
+
+#define ROAST_WAVEFMT_FORMAT_TYPE_PCM (1)
+
+#define ROAST_WAVEFMT_PCM_CHANNELS_MONO (1)
+#define ROAST_WAVEFMT_PCM_CHANNELS_STEREO (2)
+
+
+
+/*------------------------------------*/
+/* WAVE "data" Header */
+/*------------------------------------*/
+typedef struct
+{
+ char data_fix_str[4]; /* "data" Fix String */
+ unsigned long data_size; /* data Size */
+
+} ROAST_WAVE_DATA_HEADER;
+
+#define ROAST_WAVEFILE_DATA_FIX_STRING "data"
+
+
+
+/**************************************/
+/* PCM WAVE File Format */
+/**************************************/
+typedef struct
+{
+ ROAST_RIFF_HEADER riff; /* RIFF Header */
+ ROAST_WAVE_FMT_HEADER fmt; /* fmt Header */
+
+ ROAST_WAVE_DATA_HEADER data; /* data Heaer */
+
+ void* p_data;
+
+} ROAST_PCM_WAVEFILE;
+
+
+
+#endif/*__SFJP_OPENMGL_roast_wave_file_format_H__*/