@@ -22,8 +22,6 @@ typedef struct
2222
2323void staticDataBufferInit (StaticDataBuffer * buffer , void * data , size_t size )
2424{
25- memset (buffer , 0 , sizeof (StaticDataBuffer ));
26-
2725 buffer -> data = (int16_t * )linearAlloc (size );
2826 buffer -> size = size ;
2927
@@ -36,6 +34,16 @@ void staticDataBufferDestroy(StaticDataBuffer* buffer)
3634 linearFree (buffer -> data );
3735}
3836
37+ void audioCallback (void * const data ) {
38+ ndspWaveBuf * wbuf = data ;
39+
40+ if (wbuf -> status == NDSP_WBUF_DONE ) {
41+ printf ("Playback complete, press Start to exit\n" );
42+ wbuf -> status = NDSP_WBUF_FREE ;
43+ return ;
44+ }
45+ }
46+
3947int main (int argc , char * * argv )
4048{
4149 gfxInitDefault ();
@@ -91,7 +99,7 @@ int main(int argc, char **argv)
9199 free (buffer );
92100 fclose (file );
93101
94- if (decoder .plug == 0 )
102+ if (decoder .plug == 0 )
95103 printf ("Well shit, could not load file!\n" );
96104 else
97105 ModPlug_SetMasterVolume (decoder .plug , 128 );
@@ -120,12 +128,12 @@ int main(int argc, char **argv)
120128
121129 size_t decoded = ModPlug_Read (decoder .plug , decodedBuffer , decoderSize );
122130
123- StaticDataBuffer staticDataBuffer ;
131+ StaticDataBuffer staticDataBuffer = { 0 } ;
124132 staticDataBufferInit (& staticDataBuffer , decodedBuffer , decoded );
125133
126134 printf ("Decoded Size: %zu\n" , decoded );
127135
128- waveBuf .nsamples = ((decoded / 2 ) / 16 / 8 );
136+ waveBuf .nsamples = ((decoded / 2 ) / sizeof ( int16_t ) );
129137 waveBuf .looping = false;
130138
131139 waveBuf .data_pcm16 = (int16_t * )staticDataBuffer .data ;
@@ -138,6 +146,7 @@ int main(int argc, char **argv)
138146
139147 printf ("Playing modplug file!\n" );
140148 ndspChnWaveBufAdd (0 , & waveBuf );
149+ ndspSetCallback (audioCallback , & waveBuf );
141150
142151 // Main loop
143152 while (aptMainLoop ())
0 commit comments