@c -*-texinfo-*-
@node Playing Sound, , Sound Drivers, Sound System
@subsection Playing a Sound
@cindex playing sound

@subsubheading Playing a Sound Once

You can create more than one source to have the same sound played
multiple times at the same time. For instance if you have a shooting
sound and you want your players to shoot at the same time and have the
correct number of shooting sounds.

@example
#include "isndsys/ss_source.h"
#include "isndsys/ss_loader.h"
#include "isndsys/ss_renderer.h"
#include "isndsys/ss_manager.h"
#include "imap/loader.h"

@dots{}

if (!csInitializer::RequestPlugins (object_reg,
@dots{}
  CS_REQUEST_PLUGIN ("crystalspace.sndsys.renderer.software", iSndSysRenderer),
  CS_REQUEST_LEVELLOADER),
  CS_REQUEST_END))
@dots{}

  csRef<iLoader> loader = csQueryRegistry<iLoader> (GetObjectRegistry ());
  if (!loader)
    ReportError ("Failed to locate Loader!");

  csRef<iSndSysRenderer> sndrenderer = csQueryRegistry<iSndSysRenderer> (GetObjectRegistry ());
  if (!sndrenderer)
    ReportError ("Failed to locate Sound renderer!"); 
  
  csRef<iSndSysWrapper> w_boom = loader->LoadSoundWrapper ("buzz","/lib/std/loopbzzt.wav");
  if (!w_boom)
    ReportError ("No Wrapper");

  csRef<iSndSysData> snddata = w_boom->GetData ();
  if (!snddata)
    ReportError ("No Sound Data");

  csRef<iSndSysStream> sndstream = sndrenderer->CreateStream (snddata, CS_SND3D_ABSOLUTE);
  if (!sndstream)
    ReportError ("No Stream");
  
  sndstream->SetLoopState (CS_SNDSYS_STREAM_DONTLOOP);
  sndstream->Unpause ();
  
  csRef<iSndSysSource> sndsrc = sndrenderer->CreateSource (sndstream);
  if (!sndsrc)
    ReportError ("No Source");

  sndsrc->SetVolume (1.0);

@end example

@subsubheading Looping Background Music

Here is how you can specify a looping sound:

@example
  sndstream->SetLoopState (CS_SNDSYS_STREAM_LOOP);
  sndstream->Unpause ();
@end example
