This commit is contained in:
aerglass 2023-08-02 19:11:24 -04:00
parent 497a89b2bc
commit 1f7783fe75
2 changed files with 50 additions and 29 deletions

View File

@ -1,47 +1,58 @@
//PA_EMSL.C : Programmer's Arsenal Easy Maxmod Sound Library.
//Code fully written by AerGlass, with reference of
//https://github.com/qgerman2/streaming_example
/*
PA_EMSL.cpp : Programmer's Arsenal Easy Maxmod Sound Library.
Code fully written by AerGlass, with reference of
https://github.com/qgerman2/streaming_example
Thanks to:
DesCube
devkitPro
PAlib developers.
*/
#include <PA9.h>
#include <fat.h>
#include <maxmod9.h>
#include <filesystem.h>
#include <stdio.h>
#include "PA_emsl.h"
mm_stream ESML_StreamSys;
mm_stream EMSL_StreamSys;
mm_word EMSL_Stream(mm_word length, mm_addr dest, mm_stream_formats format);
FILE* file;
ESML_TStreamInfo ESML_StreamInfo;
ESML_TStreamInfo EMSL_StreamInfo;
void ESML_InitDefault(){
ESML_StreamInfo.buffer_length = 16000;
ESML_StreamInfo.format = MM_STREAM_16BIT_MONO;
ESML_StreamInfo.sampling_rate = 22050;
void EMSL_InitDefault(){
EMSL_StreamInfo.buffer_length = 16000;
EMSL_StreamInfo.format = MM_STREAM_16BIT_MONO;
EMSL_StreamInfo.sampling_rate = 22050;
mm_ds_system sys;
sys.mod_count = 0;
sys.samp_count = 0;
sys.fifo_channel = FIFO_MAXMOD;
mmInit( &sys );
}
void ESML_PlayWav(const char* filename) {
void EMSL_PlayWav(const char* filename) {
//load audio file
file = fopen(filename, "rb");
if(!file) return;
//initialize maxmod system
//https://maxmod.devkitpro.org/ref/functions/mmInit.html
mm_ds_system sys;
sys.mod_count = 0;
sys.samp_count = 0;
sys.fifo_channel = FIFO_MAXMOD;
mmInit( &sys );
//create a stream
//https://maxmod.devkitpro.org/ref/functions/mm_stream.html
ESML_StreamSys.sampling_rate = ESML_StreamInfo.sampling_rate;
ESML_StreamSys.buffer_length = ESML_StreamInfo.buffer_length;
ESML_StreamSys.callback = EMSL_Stream;
ESML_StreamSys.format = ESML_StreamInfo.format;
ESML_StreamSys.timer = MM_TIMER2;
ESML_StreamSys.manual = 1;
mmStreamOpen(&ESML_StreamSys);
EMSL_StreamSys.sampling_rate = EMSL_StreamInfo.sampling_rate;
EMSL_StreamSys.buffer_length = EMSL_StreamInfo.buffer_length;
EMSL_StreamSys.callback = EMSL_Stream;
EMSL_StreamSys.format = EMSL_StreamInfo.format;
EMSL_StreamSys.timer = MM_TIMER2;
EMSL_StreamSys.manual = 1;
mmStreamOpen(&EMSL_StreamSys);
}
mm_word EMSL_Stream(mm_word length, mm_addr dest, mm_stream_formats format) {
if (file) {
int res = fread(dest, sizeof(s16), length, file);
u32 res = fread(dest, sizeof(s16), length, file);
if (res != length) {
fseek(file,0,SEEK_SET);
} else {

View File

@ -1,6 +1,16 @@
//PA_EMSL.C : Programmer's Arsenal Easy Maxmod Sound Library.
//Code fully written by AerGlass, with reference of
//https://github.com/qgerman2/streaming_example
/*
PA_EMSL.cpp : Programmer's Arsenal Easy Maxmod Sound Library.
Code fully written by AerGlass, with reference of
https://github.com/qgerman2/streaming_example
Thanks to:
DesCube
devkitPro
PAlib developers.
*/
#ifndef PA_EMSL_INCLUDED
#define PA_EMSL_INCLUDED
@ -17,8 +27,8 @@ typedef struct{
}ESML_TStreamInfo;
void EMSL_UpdateStream();
void EMSL_CloseStream();
void ESML_PlayWav(const char* filename);
void ESML_InitDefault();
void EMSL_PlayWav(const char* filename);
void EMSL_InitDefault();
extern ESML_TStreamInfo ESML_StreamInfo;
extern ESML_TStreamInfo EMSL_StreamInfo;
#endif