[SDL] smpeg and SDL_Mixer
Robert Diel
robert at littlebitlost.com
Mon Dec 16 21:10:00 PST 2002
I tried this method and it definitely works better, but it's a bit slow,
and has a really really weird echo. It sounds like it's being played by
smpeg and then shadowed by the mixer. Any ideas? I directly stole the
code from the README.SDL_Mixer in the SMPEG directory. I am running
SMPEG 0.4.4, if this helps at all.
Here's the code:
.... SDL INIT STUFF...
/* Open the audio device */
if(Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 1024)==-1){
fprintf(stderr,
"Warning: Couldn't set 11025 Hz 8-bit audio\n- Reason:
%s\n", SDL_GetError());
use_audio=0;
}
SMPEG *mpeg;
SMPEG_Info info;
int volume = 100;
SDL_Delay(1000);
/* Create the MPEG stream */
mpeg = SMPEG_new("letsroll.mpg", &info, use_audio);
if ( SMPEG_error(mpeg) ) {
fprintf(stderr, "%s: %s\n", "letsroll.mpg",
SMPEG_error(mpeg));
SMPEG_delete(mpeg);
}
SMPEG_enablevideo(mpeg, use_video);
SMPEG_enableaudio(mpeg, 0);
if ( use_audio ) {
SDL_AudioSpec audiofmt;
Uint16 format;
int freq, channels;
/* Tell SMPEG what the audio format is */
Mix_QuerySpec(&freq, &format, &channels);
audiofmt.format = format;
audiofmt.freq = freq;
audiofmt.channels = channels;
SMPEG_actualSpec(mpeg, &audiofmt);
/* Hook in the MPEG music mixer */
Mix_HookMusic(myMusicPlayer , mpeg);
SMPEG_enableaudio(mpeg, 1);
}
SMPEG_setvolume(mpeg, volume);
SMPEG_play(mpeg);
}
//...Linking Directly to SMPEG_playAudio didn't work so well...
void myMusicPlayer(void *udata, Uint8 *stream, int len)
{
SMPEG_playAudio((SMPEG*)udata,stream,len);
}
Any suggestions would be helpful.
Robert
On Mon, 2002-12-16 at 21:30, Loren Osborn wrote:
> This is a common problem. Basically, the problem is that SMPEG syncs
> the video with the audio, which means that SMPEG needs to know how fast
> the audio is consumed. Otherwise, SMPEG tries to sync with the audio
> cursor, which it can't see... so you get something in the 1 frame per
> second range...
>
> The solution is two fold:
>
> 1) When you load the MPEG movie, you need to make sure the sdl_audio
> flag is ZERO!!!... When this value is non-zero, SMPEG tries to play the
> audio *DIRECTLY* through SDL... If you're using SDL_mixer, you need to
> play through SDL_mixer instead...
>
> 2) You need to cross hook the SMPEG output to the SDL_mixer input...
>
> Check out smpeg/README.SDL_mixer for details..
>
> -Loren
>
> On Mon, 2002-12-16 at 17:13, Robert Diel wrote:
> > Hello all,
> > I have been trying to use smpeg and SDL_Mixer together and have had
> > very little luck. I was wondering if anyone has any tips. If I open
> > the mixer any audio output from my smpeg goes very slowly. If I do not
> > open the mixer and just use smpeg the audio plays fine. Am I doing
> > something incorrectly. plaympeg says the audio is "Audio MPEG-1 Layer 2
> > 224kbit/s 44100Hz stereo". I set my MIX_OpenAudio to:
> >
> >
> > if(Mix_OpenAudio(441000, MIX_DEFAULT_FORMAT, 2, 1024)
> >
> > and it goes really slowly. Now, does MIX just take up that much extra
> > processing, or doesn't it play well with mixer, or do I have a setting
> > wrong?
> >
> > My guess, is that both smpeg and Mix are trying to service the same
> > resource, the sound buffer, and at double the processing, we have double
> > the cost. I am hoping this assumption is wrong and that I just have a
> > Mixer setting wrong, and that I don't have to design my own.
> >
> > Robert
> >
> >
> >
> >
> >
> >
> >
> >
> > _______________________________________________
> > SDL mailing list
> > SDL at libsdl.org
> > http://www.libsdl.org/mailman/listinfo/sdl
>
>
>
> _______________________________________________
> SDL mailing list
> SDL at libsdl.org
> http://www.libsdl.org/mailman/listinfo/sdl
More information about the SDL
mailing list