mirror of
https://github.com/vsariola/sointu.git
synced 2025-05-28 03:10:24 -04:00
Specifically: * Added win32, elf32 and elf64 asm player and wav writers using winmm. * Added dsound player in C. * Separated the ALL target and the examples; introduced a new examples target.
73 lines
1.8 KiB
C
73 lines
1.8 KiB
C
#include <stdio.h>
|
|
#include <stdint.h>
|
|
#include "physics_girl_st.h"
|
|
|
|
#define WAVE_FORMAT_PCM 0x1
|
|
#define WAVE_FORMAT_IEEE_FLOAT 0x3
|
|
|
|
static SUsample sound_buffer[SU_LENGTH_IN_SAMPLES * SU_CHANNEL_COUNT];
|
|
|
|
#pragma pack(push, 1)
|
|
typedef struct {
|
|
char riff[4];
|
|
uint32_t file_size;
|
|
char wavefmt[8];
|
|
} riff_header_t;
|
|
|
|
typedef struct {
|
|
char data[4];
|
|
uint32_t data_size;
|
|
} data_header_t;
|
|
|
|
typedef struct {
|
|
riff_header_t riff_header;
|
|
uint32_t riff_header_size;
|
|
uint16_t sample_type;
|
|
uint16_t channel_count;
|
|
uint32_t sample_rate;
|
|
uint32_t bytes_per_second;
|
|
uint16_t bytes_per_channel;
|
|
uint16_t bits_per_sample;
|
|
data_header_t data_header;
|
|
} wave_header_t;
|
|
#pragma pack(pop)
|
|
|
|
int main(int argc, char **args) {
|
|
wave_header_t wave_header = {
|
|
.riff_header = (riff_header_t) {
|
|
.riff = "RIFF",
|
|
.file_size = sizeof(wave_header_t) + SU_LENGTH_IN_SAMPLES * SU_SAMPLE_SIZE * SU_CHANNEL_COUNT,
|
|
.wavefmt = "WAVEfmt ",
|
|
},
|
|
.riff_header_size = sizeof(riff_header_t),
|
|
#ifdef SU_SAMPLE_FLOAT
|
|
.sample_type = WAVE_FORMAT_IEEE_FLOAT,
|
|
#else // SU_SAMPLE_FLOAT
|
|
.sample_type = WAVE_FORMAT_PCM,
|
|
#endif // SU_SAMPLE_FLOAT
|
|
.channel_count = SU_CHANNEL_COUNT,
|
|
.sample_rate = SU_SAMPLE_RATE,
|
|
.bytes_per_second = SU_SAMPLE_SIZE * SU_SAMPLE_RATE * SU_CHANNEL_COUNT,
|
|
.bytes_per_channel = SU_SAMPLE_SIZE * SU_CHANNEL_COUNT,
|
|
.bits_per_sample = SU_SAMPLE_SIZE * 8,
|
|
.data_header = (data_header_t) {
|
|
.data = "data",
|
|
.data_size = sizeof(data_header_t) + SU_LENGTH_IN_SAMPLES * SU_SAMPLE_SIZE * SU_CHANNEL_COUNT
|
|
}
|
|
};
|
|
|
|
// Load gm.dls if necessary.
|
|
#ifdef SU_LOAD_GMDLS
|
|
su_load_gmdls();
|
|
#endif // SU_LOAD_GMDLS
|
|
|
|
su_render_song(sound_buffer);
|
|
|
|
FILE *file = fopen("physics_girl_st.wav", "wb");
|
|
fwrite(&wave_header, sizeof(wave_header_t), 1, file);
|
|
fwrite((uint8_t *)sound_buffer, 1, SU_LENGTH_IN_SAMPLES * SU_SAMPLE_SIZE * SU_CHANNEL_COUNT, file);
|
|
fclose(file);
|
|
|
|
return 0;
|
|
}
|