【发布时间】:2013-04-12 20:40:10
【问题描述】:
大家好。
抱歉我的菜鸟问题,因为我只是一个试图学习使用 Lua 编程的非程序员。
Lua 非常吸引我,因为它确实非常简单,无论是大小还是语法。
我决定进一步尝试使用这种巴西出生的语言,比如玩声音——就像我在 Python 和 Ruby 中所做的那样。
所以我找到了这个 ProteaAudio 并尝试播放我从 here 下载的包中的示例脚本。
该软件包附带两个示例脚本:
- 首先命名为 example.lua 来播放 ogg 示例文件(也包含在包中)
- 另一个播放函数生成的声音名为scale.lua
第一个脚本在我的 Win 7 和 Ubuntu 12.04 x86 机器上运行良好。
但第二个脚本只能在 Windows 上运行,当我尝试在 Ubuntu 上运行时出现错误,生成以下消息:
../lua52: scale.lua:13: 'soundLoop' 的参数 #1 错误(预期数字,结果为零)
堆栈回溯:
[C]:在函数“soundLoop”中
scale.lua:13: 在函数'playNote'中
scale.lua:29: 在主块中
[C]: 在?
scale.lua 的完整原始源代码是:
-- function creating a sine wave sample:
function sampleSine(freq, duration, sampleRate)
local data = { }
for i = 1,duration*sampleRate do
data[i] = math.sin( (i*freq/sampleRate)*math.pi*2)
end
return proAudio.sampleFromMemory(data, sampleRate)
end
-- plays a sample shifted by a number of halftones for a definable period of time
function playNote(sample, pitch, duration, volumeL, volumeR, disparity)
local scale = 2^(pitch/12)
local sound = proAudio.soundLoop(sample, volumeL, volumeR, disparity, scale)
proAudio.sleep(duration)
proAudio.soundStop(sound)
end
-- create an audio device using default parameters and exit in case of errors
require("proAudioRt")
if not proAudio.create() then os.exit(1) end
-- generate a sample:
local sample = sampleSine(440, 0.5, 88200)
-- play scale (a major):
local duration = 0.5
for i,note in ipairs({ 0, 2, 4, 5, 7, 9, 11, 12 }) do
playNote(sample, note, duration)
end
-- cleanup
proAudio.destroy()
由于我对这个 ProteaAudio Lua API 感到困惑,我真的不明白为什么会出现这个错误。
请帮忙。
【问题讨论】:
-
在
for循环之前试试这个:print( sample, type(sample) ) -
在输入我的答案时,我忘了提到我冒昧地将
scale.lua的完整原始源代码添加到您的问题中,以供将来参考并尝试获得更多关注回答你的好问题。