bl KLAL_LoadWavCore(KLAL* p, path8 pPath) { size_t sz; FILE* fp; if( !p ) p = &klal; fp = KLFile_Open( pPath, &sz ); if( !fp ) { return FALSE; } WAV_ReadHeader( fp, &p->wav.channel, &p->wav.bit, &p->wav.sz, &p->wav.freq, NULL, NULL, &p->totalms ); p->pData = (char*)realloc( p->pData, p->wav.sz ); if( !p->pData ) { KLLog("[ KLAL_LoadWav ] alloc error.\n"); } fread( p->pData, p->wav.sz, 1, fp ); fclose(fp); return TRUE; }
int main(int argc, char *argv[]) { char *filename; char *devicename = "default"; int fd; WAVContainer_t wav; SNDPCMContainer_t playback; if (argc != 2) { fprintf(stderr, "Usage: ./lplay <file name>/n"); return -1; } memset(&playback, 0x0, sizeof(playback)); filename = argv[1]; fd = open(filename, O_RDONLY); if (fd < 0) { fprintf(stderr, "Error open [%s]/n", filename); return -1; } if (WAV_ReadHeader(fd, &wav) < 0) { fprintf(stderr, "Error WAV_Parse [%s]/n", filename); goto Err; } if (snd_output_stdio_attach(&playback.log, stderr, 0) < 0) { fprintf(stderr, "Error snd_output_stdio_attach/n"); goto Err; } if (snd_pcm_open(&playback.handle, devicename, SND_PCM_STREAM_PLAYBACK, 0) < 0) { fprintf(stderr, "Error snd_pcm_open [ %s]/n", devicename); goto Err; } if (SNDWAV_SetParams(&playback, &wav) < 0) { fprintf(stderr, "Error set_snd_pcm_params/n"); goto Err; } snd_pcm_dump(playback.handle, playback.log); SNDWAV_Play(&playback, &wav, fd); snd_pcm_drain(playback.handle); close(fd); free(playback.data_buf); snd_output_close(playback.log); snd_pcm_close(playback.handle); return 0; Err: close(fd); if (playback.data_buf) free(playback.data_buf); if (playback.log) snd_output_close(playback.log); if (playback.handle) snd_pcm_close(playback.handle); return -1; }
bl KLAL_SetWav(KLAL* p, bin8* pData) { u32 bodyoffset = 0; if( !p ) p = &klal; WAV_ReadHeader( NULL, &p->wav.channel, &p->wav.bit, &p->wav.sz, &p->wav.freq, pData, &bodyoffset, &p->totalms ); p->pData = (char*)realloc( p->pData, p->wav.sz ); if( !p->pData ) { KLLog("[ KLAL_SetWav ] alloc error.\n"); return FALSE; } return TRUE; }