Tutorial: Playing Longer Audio

This tutorial teaches you how to stream large audio files in Quorum.

Playing Longer Audio: Streaming

If we have a longer audio file, like one that contains a full-length song, we may want to load our file via the LoadToStream action. The LoadToStream action allows our audio file to be loaded in "chunks,"as they are needed instead of all at once. This is more efficient and allows the file to start playing more quickly than if it must wait for the entire audio file to be loaded, especially for longer sounds, like songs. In order to stream our Audio object, we will need a loop that keeps the Audio object streaming as long as it is playing. An example of this follows:

use Libraries.Sound.Audio

// this line creates our Audio object we will be using to stream
Audio streamingAudio

// this line loads a "chunk"of the data from the file "LongSong.ogg"to our Audio object
streamingAudio:LoadToStream("Sounds/longSong.ogg")

// this line plays the first "chunk"of the data that was loaded from the file
streamingAudio:Play()

// this loop will continuously check if the whole song has been played
repeat while streamingAudio:IsPlaying()
   // this gets the next "chunk"of data to play
   streamingAudio:Stream()
end

A Quorum File object can also be used instead of a text file path when calling the LoadToStream action.

If we are playing sound as part of a game using the Quorum Game Engine, the proper place to put the Stream() call is inside the Update action, which is called every frame in the Main Game Loop. This will ensure that the next "chunk"of sound will be loaded at every opportunity. An example of streaming in the game engine follows:

use Libraries.Game.Game
use Libraries.Sound.Audio

class Main is Game
   Audio audio1
   Audio song

   action Main
       StartGame()
   end

   action CreateGame
       audio1:Load("Sounds/Fwip.ogg")
       audio1:Play()
       song:LoadToStream("Sounds/song.ogg")
       song:Play()
   end

   action Update(number seconds)
       //since this action is in the main game loop and called every frame it should not be inside another loop.
       song:Stream()
   end
end

Next Tutorial

In the next tutorial, we will discuss Digital Signal Processing, which describes signals and samples in Quorum..