C++音视频八股文(音频编解码基础)

1. 常见的音频编码格式有哪些?AAC、MP3、Opus各有什么特点?

常见音频编码格式:

  • AAC(Advanced Audio Coding)
  • MP3(MPEG-1 Audio Layer 3)
  • Opus
  • AC-3/E-AC-3(杜比数字)
  • FLAC(无损)
  • PCM(未压缩)

AAC特点:

  • 压缩效率比MP3高约30%,相同码率下音质更好
  • 支持更多声道(最多48个)
  • 支持更高采样率(最高96kHz)
  • 广泛用于流媒体、移动设备、数字电视
  • 典型码率:128-256kbps

MP3特点:

  • 最流行的有损压缩格式,兼容性最好
  • 压缩效率较低,但解码简单
  • 支持CBR、VBR、ABR码率控制
  • 典型码率:128-320kbps
  • 专利已过期,完全免费

Opus特点:

  • 新一代开源音频编码,结合SILK和CELT
  • 低延迟(5-66.5ms),适合实时通信
  • 码率范围广(6-510kbps),自适应性强
  • 音质优于AAC和MP3
  • WebRTC、Discord等使用
  • 适合:VoIP、视频会议、音乐流媒体

2. 什么是PCM(脉冲编码调制)?采样率、位深度、声道数分别代表什么?

PCM(Pulse Code Modulation):

  • 未压缩的原始音频数据格式
  • 将模拟音频信号数字化的标准方法
  • 通过采样、量化、编码三个步骤实现

采样率(Sample Rate):

  • 每秒采样次数,单位Hz
  • 常见值:8kHz(电话)、16kHz(语音)、44.1kHz(CD)、48kHz(专业音频)、96kHz(高保真)
  • 根据奈奎斯特定理,采样率需≥2倍最高频率
  • 44.1kHz可覆盖人耳听觉范围(20Hz-20kHz)

位深度(Bit Depth):

  • 每个采样点的量化精度,单位bit
  • 常见值:8bit、16bit、24bit、32bit
  • 16bit提供96dB动态范围,CD标准
  • 位深度越高,音质越好,噪声越小,文件越大

声道数(Channels):

  • 音频轨道数量
  • 1:单声道,2:立体声,6:5.1环绕声

码率计算:

码率 = 采样率 × 位深度 × 声道数
例:44.1kHz × 16bit × 2 = 1411.2kbps(CD音质)

3. 音频采样格式有哪些?Planar和Packed格式有什么区别?

常见采样格式:

  • 整数格式:S8、S16、S32(有符号)、U8(无符号)
  • 浮点格式:FLT(32位浮点)、DBL(64位浮点)
  • Planar格式:S16P、FLTP等
  • Packed格式:S16、FLT等

Packed(交错)格式:

  • 多声道数据交错存储
  • 立体声存储顺序:L R L R L R...
  • 内存布局:[L0][R0][L1][R1][L2][R2]...
  • 优点:数据连续,便于传输和播放
  • FFmpeg表示:AV_SAMPLE_FMT_S16

Planar(平面)格式:

  • 每个声道独立存储
  • 立体声存储:[L0 L1 L2...] [R0 R1 R2...]
  • 内存布局:左声道数组 + 右声道数组
  • 优点:便于单独处理每个声道,编码器常用
  • FFmpeg表示:AV_SAMPLE_FMT_S16P

使用场景:

  • 音频播放、传输:Packe

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

C++八股文全集 文章被收录于专栏

本专栏系统梳理C++技术面试核心考点,涵盖语言基础、面向对象、内存管理、STL容器、模板编程及经典算法。从引用指针、虚函数表、智能指针等底层原理,到继承多态、运算符重载等OOP特性从const、static、inline等关键字辨析,到动态规划、KMP算法、并查集等手写实现。每个知识点以面试答题形式呈现,注重原理阐述而非冗长代码,帮助你快速构建完整知识体系,从容应对面试官提问,顺利拿下offer。

全部评论

相关推荐

02-09 16:14
武汉大学 Java
1. 问一下本科经历2. 介绍一下你第一个项目3. DDD分层架构比传统的MVC有哪些好处?4. 你设计的业务分配的算法介绍一下?5. 算法有哪些优化思路?6. 动态标签列设计怎么思考的?7. 数据量有多大?8. 数据量很大的话,数据存储怎么优化?9. 如何保证缓存和数据库之间的数据一致性?10. 相对于你这个项目用哪种方案?11. 项目中遇到的最大的困难是什么?12. 介绍一下第二个项目13. 模型分析diff的上下文怎么考虑?14. 如果diff的关联的上下文很长超过token,你会怎么办?15. 你想的这种方案,最后输入给模型的prompt是什么?16. 对于大模型的其他组件如RAG和skills有了解吗?17. 那你有想过把代码拆分成一些知识库放在rag里面吗?18. 有对比过其他模型的分析效果吗?19. golang有了解吗?20. HashMap的底层结构21. 为什么要用红黑树?22. 红黑树增删的时间复杂度?23. MySQL事务隔离级别24. MVCC实现原理25. 手撕算法:lc402 移掉k位数字 -> 没想到单调栈,暴力枚举了QAQ反问面试官之后,感觉我的缺点主要在于项目太过于玩具了,对于高并发什么的思考处于比较浅的地步,还有就是code-review对于call graph还有一些成熟的方案不怎么了解过,相当于纯demo,面过几场才知道QAQ,估计是没啥希望了,继续沉淀了噶人们
查看25道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务