2010-05-19 104 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