【问题标题】:How to open wav file with Lua如何用Lua打开wav文件
【发布时间】:2011-12-08 07:12:18
【问题描述】:

我正在尝试使用 Lua 进行一些 wav 处理,但遇到了第一个障碍!我找不到允许我加载 wav 文件并访问原始数据的函数或库。有一个库,但它只允许播放 wav,不能访问原始数据。

那里有吗?

干杯, 皮特。

【问题讨论】:

    标签: audio lua wav


    【解决方案1】:

    我不认为 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)

    【讨论】:

    • 感谢您的回复。我并没有计划一个应用程序本身,只是几个脚本来对文件执行相当基本的操作,所以性能不是一个大问题。但是,数据类型的事情可能会导致问题。
    【解决方案2】:

    或者,您可以像这样加载数据并查看它。 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
    

    【讨论】:

      猜你喜欢
      • 2019-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      • 1970-01-01
      相关资源
      最近更新 更多