RePhone APIs - 音频
RePhone 支持播放存储在 SD 卡或内置闪存中的音频文件。支持的格式包括 WAV、MP3、AAC 等。通过此库,您可以执行 播放、暂停、停止 播放过程以及 调整音量。
播放(解码)任务由 LinkIt 内部处理。因此,所有功能都是 非阻塞 的,这意味着调用 playFile()
后,音频将开始播放并立即返回到您的程序。
使用 getStatus()
检查当前状态并采取相应操作。音频状态可以是“播放中”、“播放完成”、“播放暂停”等。音频将通过 LinkIt 板上的耳机插孔输出。
注意
如果在前一个播放未完成之前尝试播放另一个音频文件,前一个播放将自动停止,新音频将开始播放。[]
功能列表
- begin()
- playFile()
- setVolume()
- pause()
- resume()
- stop()
- getStatus()
API
LAudio.begin()
初始化音频模块。
- 语法
LAudio.begin()
- 参数
无
- 返回值
无
- 示例
#include <LAudio.h>
void setup()
{
LAudio.begin();
LAudio.setVolume(2);
LAudio.playFile(storageFlash,(char*)"sample.mp3");
}
void loop()
{
}
LAudio.playFile()
播放存储在 SD 卡或闪存中的音频文件。
- 语法
LAudio.playFile(StorageEnum drv, char *songName)
LAudio.playFile(StorageEnum drv, wchar_t* songName)
-
参数
- drv - 存储类型,可以是
storageSD
(SD 卡)或storageFlash
(闪存) - songName - 音频文件路径,编码可以是 ascii (char*) 或 unicode (wchar_t*)
- drv - 存储类型,可以是
-
返回值
无
- 示例
#include <LAudio.h>
void setup()
{
LAudio.begin();
LAudio.setVolume(2);
LAudio.playFile(storageFlash,(char*)"sample.mp3");
}
void loop()
{
}
LAudio.setVolume()
调整播放音量;范围从 0(静音)到 6(最大)。
- 语法
LAudio.setVolume(unsigned char volume)
-
参数
- volume: 音量级别,可以是 0 到 6;0 为静音,6 为最大音量
-
返回值
无
- 示例
#include <LAudio.h>
void setup()
{
LAudio.begin();
LAudio.setVolume(2);
LAudio.playFile(storageFlash,(char*)"sample.mp3");
}
void loop()
{
}
LAudio.pause()
暂停播放。仅在有活动播放(通过 playFile()
)时有效。
- 语法
LAudio.pause()
- 参数
无
- 返回值
无
- 示例
#include <LAudio.h>
void setup()
{
LAudio.begin();
LAudio.playFile(storageFlash,(char*)"sample.mp3");
LAudio.setVolume(2);
delay(5000);
LAudio.pause(); // 播放 5 秒后暂停
delay(5000);
LAudio.resume(); // 再等待 5 秒后恢复播放
delay(5000);
LAudio.stop(); // 再等待 5 秒后停止播放
}
void loop()
{
}
LAudio.resume()
恢复播放。仅在播放已暂停时有效。
- 语法
LAudio.resume()
- 参数
无
- 返回值
无
- 示例
#include <LAudio.h>
void setup()
{
LAudio.begin();
LAudio.playFile(storageFlash,(char*)"sample.mp3");
LAudio.setVolume(2);
delay(5000);
LAudio.pause(); // 播放 5 秒后暂停
delay(5000);
LAudio.resume(); // 再等待 5 秒后恢复播放
delay(5000);
LAudio.stop(); // 再等待 5 秒后停止播放
}
void loop()
{
}
LAudio.stop()
停止播放。
- 语法
LAudio.stop()
- 参数
无
- 返回值
无
- 示例
#include <LAudio.h>
void setup()
{
LAudio.begin();
LAudio.playFile(storageFlash,(char*)"sample.mp3");
LAudio.setVolume(2);
delay(5000);
LAudio.pause(); // 播放 5 秒后暂停
delay(5000);
LAudio.resume(); // 再等待 5 秒后恢复播放
delay(5000);
LAudio.stop(); // 再等待 5 秒后停止播放
}
void loop()
{
}
LAudio.getStatus()
查询当前播放状态。
- 语法
LAudio.getStatus()
- 参数
无
-
返回值
- AudioStatus - 播放状态,可以是:
- AudioStop - 播放已停止。
- AudioPause - 播放已暂停(可以恢复)。
- AudioResume - 播放恢复。
- AudioEndOfFile - 播放完成。
- AudioCommonFailed - 播放失败(例如音频文件损坏)。
-
示例
#include <LAudio.h>
void setup()
{
LAudio.begin();
LAudio.setVolume(2);
LAudio.playFile(storageFlash,(char*)"sample.mp3");
}
void loop()
{
AudioStatus status;
status = LAudio.getStatus();
if(AudioEndOfFile == status) // 检查播放是否完成并重新开始
{
LAudio.playFile(storageFlash,(char*)"sample.mp3");
}
}
示例
- 描述
通过此示例,您可以播放一个 mp3 文件。打开串行监视器以输入数字来控制播放。
命令如下:
- 播放
- 设置音量
- 暂停
- 恢复
- 停止
- 代码
您可以在以下路径找到代码:文件 -> 示例 -> LAudio -> AudioPlayer
/*
RePhone 音频测试示例
首先需要将一个 mp3 文件放入存储中
然后打开串行监视器,输入数字以更改状态
1 - 播放
2 - 设置音量
3 - 暂停
4 - 恢复
5 - 停止
*/
#include <LAudio.h>
// 在此处添加您的音乐文件名
#define FILE_NAME "music.mp3"
#define PLAY 1
#define SETVOLUME 2
#define PAUSE 3
#define RESUME 4
#define STOP 5
unsigned char Status_Value = STOP;
int volume = 6;
void changeVolume()
{
volume++;
volume = volume>6 ? 1 : volume;
}
void setup()
{
LAudio.begin();
Serial.begin(115200);
Serial.println("播放 - 1");
Serial.println("设置音量 - 2");
Serial.println("暂停 - 3");
Serial.println("恢复 - 4");
Serial.println("停止 - 5");
Change_Status(PLAY);
}
char StatusFlag = 0;
void loop()
{
unsigned char KEY_NUM;
AudioStatus status;
KEY_NUM = task_uart_key();
if(KEY_NUM > 0)
{
Change_Status(KEY_NUM);
KEY_NUM = 0;
}
status = LAudio.getStatus();
if(StatusFlag != status)
{
StatusFlag = status;
Serial.print("LAudio 状态是 ");
Serial.println(status);
}
if(status == AudioEndOfFile)
{
Status_Value = PLAY;
Change_Status(Status_Value);
}
}
void Change_Status(unsigned char status)
{
switch(status)
{
case 1:
LAudio.playFile(storageFlash,(char*)"music.mp3");
LAudio.setVolume(volume);
Serial.println("播放");
break;
case 2:
LAudio.setVolume(volume);
changeVolume();
Serial.print("设置音量为 ");
Serial.println(volume);
break;
case 3:
LAudio.pause();
Serial.println("暂停");
break;
case 4:
LAudio.resume();
Serial.println("恢复");
break;
case 5:
LAudio.stop();
Serial.println("停止");
break;
default:
break;
}
}
unsigned int task_uart_key()
{
String inString = "";
unsigned int keyValue = 0;
unsigned char bitCount = 0;
unsigned char dataTemp1[10] = {0};
while(Serial.available() > 0)
{
unsigned char inChar = Serial.read();
inString += (char)inChar;
dataTemp1[bitCount] = inChar - '0';
bitCount += 1;
delay(10);
}
if(inString != "")
{
if(bitCount > 4)
{
Serial.println("按键输入错误。");
}
else
{
for(char i=0;i<bitCount;i++)
{
unsigned int dataTemp2 = 1;
for(char j=0;j<(bitCount-i-1);j++)dataTemp2 *= 10;
keyValue += (dataTemp1[i] * dataTemp2);
}
Serial.print("按键值是: ");
Serial.println(keyValue);
}
}
return keyValue;
}
资源
技术支持与产品讨论
感谢您选择我们的产品!我们致力于为您提供多种支持,以确保您使用我们的产品时拥有尽可能顺畅的体验。我们提供多个沟通渠道,以满足不同的偏好和需求。