2010-05-19 31 views
1

我想用Lua做一些wav处理,但已经掉到了第一个障碍!我无法找到允许我加载wav文件并访问原始数据的函数或库。有一个库,但它允许播放wav,而不是访问原始数据。如何用Lua打开wav文件

有没有在那里?

干杯, 皮特。

回答

1

我不认为Lua是原始音频数据处理的正确工具,主要是因为Lua只使用单个数字数据类型 - 双打。此外,Lua无法直接访问数据流的元素,但您可以使用类似struct库(http://www.inf.puc-rio.br/~roberto/struct/

更好的处理数据的方法是使用C编写过滤器,并为Lua绑定,然后使用的Lua更高级别的处理,像(虚工具包):

需要 '波'
- 加载波
WAV = wave.load( 'file.wav', 'S16')
- 应用一些滤波器
thresh = wave.threshold(wav,0.5 )
褪色= wave.fadeout(THRESH,5)

+2

见http://www.mat.ucsb.edu/~wakefield/lua~/lua~。 htm – lhf 2010-05-19 18:31:15

+0

感谢您的回复。我本来没有计划一个应用程序本身,只是几个脚本来对文件进行相当简陋的操作,所以性能不是一个大问题。但是,数据类型的东西可能会导致问题。 – 2010-05-20 11:58:43

0

或者,也可以加载数据并查看它这样。 ASCII列将显示您的WAV头,存储在第一44个字节......

local f = assert(io.open(path, "rb")) 
-- read in 16 bytes at a time 
local block = 16 
while true do 
local bytes = f:read(block) 
if not bytes then break end 

for _, b in pairs{string.byte(bytes, 1, -1)} do 
    io.write(string.format("%02X ", b)) 
end 

io.write(string.rep(" ", block - string.len(bytes))) 
io.write(" ", string.gsub(bytes, "%c", "."), "\n") 
end