Microsoft.DirectX.DirectSound学习(一)
背景:为什么用到这个类库呢?公司要一个要播放音频文件(.wav)的功能,本来想着很ez的事,网上提供的jq插件、本地也有很多播放器,怎么用都行。可当我实现的时候发现大部分网上插件在火狐上不支持.wav格式,好不容找到几个能实现的但是可以播放从网上下来的任何格式的歌曲音频但是公司的音频播放不了;很纳闷就调用本地.exe播放器结果一样不能播放,百般纳闷后找到音频生产者(Android)问音频是如何录制及生成的~不问不知道一问吓一跳,这是一段特殊音频流文件(没有波行头且已经实现了实时上传和播放功能)。挠头,郁闷,感叹人生好几天想出一招,让安卓端封装个jar包给我,我再将jar包封装DLL或者EXE引用即可...屁颠屁颠找安卓去聊这事,人家爽快答应我后当天下午就告诉我弄不了,音频是AudioTrack插件弄的,离开安卓环境就报错....郁闷...挠头...感叹人生,特么的爪哇能玩的.net应该也能玩才对啊!!;研究了一下午AudioTrack发现它也是PCM流实现的功能,哎,求人不如求己各种摆渡后找到了这个类库,自己写...
正题:语音聊天过程
声音的一些术语:
声道: 单声道、双声道
对于单声道声音文件,采样数据为八位的短整数(short int 00H-FFH);
对于双声道立体声声音文件,每次采样数据为一个16位的整数(int),高八位(左声道)和低八位(右声道)分别代表两个声道
采样位数:8位、16位(2^8与2^16)
采样频率:声音信号在“模→数”转换过程中单位时间内采样的次数。采样值是指每一次采样周期内声音模拟信号的积分值。
22.05KHz、44.1KHz、48KHz
每个采样数据记录的是振幅, 采样精度取决于储存空间的大小:
1 字节(也就是8bit) 只能记录 256 个数, 也就是只能将振幅划分成 256 个等级;
2 字节(也就是16bit) 可以细到 65536 个数, 这已是 CD 标准了;
4 字节(也就是32bit) 能把振幅细分到 4294967296 个等级, 实在是没必要了.
如果是双声道(stereo), 采样就是双份的, 文件也差不多要大一倍.
这样我们就可以根据一个 wav 文件的大小、采样频率和采样大小估算出一个 wav 文件的播放长度。
譬如 "Windows XP 启动.wav" 的文件长度是 424,644 字节, 它是 "22050HZ / 16bit / 立体声" 格式(这可以从其 "属性->摘要" 里看到),
那么它的每秒的传输速率(位速, 也叫比特率)是 22050*16*2 = 705600(bit/s), 换算成字节单位就是 705600/8 = 88200(字节/秒),
播放时间:424644(总字节数) / 88200(每秒字节数) ≈ 4.8145578(秒)。
包装标准的 PCM 格式的 WAVE 文件(*.wav)中至少带有 42 个字节的头信息, 在计算播放时间时应该将其去掉,
就有:(424644-42) / (22050*16*2/8) ≈ 4.8140816(秒). 这样就比较精确了
RTP/RTCP协议:百度学习...
Microsoft.DirectX.DirectSound(简称:DirectSound)工作原理;
DirectSound使用缓冲区来播放声音,分为:主缓冲区(PrimaryBuffer)、从缓冲区(SecondBuffer)
PrimaryBuffer:在DirectSound对象创建过程中自动创建(默认格式:22.05Khz/8位/立体声),从缓冲区中的音频数据完成混音后被放入主缓冲区
SecondBuffer:手动创建,需要将PCM流写入SecondBuffer中,接下去的混音和播放由DirectSound后台完成;
只要混音运算足够快用户可创建多个SecondBuffer同时播放不同波形音频数据
静态缓冲(StaticBuffer)和流式缓冲(StreamingBuffer)
DirectSound有多种选择创建不同样式的从缓冲区,从工作原理上看,有两种最为重要和常用:StaticBuffer、StreamingBuffer。
静态缓冲(StaticBuffer):按波形音频数据大小创建从缓冲区,在播放音频前需要将文件全部写入从缓冲区,数据一次写入后声音可以反复播放;主要用于播放小文件。缺点:占用内存空间过大;即使创建成功,那么在播放前将波形音频数据写入从缓冲区的时间过长对实时播放造成了影响。
流式缓冲(StreamingBuffer):用于长时间连续的波形音频数据的播放,用户在内存中创建从缓冲区,一般为播放1~2秒数据的长度,然后根据播放速率将波形音频数据定时分片写入从缓冲区的指定位置,就可以实现话音实时播放。主要用于大型波形音频数据的播放或实时采样声音的播放。
Microsoft.DirectX.DirectSound学习(一)的更多相关文章
- 运用Microsoft.DirectX.DirectSound和Microsoft.DirectX实现简单的录音功能
1.首先要使用Microsoft.DirectX.DirectSound和Microsoft.DirectX这两个dll进行录音,需要先安装microsoft directx 9.0cz这个组件, 百 ...
- Microsoft.DirectX.DirectSound.dll和Microsoft.DirectX.dll引用,导致项目无法调试问题
最近在做录音功能,用到了Microsoft.DirectX.DirectSound.dll和Microsoft.DirectX.dll两个dll,但是引入后,无法调试项目 具体解决方法: 修改app. ...
- C#调用Microsoft.DirectX.DirectSound问题记录及解决
问题1:初始化结构体WaveFormat或其他变量时卡死 修改App.config,修改方法如下: 原App.config <?xml version="1.0" encod ...
- C#调用Microsoft.DirectX.DirectSound.dll时出错
1.修改工程的编译选项.我的开发运行环境是Windows 10 x64系统.需要修改一下工程的编译选项,把AnyCPU改成x86的. 未能加载文件或程序集“Microsoft.DirectX.Dire ...
- 迁移基于Microsoft.DirectX的AudioRecoder类到SharpDX上
最近迁移项目到x64上,要处理的东西还是蛮多的,所以我要在说一次,不到万不得已不要用COM组件,要用COM组件也得首先考虑不需要我们关心平台的做法,或者得有64位版本. 比如Office的COM组件调 ...
- DirectX.DirectSound声音播放资料
参考:https://msdn.microsoft.com/en-us/library/windows/desktop/bb318665(v=vs.85).aspx Microsoft DirectS ...
- DirectSound学习(三)--类、方法、属性翻译
DirectSound.Device :Contains methods and properties used to create buffer objects, manage devices, a ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十章:阴影贴图
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十章:阴影贴图 本章介绍一种在游戏和应用中,模拟动态阴影的基本阴影 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十八章:立方体贴图
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十八章:立方体贴图 代码工程地址: https://github.c ...
随机推荐
- PHP.7-HTML+CSS(一)-HTML语法、常用字符实体、颜色代码
HTML+CSS HTML是WEB页面的描述性语言,浏览器解释的语言 CSS则是为HTML制定样式的机制,为浏览器解释的语言.它不能独立使用,没有HTML就没有CSS,定义网页的外观和布局(字体.背景 ...
- cocos2d-x lua 使用自定义消息EventCustom
cocos2d-x lua 使用自定义消息EventCustom version: cocos2d-x 3.6 1.发送消息 -- post message -- event将会被传递给消息接收函数, ...
- 用对象型泛型和ArraysList写一个输入学员信息并展示
题目:录入学员信息并保存,当录入学员的编号为0时结束,展示出学员信息 //student类 public class Student { public int id; public String na ...
- mount: can't find cdrom in /etc /fstab or /etc/mtab
我用的linux操作系统类别是CentOS-6.5 首先在虚拟机选项的设置里设置CD/DVD选项其中勾选Connect at power on选项 在连接中选择Use ISO image file:即 ...
- Adobe Edge Animate –EdgeCommons Log和全局变量设置功能
Adobe Edge Animate –EdgeCommons Log和全局变量设置功能 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. 一.Log功能 当 ...
- Toad for Oracle 12.1下载地址
32 位版: http://us-downloads.quest.com/Repository/support.quest.com/Toad for Oracle/12.1/Software/Toad ...
- 利用SCI做的一个足球答题系统
SCI,异步串行通信接口,内置独立的波特率产生电路和SCI收发器,可以选择发送8或9个数据位(其中一位可以指定为奇或偶校验位). SCI是全双工异步串行通信接口,主要用于MCU与其他计算机或设备之间的 ...
- hdu 3622 二分+2-SAT判定
思路:如题 #include<iostream> #include<algorithm> #include<cstring> #include<cstdio& ...
- [转]Ubuntu中无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)
sudo apt-get install git E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/ ...
- webstorm卡、闪退以及win10中jdk配置【转】
原文地址:webstorm卡.闪退以及win10中jdk配置 今天 webstorm 突然一直处于 indexing 索引状态,然后就卡死,重装也无法解决. 搜了一下后,有人说使用 64 位客户端 ...