(一)概述

音频数据一般都具有较高的采样率,经过压缩的原始数据才具有实用价值,否则不仅要占用大量存储空间而且在播放或进行网络传输时效率也是非常低下的,所以音频数字压缩编码在多媒体应用中有着广泛而又重要的用途。

音频的编码压缩方式有许多种,这些不同的压缩方式有着不同的数据压缩比和还原音质,具体的编码格式和算法更是大相径庭。多数协议都比较复杂,普通程序难以实现其加、解压算法,而为多媒体提供了较强支持的Windows 98操作系统引入了ACM和VCM技术,用来管理系统中存在的所有的音频和视频编、解码器(Coder-Decoder,即CODECs,用来实现音频、视频数据编解码的驱动程序)。可以通过它们提供的编程接口调用系统中存在的现成的编解码器来实现音频数据的加、解压。本文所要介绍的就是ACM音频压缩接口的编程方法,所使用的编程工具为Microsoft Visual C++ 6.0。

尽管一个CODEC在理论上能够用于压缩、解压缩任一种数据流,但还是设计有各种各样的CODECs 以实现更高的压缩比、更高的保真度或实时压缩性能来压缩某种特定的数据类型。例如,把获取很高的视频压缩数据压缩率的最好方法应用到音频数据时未必就能得到相同的效果。

压缩音频数据的主要原理是降低存储某一声音序列所需的数据量。少的数据量就意味着声音所占有的空间更少,就能够以更快的速度通过MODEM在网络上传递。如果数据以Windows系统所支持的某种通用格式压缩的话,就可不经手工解压缩而直接播放--系 统将使用它自己的CODECs解压缩数据并播放。Windows 98本身附带有几种标准的CODECs,如DSP Group,Inc. TrueSpeech CODEC等。因此我们写的任何应用于 Windows 98下的程序都可应用这些CODEC,具体系统中都存在有哪些CODECs可以在控制面版的"多媒体"选项的"设备"标签页中查到。

CODEC 支持从源音频格式到目标格式的转换,而在实际应用中, 可能某种CODEC 不支持直接将源音频格式转换成目标格式,比如我们通过麦克风向多媒体计算机录入了一些频率为11025Hz、8位数据、单声道的PCM数据,如果选用系统的TrueSpeech CODEC进行处理,就会引起失败,因为这种CODEC只能处理频率为8KHz,16位单声道的数据。所以转换时要采取两步转换法,即先将源格式转换成一种中间格式,再将此中间格式转换成目标格式,因为线性PCM 编码最为简单,且为绝大多数CODEC 所支持,所以一般中间格式都选为线性PCM 格式的一种,比如就可以先将原始数据转换成TrueSpeech CODEC所支持的中间PCM格式,然后再将其通过TrueSpeech CODEC转换成最终的压缩格式;

版权申明:本站文章均来自网络,如有侵权,请评论 ,收到后立即删除,谢谢!

基于VC的ACM音频编程接口压缩Wave音频(一)的更多相关文章

  1. 基于VC的ACM音频编程接口压缩Wave音频(三)

    (三)音 频 数 据 的 压 缩 下 面 说 明 使 用 CODEC 实 现 音 频 压 缩 的 过 程:假 设 源 信 号 为8K 采 样.16bits PCM 编 码. 单 声 道. 长 度 为1 ...

  2. 基于VC的ACM音频编程接口压缩Wave音频(二)

    (二)获取CODECs 的 信 息  ACM 的API 函 数 定 义 在 头 文 件msacm.h 中, 除 此 之 外, 对ACM 编 程 还 必 须 包 含 头 文 件mmsystem.h,mm ...

  3. Linux音频编程指南

    Linux音频编程指南 虽然目前Linux的优势主要体现在网络服务方面,但事实上同样也有着非常丰富的媒体功能,本文就是以多媒体应用中最基本的声音为对象,介绍如何在Linux平台下开发实际的音频应用程序 ...

  4. 【Linux系统编程应用】Linux音频编程基础(一)【转】

    转自:https://blog.csdn.net/dengjin20104042056/article/details/52435290 一.数字音频 音频信号是一种连续变化的模拟信号,但计算机只能处 ...

  5. Linux音频编程指南(转)

    转自: http://www.ibm.com/developerworks/cn/linux/l-audio/ Linux音频编程指南 虽然目前Linux的优势主要体现在网络服务方面,但事实上同样也有 ...

  6. VC 与Matlab混合编程之引擎操作详解

    Visual C++ 是当前主流的应用程序开发环境之一,开发环境强大,开发的程序执行速度快.但在科学计算方面函数库显得不够丰富.读取.显示数据图形不方便. Matlab 是一款将数值分析.矩阵计算.信 ...

  7. VC++学习之网络编程中的套接字

    VC++学习之网络编程中的套接字 套接字,简单的说就是通信双方的一种约定,用套接字中的相关函数来完成通信过程.应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问 ...

  8. Linux音频编程

    1. 背景 在<Jasper语音助理介绍>中, 介绍了Linux音频系统, 本文主要介绍了Linux下音频编程相关内容. 音频编程主要包括播放(Playback)和录制(Record), ...

  9. 【转】Alsa音频编程【精华】

    一.前序 这里了解一下各个参数的含义以及一些基本概念. 声音是连续模拟量,计算机将它离散化之后用数字表示,就有了以下几个名词术语. 样本长度(sample):样本是记录音频数据最基本的单位,计算机对每 ...

随机推荐

  1. Yii;CodeIgniter;thinkphp学习

    http://www.ibm.com/developerworks/cn/opensource/os-cn-yii/ http://codeigniter.org.cn/ http://baike.b ...

  2. iOS开发中打电话发短信等功能的实现

    在APP开发中,可能会涉及到打电话.发短信.发邮件等功能.比如说,通常一个产品的"关于"页面,会有开发者的联系方式,理想情况下,当用户点击该电话号码时,能够自动的帮用户拨出去,就涉 ...

  3. js Function.call

      提到上述的概念之前,首先想说说javascript中函数的隐含参数:arguments Arguments 该对象代表正在执行的函数和调用它的函数的参数. [function.]arguments ...

  4. 转载 --ios 模型-setValuesForKeysWithDictionary

    应用场景:app请求后端数据,返回的数据是JSON形式,如: { "is_favor" = 0; "is_follow" = 0; "is_prais ...

  5. iOS网络请求之multipart/form-data提交数据

    multipart/form-data表单数据 在http网络请求中,post没有请求长度的限制,因为post把数据放在了body中,而不是像Get一样放在了浏览器的地址栏中(可以这么理解), 所以相 ...

  6. errorlevel

    ------siwuxie095 errorlevel 程序返回码 用法:echo %errorlevel% 查看当前程序返回码(即返回值),以知道程序或命令行是否执行成功. DOS在执行完后都有返回 ...

  7. shift

    -------siwuxie095 shift 更改批处理文件中可替换参数的位置 语法: SHIFT [/n] 如果命令扩展被启用,SHIFT 命令支持 /n 命令行开关:该命令行开关告诉 命令从第 ...

  8. nerual style 执行命令

    python neural_style.py --content ./examples/4-content.jpg --styles ./examples/4-faguo-style.jpg --ou ...

  9. @Repository、@Service、@Controller 和 @Component

    转载:http://blog.csdn.net/ye1992/article/details/19971467 spring 自 2.0 版本开始,陆续引入了一些注解用于简化 Spring 的开发.@ ...

  10. (转)selenuim-webdriver注解之@FindBy、@FindBys、@FindAll的区别

    selenium-webdriver中获取页面元素的方式有很多,使用注解获取页面元素是其中一种途径, 方式有3种:@FindBy.@FindBys.@FindAll.下文对3中类型的区别和使用场景进行 ...