# audioservice
**Repository Path**: my_data123/audioservice
## Basic Information
- **Project Name**: audioservice
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-02-06
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
### AudioService
本工程实现一个后台音乐播放器,接收前台UI进程的播放请求,实现在单窗口系统中UI与音乐播放逻辑剥离。主要实现的功能包括:切换歌曲、歌曲定位、专辑信息获取等。
在 SDK 中配合 Qt 的 musicPlayer 应用进行使用,由前台的Qt UI进程接收用户请求,通过消息队列定义通信端口与后台服务通信,而音乐播放的主要逻辑则使用 gstreamer 实现。
### 编译方式
可以使用 buildroot 默认交叉编译配置文件(需包含Gstreamer库)
```
$ mkdir build
$ cd build
$ cmake -D CMAKE_TOOLCHAIN_FILE="../../../buildroot/output/host/usr/share/buildroot/toolchainfile.cmake" ..
```
### 接口使用说明
工程包含音乐播放常用的功能 Gstreamer 实现,接口封装在 **include/AudioInterfaceProvider.cpp** 中,接口封装文件定义了通信的端口、消息、协议等。
另外除了主动的接口使用,工程会主动向客户端发送一些状态,例如:播放错误状态、当前播放进度等等。
主要接口提供:
接口 | 说明
:--|:--
play / pause / stop | 播放状态控制
state | 获取当前的播放状态
duration | 获取当前歌曲的时长
setVolume | 设置音量,控制范围为0~100
volume | 获取当前的音量
setPosition | 设置当前歌曲的播放进度
position | 获取当前歌曲的播放进度
currentMedia | 获取当前播放歌曲路径
getArtist | 获取当前播放歌曲歌手
getTitle | 获取当前播放歌曲歌名
currentPlayModeChanged | 修改当前播放列表循环模式
服务主动上报给客户端的状态包括:
```
msg_type标识
1. RCV_TYPE_MEDIA_STATE_CHANGED
- 媒体管道流状态改变,携带参数为新媒体状态
- 参数类型:enum MediaStatus
2. RCV_TYPE_ERROR
- 媒体流发生错误,携带参数为错误原因
- 参数类型:enum Error
3. RCV_TYPE_STATE_CHANGED
- 播放状态改变,携带参数为新播放状态
- 参数类型:enum State
4. RCV_TYPE_POSITION_CHANGE
- 媒体当前播放进度发生改变
- 携带参数为新的进度时长
5. RCV_TYPE_DURATION_CHANGE
- 媒体总时长发生改变时,也就是切换媒体时
- 携带参数为新的歌曲播放时长
```