In-Memory Audio Streaming
This code snippet basically shows the possibly of loading audio FileData, then having a Decoder decode the audio from memory. This is different than loading the whole SoundData into memory, which would decode the whole file, which can be memory and time consuming.
A very simple snippet which shows how it works.
-- Load audio file data into memory local audioFile = love.filesystem.newFileData("file/to/audio.ogg") -- Create new "stream" source from FileData local source = love.audio.newSource(audioFile, "stream") -- Ensure it has "stream" as its type. This line is just for checking purposes assert(source:getType() == "stream") -- Play sound source:play()
This reflects what is actually happening inside the LÖVE framework.
-- Open audio file local audioHandle = love.filesystem.newFile("file/to/audio.ogg", "r") -- Read the audio file contents. It's still in encoded form. local audioContents = audioHandle:read() -- Create a new FileData based on the audio contents. Make sure to specify -- a correct file extension in the second parameter! "Decoder"s determine -- audio formats by their extension, and not by their contents! local audioData = love.filesystem.newFileData(audioContents, "_.ogg")) -- Create a new Decoder to decode the audio local decoder = love.sound.newDecoder(audioData) -- Create a new "stream" type source from the created Decoder local source = love.audio.newSource(decoder, "stream") -- Ensure it has "stream" as its type. This line is just for checking purposes assert(source:getType() == "stream") -- Play sound source:play()