快捷搜索:  汽车  科技

esp8266有音频解码功能吗?ESP8266播放音频文件

esp8266有音频解码功能吗?ESP8266播放音频文件参考下图接线,使用RX输出:https://link.zhihu.com/?target=https://github.com/earlephilhower/ESP8266Audio#installation这里有各种音频文件的播放说明,包括MOD、WAV、FLAC、MIDI、RTTTL、MP3、 AAC;除了可以播放本地存储的音频文件,还可以通过http进行流式播放;要把文件上传到ESP8266里面,需要用到一个工具:ESP8266 Sketch Data Upload 按照这个工具里面的步骤操作后,重启Arduino IDE 可以在菜单栏里面的工具下看到ESP8266 Sketch Data Upload这个选项,单击这个选项会在项目源码目录下创建一个data的文件夹,把需要上传的文件放入该文件夹之后,再次单击ESP8266 Sketch Data Upload这个选项即可以把文件上传

ESP8266播放音频文件

esp8266有音频解码功能吗?ESP8266播放音频文件(1)

1、如何播放音频?

ESP8266播放音频文件可以参考:

https://github.com/earlephilhower/ESP8266Audio

这里有各种音频文件的播放说明,包括MOD、WAV、FLAC、MIDI、RTTTL、MP3、 AAC;除了可以播放本地存储的音频文件,还可以通过http进行流式播放;

要把文件上传到ESP8266里面,需要用到一个工具:ESP8266 Sketch Data Upload 按照这个工具里面的步骤操作后,重启Arduino IDE 可以在菜单栏里面的工具下看到ESP8266 Sketch Data Upload这个选项,单击这个选项会在项目源码目录下创建一个data的文件夹,把需要上传的文件放入该文件夹之后,再次单击ESP8266 Sketch Data Upload这个选项即可以把文件上传到ESP8266里面了。

安装ESP8266Audio这个用于支持播放音频的库,参考

https://link.zhihu.com/?target=https://github.com/earlephilhower/ESP8266Audio#installation

参考下图接线,使用RX输出:

esp8266有音频解码功能吗?ESP8266播放音频文件(2)

另外一种接线方式:

esp8266有音频解码功能吗?ESP8266播放音频文件(3)

示例代码:

// esp8266 播放音频文件

#include <Arduino.h>

#include "AudiofileSourceSPIFFS.h"

#include "AudioGeneratorMP3.h"

#include "AudioOutputI2SNoDAC.h"

AudioGeneratorMP3 *mp3;

AudioFileSourceSPIFFS *file;

AudioOutputI2SNoDAC *out;

void setup()

{

Serial.begin(115200);

delay(1000);

SPIFFS.begin();

file = new AudioFileSourceSPIFFS("/hello.mp3");

out = new AudioOutputI2SNoDAC();

mp3 = new AudioGeneratorMP3();

mp3->begin(file out);

}

void loop()

{

if (mp3->isRunning()) {

if (!mp3->loop()) mp3->stop();

} else {

Serial.printf("MP3 done\n");

delay(1000);

}

}

TIPS:

hello.mp3需要通过ESP8266 Sketch Upload 进行上传hello.mp3最好是一个8位44.1kHZ单声道(mono)的音频文件注意文件大小,太大会导致上传失败

上面的示例代码只会在机器启动的时候播放一次。

2、如何控制播放?

一般都希望可以按自己的需要进行播放音频,比如加一个按钮触控开关,每次触发开关就播放一次音频。实现这样的小功能就需要对上面示例代码进行简单修改了。

接多一个开关:

esp8266有音频解码功能吗?ESP8266播放音频文件(4)

示例代码:

// 按钮控制播放音频

#include <Arduino.h>

#include "AudioFileSourceSPIFFS.h"

#include "AudioGeneratorMP3.h"

#include "AudioOutputI2SNoDAC.h"

AudioGeneratorMP3 *mp3;

AudioFileSourceSPIFFS *file;

AudioOutputI2SNoDAC *out;

int SWITCH_PIN = D4;

int switchVal = 1;

void setup()

{

Serial.begin(9600);

delay(1000);

SPIFFS.begin();

out = new AudioOutputI2SNoDAC();

mp3 = new AudioGeneratorMP3();

pinMode(SWITCH_PIN INPUT);

}

void loop()

{

switchVal = digitalRead(SWITCH_PIN);

Serial.println(switchVal);

if (mp3->isRunning()) { // 是否在播放

if (!mp3->loop()){ // 是否播放完了

mp3->stop(); // 停止播放

delete file;

delete mp3;

mp3 = new AudioGeneratorMP3();

}

} else {

if (switchVal == 0) { // 开关接通为低电平

file = new AudioFileSourceSPIFFS("/hello.mp3"); // 初始化音频文件

Serial.printf("MP3 done\n");

delay(1000);

mp3->begin(file out); // 开始播放文件

}

}

}

TIPS

file播放一次之后就无法再次播放,所以每次播放前需要重新初始化一个音频文件

...

file = new AudioFileSourceSPIFFS("/hello.mp3");

...

音频在播放的时候loop是持续执行的,没有等待音频播放完毕;所以每次loop都是需要判断是否在播放;如果在播放,判断是否播放完成。

...

if (mp3->isRunning()){ // 判断是否在播放

if (!mp3->loop()){ // 判断是否播放完成

...

}

}

...

成功写入程序后,每次单击按钮即可播放hello.mp3。

参考资料:

ESP8266播放音频文件

https://zhuanlan.zhihu.com/p/37907663

ESP8266Audio

https://github.com/earlephilhower/ESP8266Audio

Playing Wave File Using Arduino

https://www.instructables.com/id/Playing-Wave-file-using-arduino/

用ESP8266播放音乐

https://www.jianshu.com/p/88e789a4b9de

猜您喜欢: