@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_PLUGIN("crystalspace.sndsys.element.loader",
    iSndSysLoader),
  CS_REQUEST_END))
@dots{}

csRef<iLoader> loader = csQueryRegistry<iLoader> (object_reg);
csRef<iSndSysRenderer> sndrdr =
  csQueryRegistry<iSndSysRenderer> (object_reg);
if (sndrdr)
@{
  iSndSysWrapper* w_boom = loader->LoadSoundWrapper (
    <sound name>, <sound file>, CS_SND3D_DISABLE);
  if (w_boom)
  @{
    csRef<iSoundSource> sndsrc =
      w_boom->GetSound()->CreateSource(w_boom->GetStream());
    w_boom->GetStream ()->SetLoopState (CS_SNDSYS_STREAM_DONTLOOP);
    w_boom->GetStream ()->Unpause();
  @}
@}
@end example

@subsubheading Looping Background Music

Here is how you can play a looping sound:

@example
csRef<iSndSysRenderer> sndrdr =
  csQueryRegistry<iSndSysRenderer> (object_reg);
if (sndrdr)
@{
  iSndSysWrapper* w_music = loader->LoadSoundWrapper (
    <sound name>, <sound file>, CS_SND3D_DISABLE);
  if (w_music)
  @{
    w_music->GetStream ()->SetLoopState (CS_SNDSYS_STREAM_LOOP);
    w_music->GetStream ()->Unpause();
  @}
@}
@end example
