【发布时间】:2016-07-19 09:37:11
【问题描述】:
我不知道应该走哪条路才能让 NodeMCU 播放音频。我想使用一到两秒的 wav 文件并驱动一个微型扬声器。目标是听到人声,没有什么超高保真度。此外,我不想使用音频屏蔽或 SD 卡。我的文件足够小,可以直接从芯片运行所有内容。无需录制样本,只需播放即可。我应该使用什么,那里有什么例子吗?似乎 sigma-delta 模块是一个不错的起点。
【问题讨论】:
我不知道应该走哪条路才能让 NodeMCU 播放音频。我想使用一到两秒的 wav 文件并驱动一个微型扬声器。目标是听到人声,没有什么超高保真度。此外,我不想使用音频屏蔽或 SD 卡。我的文件足够小,可以直接从芯片运行所有内容。无需录制样本,只需播放即可。我应该使用什么,那里有什么例子吗?似乎 sigma-delta 模块是一个不错的起点。
【问题讨论】:
一旦https://github.com/nodemcu/nodemcu-firmware/pull/1255 登陆dev 分支,您可以执行以下as documented:
-- ****************************************************************************
-- Play file with pcm module.
--
-- Upload jump_8k.u8 to spiffs before running this script.
--
-- ****************************************************************************
function cb_drained(d)
print("drained "..node.heap())
file.seek("set", 0)
-- uncomment the following line for continuous playback
--d:play(pcm.RATE_8K)
end
function cb_stopped(d)
print("playback stopped")
file.seek("set", 0)
end
function cb_paused(d)
print("playback paused")
end
file.open("jump_8k.u8", "r")
drv = pcm.new(pcm.SD, 1)
-- fetch data in chunks of LUA_BUFFERSIZE (1024) from file
drv:on("data", file.read)
-- get called back when all samples were read from the file
drv:on("drained", cb_drained)
drv:on("stopped", cb_stopped)
drv:on("paused", cb_paused)
-- start playback
drv:play(pcm.RATE_8K)
音频应为采样率的单声道原始无符号 8 位流 每秒 1 k 到 16 k 样本。常规的 WAV 文件可以 使用 Audacity 或 SoX 等 OSS 工具进行转换。调节音量 转换前。
【讨论】: