【发布时间】:2011-12-08 07:12:18
【问题描述】:
我正在尝试使用 Lua 进行一些 wav 处理,但遇到了第一个障碍!我找不到允许我加载 wav 文件并访问原始数据的函数或库。有一个库,但它只允许播放 wav,不能访问原始数据。
那里有吗?
干杯, 皮特。
【问题讨论】:
我正在尝试使用 Lua 进行一些 wav 处理,但遇到了第一个障碍!我找不到允许我加载 wav 文件并访问原始数据的函数或库。有一个库,但它只允许播放 wav,不能访问原始数据。
那里有吗?
干杯, 皮特。
【问题讨论】:
我不认为 Lua 是处理原始音频数据的正确工具,主要是因为 Lua 仅使用单一数字数据类型 - 双精度数。此外,Lua 不能直接访问数据流的元素,尽管您可以使用 struct 库 (http://www.inf.puc-rio.br/~roberto/struct/) 之类的东西
处理数据的更好方法是用 C 语言编写过滤器,绑定 Lua,然后使用 Lua 进行更高级别的处理,例如(虚构的工具包):
需要'wave'
-- 加载波形
wav = wave.load('file.wav', 's16')
-- 应用一些过滤器
thresh = wave.threshold(wav, 0.5)
褪色 = wave.fadeout(thresh, 5)
【讨论】:
或者,您可以像这样加载数据并查看它。 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
【讨论】: