Crystal Space 2.0.0: 4.17.2 Playing a Sound

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### 4.17.2 Playing a Sound

#### 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.

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

    ...

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

      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);

#### Looping Background Music

Here is how you can specify a looping sound:

      sndstream->SetLoopState (CS_SNDSYS_STREAM_LOOP);
      sndstream->Unpause ();

This document was generated using texi2html 1.76.