You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
29 lines
530 B
Lua
29 lines
530 B
Lua
3 years ago
|
local remove = table.remove
|
||
|
local unpack = string.unpack -- luacheck: ignore
|
||
|
local rep = string.rep
|
||
|
|
||
|
local fmt = setmetatable({}, {
|
||
|
__index = function(self, n)
|
||
|
self[n] = '<' .. rep('i2', n)
|
||
|
return self[n]
|
||
|
end
|
||
|
})
|
||
|
|
||
|
local PCMString = require('class')('PCMString')
|
||
|
|
||
|
function PCMString:__init(str)
|
||
|
self._len = #str
|
||
|
self._str = str
|
||
|
end
|
||
|
|
||
|
function PCMString:read(n)
|
||
|
local i = self._i or 1
|
||
|
if i + n * 2 < self._len then
|
||
|
local pcm = {unpack(fmt[n], self._str, i)}
|
||
|
self._i = remove(pcm)
|
||
|
return pcm
|
||
|
end
|
||
|
end
|
||
|
|
||
|
return PCMString
|