NodeMCU 播放 .wav 或 .mp3 文件

Posted

技术标签:

【中文标题】NodeMCU 播放 .wav 或 .mp3 文件【英文标题】:NodeMCU playing .wav or .mp3 files 【发布时间】:2016-07-19 09:37:11 【问题描述】:

我不知道应该走哪条路才能让 NodeMCU 播放音频。我想使用一到两秒的 wav 文件并驱动一个微型扬声器。目标是听到人声,没有什么超高保真度。此外,我不想使用音频屏蔽或 SD 卡。我的文件足够小,可以直接从芯片运行所有内容。无需录制样本,只需播放即可。我应该使用什么,那里有什么例子吗?似乎 sigma-delta 模块是一个不错的起点。

【问题讨论】:

你可能对github.com/nodemcu/nodemcu-firmware/issues/1085感兴趣。 【参考方案1】:

一旦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 工具进行转换。调节音量 转换前。

【讨论】:

感谢您的帮助。我已经查看了您提到的文档,并在其上构建了带有 pcm 的固件。我正在尝试运行这样的小型扬声器模块:img.dxcdn.com/productimages/sku_138322_2.jpg 我的问题是 pcm.SD 始终为零。你有什么想法吗? 我自己从未尝试过,但你们的固件是否包含 sigma-delta 模块? 不,我认为我的固件中没有 sigma-delta。我会添加它并再试一次。 文档提示您可能需要它。 与 pcm 和 sigma-delta 一起获得了一个新版本。有用!感谢 NodeMCU 社区的每一个人。

以上是关于NodeMCU 播放 .wav 或 .mp3 文件的主要内容,如果未能解决你的问题,请参考以下文章

在播放 mp3 或 wav 时结合 NAudio Pan 和 JSNet SuperPitch

如何在 asp.net mvc 项目中添加 .mp3 或 .wav 文件?

如何在没有关联应用程序的情况下直接播放声音文件(mp3、wav 等)?

Windows Phone 8 可以播放 WAV 文件但不能播放 MP3

如果它尝试播放 mp3 文件,我的代码会崩溃,适用于 wav 文件

从内存流播放 mp3/wav 文件到网页