Difference between revisions of "love.sound.newSoundData"

m (Beep function: - fix example.)
 
(10 intermediate revisions by 2 users not shown)
Line 1: Line 1:
Creates new SoundData from a filepath, [[File]], or [[Decoder]]. It's also possible to create SoundData with a custom sample rate, channel and bit depth.
+
Creates new [[SoundData]] from a filepath, [[File]], or [[Decoder]]. It's also possible to create SoundData with a custom sample rate, channel and bit depth.
  
 
The sound data will be decoded to the memory in a raw format. It is recommended to create only short sounds like effects, as a 3 minute song uses 30 MB of memory this way.
 
The sound data will be decoded to the memory in a raw format. It is recommended to create only short sounds like effects, as a 3 minute song uses 30 MB of memory this way.
Line 49: Line 49:
 
mp3 = love.sound.newSoundData("doom.mp3")
 
mp3 = love.sound.newSoundData("doom.mp3")
 
</source>
 
</source>
 +
 +
=== Beep function ===
 +
<source lang="lua">
 +
local rate      = 44100 -- samples per second
 +
local length    = 1/32  -- 0.03125 seconds
 +
local tone      = 440.0 -- Hz
 +
local p        = math.floor(rate/tone) -- 100 (wave length in samples)
 +
local soundData = love.sound.newSoundData(math.floor(length*rate), rate, 16, 1)
 +
for i=0, soundData:getSampleCount() - 1 do
 +
-- soundData:setSample(i, math.sin(2*math.pi*i/p)) -- sine wave.
 +
soundData:setSample(i, i%p<p/2 and 1 or -1)    -- square wave; the first half of the wave is 1, the second half is -1.
 +
end
 +
local source = love.audio.newSource(soundData)
 +
local function beep() source:play() end
 +
</source>
 +
Call it as:
 +
<source lang="lua">
 +
beep()
 +
</source>
 +
 
== See Also ==
 
== See Also ==
 
* [[parent::love.sound]]
 
* [[parent::love.sound]]
 
* [[Constructs::SoundData]]
 
* [[Constructs::SoundData]]
 
[[Category:Functions]]
 
[[Category:Functions]]
{{#set:Description=Creates new SoundData from a Decoder. }}
+
{{#set:Description=Creates a new SoundData. }}
 
{{#set:Since=000}}
 
{{#set:Since=000}}
 
== Other Languages ==
 
== Other Languages ==
 
{{i18n|love.sound.newSoundData}}
 
{{i18n|love.sound.newSoundData}}

Latest revision as of 18:24, 14 February 2022

Creates new SoundData from a filepath, File, or Decoder. It's also possible to create SoundData with a custom sample rate, channel and bit depth.

The sound data will be decoded to the memory in a raw format. It is recommended to create only short sounds like effects, as a 3 minute song uses 30 MB of memory this way.

Function

Synopsis

soundData = love.sound.newSoundData( filename )

Arguments

string filename
The file name of the file to load.

Returns

SoundData soundData
A new SoundData object.

Function

Synopsis

soundData = love.sound.newSoundData( file )

Arguments

File file
A File pointing to an audio file.

Returns

SoundData soundData
A new SoundData object.

Function

Synopsis

soundData = love.sound.newSoundData( decoder )

Arguments

Decoder decoder
Decode data from this Decoder until EOF.

Returns

SoundData soundData
A new SoundData object.

Function

Synopsis

soundData = love.sound.newSoundData( samples, rate, bits, channels )

Arguments

number samples
Total number of samples.
number rate (44100)
Number of samples per second
number bits (16)
Bits per sample (8 or 16).
number channels (2)
Either 1 for mono or 2 for stereo.

Returns

SoundData soundData
A new SoundData object.

Examples

Loading SoundData from files

wav = love.sound.newSoundData("doom.wav")
-- Beware: if doom.mp3 is a huge file, it will take 
-- ages to decode.
mp3 = love.sound.newSoundData("doom.mp3")

Beep function

local rate      = 44100 -- samples per second
local length    = 1/32  -- 0.03125 seconds
local tone      = 440.0 -- Hz
local p         = math.floor(rate/tone) -- 100 (wave length in samples)
local soundData = love.sound.newSoundData(math.floor(length*rate), rate, 16, 1)
for i=0, soundData:getSampleCount() - 1 do
--	soundData:setSample(i, math.sin(2*math.pi*i/p)) -- sine wave.
	soundData:setSample(i, i%p<p/2 and 1 or -1)     -- square wave; the first half of the wave is 1, the second half is -1.
end
local source = love.audio.newSource(soundData)
local function beep() source:play() end

Call it as:

beep()

See Also


Other Languages