零基础入门多媒体音频(4)-GENIVIProjectAudioManager总览

GENIVI Project的AudioManager是一个专门设计用于汽车信息娱乐系统的音频管理解决方案。它负责管理和控制车辆内的音频源和音频路径,确保各种音频信号能够正确、高效地在车辆的音响系统中传输和播放。

AudioManager的核心功能包括音频源的管理、音频路径的控制以及音频信号的处理。它能够识别和管理多种音频源,如收音机、CD播放器、蓝牙设备、USB接口等,并根据用户的选择或系统的设定,将音频信号传输到相应的音响设备,如扬声器、耳机等。

此外,AudioManager还具备音频信号处理的能力,可以对音频信号进行放大、均衡、混响等处理,以提升音频的音质和听感。它还能够根据车辆的行驶状态和环境噪声,自动调整音频的音量和音质,确保驾驶者和乘客在任何情况下都能获得最佳的听觉体验。

总的来说,GENIVI Project的AudioManager是一个功能强大、灵活可配置的音频管理解决方案,适用于各种汽车信息娱乐系统的开发和集成。它能够为驾驶者和乘客提供高品质的音频体验,同时满足车辆制造商对于音频系统的特殊需求。

GENIVI Project AudioManager共可以分为两个部分:audiomanager,audiomanagerplugins。audiomanager是项目的核心框架层,包含了守护进程daemon的启动;各插件的加载,初始化;提供基础特性支持,包括调试信息管理(DLT),数据库(sqlLite),跨进程通行(Dbus,CAPI);插件间的调用传递。audiomanagerplugins是项目提供的扩展插件。共包含三部分,command(项目软件与项目以外的软件的信息传递,调用传递),control(音频功能的核心决策层,负责业务逻辑的处理),routing(音频业务的具体执行者)。commandsender主要用于audiomanager向外床底系统中状态的变化,如系统加/删的主链接,sink/source数量变化,sink/source状态变化,系统增/删sink/source。我们发散一下思维,再android音频中扮演commandsender角色的模块是什么呢?

就是audioservcie里面的各类广播消息。这两者都实现了将音频系统状态的变化传递给系统的关注者。让这些利益相关者做出响应。本质上使用了观察者模式。

commandreceiver类是audiomanager对外暴露的功能接口。(也就是外部软件(某种程度上plugin也在此列)可以调用audiomanager做哪些功能)。我们可以类比到android的audiomanager,audiosystem,audiotrack等接口。虽然commandsender和commandreceiver从名字上看来只是调用方向的相反,但是实际上实现的功能和设计目的时完全不一样的。不免让人觉得设计者是纯粹为了简单和对称进行这样命名的。

下面是截取的一些典型代码片段。

commandreceiver

复制代码
   am_Error_e connect(const am_sourceID_t sourceID, const am_sinkID_t sinkID, am_mainConnectionID_t& mainConnectionID);
    am_Error_e disconnect(const am_mainConnectionID_t mainConnectionID);
    am_Error_e setVolume(const am_sinkID_t sinkID, const am_mainVolume_t volume);
    am_Error_e volumeStep(const am_sinkID_t sinkID, const int16_t volumeStep);

commandsender

复制代码
id cbNewMainConnection(const am_MainConnectionType_s mainConnection);
    void cbRemovedMainConnection(const am_mainConnectionID_t mainConnection);
    void cbNewSink(am_SinkType_s sink);
    void cbRemovedSink(const am_sinkID_t sink);
    void cbNewSource(const am_SourceType_s source);
    void cbRemovedSource(const am_sourceID_t source);
    void cbNumberOfSinkClassesChanged();
    void cbNumberOfSourceClassesChanged();

RoutingReceiver的作用是routing插件向audiomanager主进程通知route相关元素状态的变化,比如注册/注销音频域,注册/注销音频网关,注册/注销音频转化器等。以及ack从routingsender送过来的命令执行情况。

routingsender是用于audiomanager主进程操作route元素。包括链接source和sink。设置source/sink属性(音量,节点状态)等。

ControlReceiver的作用是让contro插件能调用audiomanager提供的数据库,打印等基础功能,间接调用routingplugin插件实现的功能。

ControlSender的作用是让contro插件能够在audiomanager执行重要功能逻辑时注入自己想要附加的逻辑。

相关推荐
lovep14 小时前
音频-文本对比学习:LARGE-SCALE CONTRASTIVE LANGUAGE-AUDIO PRETRAINING论文翻译和理解
音视频·glap·音频理解·音频对比学习·laion-audio·音频检索
codelancera20 小时前
ffmpeg-调整视频分辨率
ffmpeg·音视频
天向上1 天前
手机端的音视频界面或者图片文档界面共享给大屏
智能手机·音视频·多平台·手机投屏·多屏互动
ECC&SM91 天前
Video_AVI_Packet(1)
笔记·音视频
Evaporator Core1 天前
Windows批处理脚本自动合并当前目录下由You-get下载的未合并的音视频文件
windows·音视频
ue星空1 天前
UE5配置MRQ编解码器输出MP4视频
ue5·音视频
CV实验室2 天前
CVPR 2025 | 北大团队SLAM3R:单目RGB长视频实时重建,精度效率双杀!
人工智能·计算机视觉·论文·音视频
chenchao_shenzhen2 天前
RK3568嵌入式音视频硬件编解码4K 60帧 rkmpp FFmpeg7.1 音视频开发
ffmpeg·音视频·rk3588·音视频开发·嵌入式开发·瑞芯微rk3568·硬件编解码
音视频牛哥2 天前
H.264、H.265 到 H.266:编码标准演进、RTSP支持与实时视频系统实战
音视频·大牛直播sdk·h.266编码·rtmp h.266·rtsp h.266·h.266解码·h.265和h.266差异
从后端到QT2 天前
RTCP详解
服务器·音视频·实时音视频·rctp