Page 3 of 3

Re: streaming audio

Posted: Fri Jun 26, 2009 6:47 pm
by eKid
buffer_length = 4096 should be fine.

Did you remember to call mmStreamUpdate periodically?

Re: streaming audio

Posted: Fri Jun 26, 2009 6:50 pm
by Tomdev
i call it every vbl, is this wrong :oops: or this one(this is the problem i think)?

sys.samp_count = 0;

if thatś the problem, i can solve it so easy 8)

Re: streaming audio

Posted: Fri Jun 26, 2009 7:05 pm
by eKid
Calling the update every frame is ideal.

Code: Select all

sys.samp_count = 0;
I'm not sure what this is...

Re: streaming audio

Posted: Fri Jun 26, 2009 7:11 pm
by Tomdev
yay it works now! but.. for a half :cry: , there are some parts with some noise, what i did was this:

change the wile in mm_word on_stream_request to if, i can explain it but it wasn't very logic to me

Re: streaming audio

Posted: Fri Jun 26, 2009 7:30 pm
by eKid
Oh, no that's something unrelated to this. Are you sure your OGG decoding stuff is progressing through the file rather than just decoding the beginning over and over?

edit: (oops this was targetted for that other post)

Re: streaming audio

Posted: Fri Jun 26, 2009 7:32 pm
by Tomdev
tested it with some other samples, i'm just almost there! still the same effect but the sampples ARE recognisable(the effect is like this: part good sound, part nothing/bit noise and so on until end of file). i'll pm you my main, maybe you can see whatś wrong :P

for other the rom, to hear the effect, its on my site:

edit: ok i've found a problem i think: i thought that when you did:

Code: Select all

s16 * test;
the pointer would point one byte furhter but that isn true. sound is better now. the only i can think off is that i don't update fast enough. ok here's the main i'm now using:

Code: Select all

#include <nds.h>
#include <filesystem.h>
#include <fat.h>
#include <stdio.h>
#include <stdlib.h>
#include "ivorbiscodec.h"
#include "ivorbisfile.h"
#include <maxmod9.h>

#define OGG_BUFFER_GROOTTE (4096) 

OggVorbis_File vf;
u8 channels;
u32 gelezen;
u32 samplecount;
mm_stream mystream;

void Update_OGG_Stream(OggVorbis_File * vf, void * buffer){

int current_section;
gelezen = 0;// we hebben immers nog niks gelezen in deze update

  while(gelezen<OGG_BUFFER_GROOTTE){// zolang het gelezen minder is dan de 
  //buffer grootte
    long ret = ov_read(vf,buffer,(OGG_BUFFER_GROOTTE -gelezen), &current_section);

	if(ret == 0){// EOF
	iprintf("eind van de file, kies een andere\n");
	ov_clear(vf); // close the ogg file
	mmStreamClose(); // colse the stream

    		if (ret < 0) {// there's an error with decoding
		iprintf("fout tijdens decoden");
			else {
			buffer +=ret;
        		gelezen +=ret;



mm_word on_stream_request( mm_word length, mm_addr dest, mm_stream_formats format ) 

	int filled = 0;
	u8 *target = (u8*)dest;

	while( length >= 1024 ) {

		length -= 1024;
		filled += 1024;
		Update_OGG_Stream(&vf, target);
		target+=4096 // because it's an u8 pointer now instead of a s16

	return filled;

int main(int argc, char **argv){


FILE * pfile;
pfile = fopen("liedje.ogg", "rb");


mm_ds_system sys;
sys.mod_count 			= 0;
sys.samp_count			= 0;
sys.mem_bank			= 0;
sys.fifo_channel		= FIFO_MAXMOD;
mmInit( &sys );
mm_stream mystream;
mystream.sampling_rate		= 44100;
mystream.buffer_length		= 4096;		
mystream.callback 		= on_stream_request;		
mystream.format			= MM_STREAM_16BIT_STEREO;	
mystream.timer			= MM_TIMER0;				
mystream.manual			= true;

Open_OGG_File(pfile, &vf);

mmStreamOpen(&mystream );


	mmStreamUpdate(); // update the ogg stream



Re: stream sound[solved]

Posted: Thu Nov 24, 2011 7:18 pm
by carhr
I´m trying to do this but I have problems. Nobody can help me? :|