Fireduino Audio 播放网络在线音乐
更新时间:2017-08-08 阅读:13690
目录
Fireduino Audio
Fireduino 内部集成了HIFI级高质量的音频解码器、专业的硬件MP3解码加速器、硬件低损耗音频解码加速器和丰富的外设,支持WI-FI协议,支持24bits 192k Hz 采样率、低损耗、低功耗的音频解码。
Fireduino 支持播放在SD卡以及网络上的音频文件,解码格式支持APE/FLAC/WAV/MP3/WMA/AAC/OGG;
Fireduino Audio 库
Fireduino在音频解码方面非常优秀,使用Audio库中的API可以让用户更简单易用的进行音频开发。Fireduino提供了音频接口如下图:
Fireduino Audio 播放TF中的音乐
本案例演示如何在Fireduino 播放通过TF缓存网络上的音乐文件,每隔一定时间判断是否播放完毕后继续循环播放。
硬件要求
1.Fireduino board
2.TF Card
3.网络音乐文件
代码
开始之前
使用Audio、WiFi与TF Card 之前,首先得包含Audio、WiFi与TF库头文件
#include "TF.h" #include "Audio.h" #include <WiFi.h>
搭建http server
setup()
1.初始化串口,以便后续打印调试信息。
2.初始化TF卡,后续需要TF缓存网络资源文件。
3.初始化WiFi,需要联网下载音频文件用于解码
4.通过串口打印网络连接信息。
5.初始化Audio,并且用AUDIO_NET 方式。
6.初始化Audio 成功,播放指定网络地址的MP3文件。
void setup() { Serial.begin(115200); Serial.print("\r\narduino setup ...\r\n"); if(!SD.begin()) { Serial.println("sd init err\r\n"); while(1); } // check for the presence of the shield: if (WiFi.status() == WL_NO_SHIELD) { Serial.println("WiFi shield not present"); // don't continue: while (true); } String fv = WiFi.firmwareVersion(); if (fv != "1.1.0") { Serial.println("Please upgrade the firmware"); } // attempt to connect to Wifi network: while (status != WL_CONNECTED) { Serial.print("Attempting to connect to SSID: "); Serial.println(ssid); // Connect to WPA/WPA2 network. Change this line if using open or WEP network: status = WiFi.begin(ssid, pass); // wait 10 seconds for connection: // delay(10000); } Serial.println("Connected to wifi"); printWifiStatus(); Audio.begin(AUDIO_NET); Audio.playNetFile("http://192.168.199.240/%E6%89%93%E8%80%81%E8%99%8E.MP3"); }
loop()
1.获取Audio状态机状态。
2.判断状态为解码停止状态。
3.如果为停止状态,继续解码指定文件。
void loop() { Serial.println("loop"); delay(2000); if(Audio.getStatus() == AudioStop) { Audio.playNetFile("http://192.168.199.240/%E6%89%93%E8%80%81%E8%99%8E.MP3"); } }
示例程序 -- 播放网络在线音乐
Code
#include <Arduino.h> #include "TF.h" #include "Audio.h" #include <WiFi.h> char ssid[] = "Fireduino"; // your network SSID (name) char pass[] = "12345678"; // your network password int status = WL_IDLE_STATUS; void printWifiStatus(); void setup() { Serial.begin(115200); Serial.print("\r\narduino setup ...\r\n"); if(!SD.begin()) { Serial.println("sd init err\r\n"); while(1); } // check for the presence of the shield: if (WiFi.status() == WL_NO_SHIELD) { Serial.println("WiFi shield not present"); // don't continue: while (true); } String fv = WiFi.firmwareVersion(); if (fv != "1.1.0") { Serial.println("Please upgrade the firmware"); } // attempt to connect to Wifi network: while (status != WL_CONNECTED) { Serial.print("Attempting to connect to SSID: "); Serial.println(ssid); // Connect to WPA/WPA2 network. Change this line if using open or WEP network: status = WiFi.begin(ssid, pass); // wait 10 seconds for connection: // delay(10000); } Serial.println("Connected to wifi"); printWifiStatus(); Audio.begin(AUDIO_NET); Audio.playNetFile("http://192.168.199.240/%E6%89%93%E8%80%81%E8%99%8E.MP3"); } void loop() { Serial.println("loop"); delay(2000); if(Audio.getStatus() == AudioStop) { Audio.playNetFile("http://192.168.199.240/%E6%89%93%E8%80%81%E8%99%8E.MP3"); } } void printWifiStatus() { // print the SSID of the network you're attached to: Serial.print("SSID: "); Serial.println(WiFi.SSID()); // print your WiFi shield's IP address: IPAddress ip = WiFi.localIP(); Serial.print("IP Address: "); Serial.println(ip); // print the received signal strength: long rssi = WiFi.RSSI(); Serial.print("signal strength (RSSI):"); Serial.print(rssi); Serial.println(" dBm"); }