摘要: 前段时间为了一个项目而把VS2008换成了VS2010,结果原本就不堪重负的本本跑起VS2010来那更是慢得没话说,于是看了遍VS2010选项,又从网上到处找资料找优化方法,总算使我的VS2010跑得快了些。一、VS2010选项视觉体验设置工具->选项->环境视觉体验的勾选都去掉。不解释,你懂得。二、禁用Intellisense工具->选项->文本编辑器->C/C++->高级禁用IntelliSense设为True这个功能很好用。相较于Visual Assist X,Intellisence结果更加准确,但活动也更加频繁,项目一庞大时修改头起来就会使VS变得 阅读全文
posted @ 2011-07-28 14:20 心随灵动 阅读(713) 评论(0) 推荐(0) 编辑
摘要: 音频编解码标准PCMU(G.711U)类型:Audio制定者:ITU-T所需频宽:64Kbps(90.4)特性:PCMU和PCMA都能提供较好的语音质量,但是它们占用的带宽较高,需要64kbps。优点:语音质量优缺点:占用的带宽较高应用领域:voip版税方式:Free备 注:PCMU and PCMA都能够达到CD音质,但是它们消耗的带宽也最多(64kbps)。如果网络带宽比较低,可以选用低比特速率的编码方法,如G.723或 G.729,这两种编码的方法也能达到传统长途电话的音质,但是需要很少的带宽(G723需要5.3/6.3kbps,G729需要8kbps)。如果带 宽足够并且需要更好的语. 阅读全文
posted @ 2011-07-28 09:21 心随灵动 阅读(1631) 评论(0) 推荐(0) 编辑
摘要: VC 多线程编程一、问题的提出编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX_SECOND,标题为“延时6秒”,添加按钮的响应函数,代码如下:voidCSingleThreadDlg::OnSleepSixSecond(){ Sleep(6000);//延时6秒}编译并运行应用程序,单击“延时6秒”按钮,你就会发现在这6秒期间程序就象“死机”一样,不在响应其它消息。为了更好地处理这种耗时的操作,我们有必要学习——多线程编程。二、多线程概述进程和线程都是操作系 阅读全文
posted @ 2011-07-27 21:36 心随灵动 阅读(1085) 评论(0) 推荐(0) 编辑
摘要: 首先我想大家应该先明白“壳”的概念。在自然界中,我想大家对壳这东西应该都不会陌生了,植物用它来保护种子,动物用它来保护身体等等。同样,在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。就像动植物的壳一般都是在身体外面一样理所当然(但后来也出现了所谓的“壳中带籽”的壳)。由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,大家就把这样的程序称为“壳”了。就像计算机病毒和自然界的病毒一样,其实都是命名上的方法罢了。 最早提出“壳”这个概念的,据我所知,应该是当年推出脱壳软件 RCOPY 3 的作者熊 阅读全文
posted @ 2011-07-27 20:18 心随灵动 阅读(1151) 评论(0) 推荐(0) 编辑
摘要: 一、基本概念1 比特率:表示经过编码(压缩)后的音频数据每秒钟需要用多少个比特来表示,单位常为kbps。2 响度和强度:声音的主观属性响度表示的是一个声音听来有多响的程度。响度主要随声音的强度而变化,但也受频率的影响。总的说,中频纯音听来比低频和高频纯音响一些。3 采样和采样率:采样是把连续的时间信号,变成离散的数字信号。采样率是指每秒钟采集多少个样本。Nyquist采样定律:采样率大于或等于连续信号最高频率分量的2倍时,采样信号可以用来完美重构原始连续信号。二、常见音频格式1. WAV格式,是微软公司开发的一种声音文件格式,也叫波形声音文件,是最早的数字音频格式,被Windows平台及其应用 阅读全文
posted @ 2011-07-25 20:28 心随灵动 阅读(2405) 评论(0) 推荐(0) 编辑
摘要: PCM文件:模拟音频信号经模数转换(A/D变换)直接形成的二进制序列,该文件没有附加的文件头和文件结束标志。Windows的Convert工具可以把PCM音频格式的文件转换成Microsoft的WAV格式的文件。脉冲编码调制PCM文件格式简介将音频数字化,其实就是将声音数字化。最常见的方式是透过脉冲编码调制PCM(Pulse Code Modulation) 。运作原理如下。首先我们考虑声音经过麦克风,转换成一连串电压变化的信号,如图一所示。这张图的横座标为秒,纵座标为电压大小。要将这样的信号转为 PCM 格式的方法,是使用三个参数来表示声音,它们是:声道数、采样位数和采样频率。采样频率即取样 阅读全文
posted @ 2011-07-25 20:19 心随灵动 阅读(1019) 评论(0) 推荐(1) 编辑
摘要: 在VOIP的音频算法中,回音处理已经成为一个关系通话质量的主要问题。回声的产生在IP网络主要有两种:1.声学回声2.电路回声声学回声主要又分成以下几种:a ) 直接回声:由扬声器产生的声音未经任何反射直接进入麦克风b ) 间接回声: 由扬声器发出的声音经过多次反射后,再进入Mic对于第二种回声,拥有多路径,时变性的特点.是比较难处理的.由于IP网络下的传输的延迟较大,而一般情况下,对于人耳,如果声音延迟达到了10ms以上的话,那么回声就会越来越明显.一般来讲,VOIP中的声音延迟主要来自于几个方面:1. 编码延迟: 一般情况下编码算法在声音压缩时都会产生延迟,就我们采用的Speex来讲,延迟大 阅读全文
posted @ 2011-07-21 22:08 心随灵动 阅读(1697) 评论(0) 推荐(1) 编辑
摘要: view plaincopy to clipboardprint?// demo.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <speex/speex.h>#include <stdio.h>#include <ostream>#include <speex/speex_preprocess.h>#include <speex/speex_echo.h>#pragma comment( 阅读全文
posted @ 2011-07-21 22:07 心随灵动 阅读(3967) 评论(1) 推荐(0) 编辑
摘要: 在Speex(www.speex.org)的最新版本中,开始集成了回音消除的模块,而回音消除一直是Voip之中亟待解决的主要问题。很多朋友和我说speex的aec模块的效能并不好,我们先来看一下speex的aec的api调用方式。/**创建AEC对象*/SpeexEchoState *echo_state = speex_echo_state_init(frame_size, filter_length);frame_size 的取值最好是一个编码的frame大小, 在低带宽条件下,一般延迟20ms,而大小为160filter_length,最好是房间内反射时间的1/3如: 一个房间的反射时延 阅读全文
posted @ 2011-07-21 17:20 心随灵动 阅读(3302) 评论(0) 推荐(0) 编辑
摘要: 看到网上很多希望使用speex aec的, 似乎找不到win32下的例子, 我这里尝试做了一个, 效果还行, 使用上面是三路实时音频录下后, 在audacity中显示, 第一路为本地mic采集, 第二路为本地回放, 第三路为经过speex_echo_cancellation() 处理后的, 这个测试中, 为间断的读"1, 2, 3...", 图中选中的是 "2". capture到playback之间,大约差了1百多毫秒.下面开始叙述实现过程, 并附上源码.其实aec中最困难的问题是如何同步capture和playback, 一开始我也尝试用 speex 阅读全文
posted @ 2011-07-21 15:07 心随灵动 阅读(2114) 评论(0) 推荐(0) 编辑
摘要: Speex是近年来开发出的一套功能强大的语音引擎,能够实现高质量和低比特率的编码。它不仅提供了基于码激励线性预测(CELP)算法的编/解码模块,而且在其最新发布的版本中还提供了声音预处理和声学回声消除模块,为保障IP网络中的语音通信质量提供了技术手段。此外,Speex还具有压缩后的比特率低(2~44 kbps)的特点,并支持多种比特率。这些特点使得Speex特别适合VoIP的系统。虽然是开源的,但是使用的人还不是很多,网上的资料也很少,下面简单给大家介绍一下如何使用speex的API。一:编码流程使用Speex的API函数对音频数据进行压缩编码要经过如下步骤:1、定义一个SpeexBits类型 阅读全文
posted @ 2011-07-21 10:29 心随灵动 阅读(6102) 评论(1) 推荐(0) 编辑
摘要: 一、波形声音 波形声音就是通过计算机的声音采集设备将现实世界当中的声波通过模数转化之后用数字的方式表示声音波形的一种声音储存方案。在播放声音的时候声卡将以数字储存的声音波形信号转换为一系列的电流信号。 声音的采集过程当中涉及到两个术语:采样率表示声音采集设备每秒钟采集声音信号的次数,一般有44.1KHZ、22.05KHZ等等;样化位数表示每次采样得到的声音信号用多少位来表示。在声音的采样当中采样率和样化位数越高声音的质量就越高。在windows程序设计当中,波形声音的采集和回放有两种方式来实现:一种是使用一系列底层的函数调用来实现;另一种是使用MCI接口来实现。我们首先介绍底层函数的使用。1. 阅读全文
posted @ 2011-07-20 10:49 心随灵动 阅读(1126) 评论(0) 推荐(0) 编辑
摘要: 随着计算机网络的日益普及,人们通过网络进行交流显得越来越重要,于是出现了一系列语音通信的软件,比如NetMeeting、IPPhone、MediaRing以及VoxPhone等等,但这些软件都功能完善、相对独立,不利于集成到自己开发的软件中,有时我们也希望将这种语音通信功能集成到自己的软件中,尤其当一个单位的局域网用户分散在不同的房间时。本文给出一种灵活、简单的实现方法,采用基于对话框的方式编程,硬件上只需要一块双DMA通道的声卡(目前的声卡大多支持双DMA通道)和一支耳麦,其余全部由软件编程实现。程序在 Windows98/2000、Visual C++6.0 下编译通过,在Windows 阅读全文
posted @ 2011-07-20 08:59 心随灵动 阅读(1084) 评论(2) 推荐(0) 编辑
摘要: 基于API的录音机程序作者/栾义明一、数字音频基础知识Fourier级数:任何周期的波形可以分解成多个正弦波,这些正弦波的频率都是整数倍。级数中其他正线波的频率是基础频率的整数倍。基础频率称为一级谐波。PCM:pulse code modulation,脉冲编码调制,即对波形按照固定周期频率采样。为了保证采样后数据质量,采样频率必须是样本声音最高频率的两倍,这就是Nyquist频率。样本大小:采样后用于存储振幅级的位数,实际就是脉冲编码的阶梯数,位数越大表明精度越高,这一点学过数字逻辑电路的应该清楚。声音强度:波形振幅的平方。两个声音强度上的差常以分贝(db)为单位来度量,计算公式如下:20* 阅读全文
posted @ 2011-07-19 09:03 心随灵动 阅读(541) 评论(0) 推荐(0) 编辑
摘要: wstring MultCHarToWideChar(string str){//获取缓冲区的大小,并申请空间,缓冲区大小是按字符计算的int len=MultiByteToWideChar(CP_ACP,0,str.c_str(),str.size(),NULL,0);TCHAR *buffer=new TCHAR[len+1];//多字节编码转换成宽字节编码MultiByteToWideChar(CP_ACP,0,str.c_str(),str.size(),buffer,len);buffer[len]='/0';//添加字符串结尾//删除缓冲区并返回值wstring r 阅读全文
posted @ 2011-07-18 17:18 心随灵动 阅读(2252) 评论(0) 推荐(0) 编辑
摘要: char :单字节变量类型,最多表示256个字符,wchar_t :宽字节变量类型,用于表示Unicode字符,它实际定义在<string.h>里:typedef unsigned short wchar_t。为了让编译器识别Unicode字符串,必须以在前面加一个“L”,定义宽字节类型方法如下: wchar_t c = `A' ;wchar_t * p = L"Hello!" ;wchar_t a[] = L"Hello!" ;其中,宽字节类型每个变量占用2个字节,故上述数组a的sizeof(a) = 14TCHAR / _T( ) 阅读全文
posted @ 2011-07-14 14:51 心随灵动 阅读(398) 评论(0) 推荐(0) 编辑
摘要: #ifdef UNICODE typedef wchar_t TCHAR; #else typedef unsigned char TCHAR; #endif typedef unsigned char CHAR; typedef unsigned wchar_t WCHAR; 由此可以看出,CHAR实施上就是unsigned char,WCHAR为宽字符,而TCHAR根据是否支持unicode而不同。在程序使用sizeof(TCAHR),当默认设置时,这个值是1;当定义UNICODE宏时,这个值是2。 阅读全文
posted @ 2011-07-14 14:48 心随灵动 阅读(372) 评论(0) 推荐(0) 编辑
摘要: .h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的。附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件。如果要完成源代码的编译和链接,有头文件和lib就够了。如果也使动态连接的程序运行起来,有dll就够了。在开发和调试阶段,当然最好都有。.h .lib .dll三者的关系是:H文件作用是:声明函数接口DLL文件作用是: 函数可执行代码当我们在自己的程序中引用了一个H文件里的函数,编链器怎么知道该调用哪个DLL文件呢?这就是LIB文件的作用: 告诉链接器 调用的函数在哪个DLL中,函数执行代码在DLL中的什么位置,这也就是为什么需要附加依赖项 .LIB 阅读全文
posted @ 2011-07-14 14:30 心随灵动 阅读(2059) 评论(0) 推荐(1) 编辑
摘要: 并行接口,简称并口。并口采用的是25针D形接头。所谓“并行”,是指8位数据同时通过并行线进行传送,这样数据传送速度大大提高,但并行传送的线路长度受到限制,因为长度增加,干扰就会增加,数据也就容易出错,目前,并行接口主要作为打印机端口等。 并口的工作模式: 1:SPP(Standard Parallel Port)称为标准并口,它是最早出现的并口工作模式,几乎所有使用并口的外设都支持该模式。 2:EPP(Enhanced Parallel Port)称为增强型高速并口,它是在SPP 的基础上发展起来的新型工作模式,也是现在应用最多的并口工作模式,目前市面上的大多数打印机、扫描仪都支持EPP 模式 阅读全文
posted @ 2011-07-14 14:28 心随灵动 阅读(2532) 评论(0) 推荐(0) 编辑
摘要: 你用的如果VC是5.0,5.0要从光盘上拷几个dll如果是6.0,也许要设置一下。在"工作区"相应的对话宽点右键,属性中有"语言"项,选择"Chinese(P.R.C)"就可以了。更改字体,首先改变你的static控件的ID,然后GetDlgItem(IDC_YOURSTATIC)->SetFont(&font);不支持汉字,可能是没有拷贝appwzchs.dll[附:控件字体颜色修改相关]很多人定义了基于MFC的程序项目,当设计界面使用控件时,却不知道如何对各控件进行字体与颜色的设计;其实这些修改是需要动手添加代码的, 阅读全文
posted @ 2011-07-13 16:28 心随灵动 阅读(7241) 评论(0) 推荐(0) 编辑
摘要: 是因为vs 2005之后项目使用的是unicode字符集,在“项目-属性”中将"unicode字符集"换成"多字节字符集"就行了,也可以将文本内容放在_T()里面,不变字符集。使用unicode的话MessageBox会被替换成MessageBoxW 否则是MessageBoxA多字节字符 英文1个字节,中文2个字节unicode 英文2字节 中文2字节.unicode下数据类型转换:CString转intCString b="123";int i;i=_ttoi(b);//在使用多字符集下 _atoi(array to intege 阅读全文
posted @ 2011-07-13 14:50 心随灵动 阅读(1447) 评论(0) 推荐(0) 编辑
摘要: linux下挂载(mount)光盘镜像文件、移动硬盘、U盘、Windows和NFS网络共享linux是一个优秀的开放源码的操作系统,可以运行在大到巨型小到掌上型各类计算机系统上,随着 linux系统的日渐成熟和稳定以及它开放源代码特有的优越性,linux在全世界得到了越来越广泛的应用。现在许多企业的计算机系统都是由UNIX系 统、Linux系统和Windows系统组成的混合系统,不同系统之间经常需要进行数据交换。下面我根据自己的实际工作经验介绍一下如何在linux系统 下挂接(mount)光盘镜像文件、移动硬盘、U盘以及Windows网络共享和UNIX NFS网络共享。 挂接命令(mount) 阅读全文
posted @ 2011-07-11 17:55 心随灵动 阅读(546) 评论(0) 推荐(0) 编辑
摘要: GDB概述GDB 是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。一般来说,GDB主要帮忙你完成下面四个方面的功能:1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)3、当程序被停住时,可以检查此时你的程序中所发生的事。4、动态的改变你程序的执行环境。从上面看来,GDB和一般的调试工具没有 阅读全文
posted @ 2011-07-10 12:07 心随灵动 阅读(427) 评论(0) 推荐(0) 编辑
摘要: 上网看着文章教程的时候意外得到了这份VC++6.0的快捷键清单,觉得挺有用的,写下来备忘:F1 显示帮助,如果光标停在代码的某个字符上,显示MSDN中相应的帮助内容F2 书签功能: Ctrl+F2 --在某行设置一个书签(再按一次次是取消)F2 --跳到下一个书签位置Shift+F2 --跳到上一个书签位置Ctrl+Shift+F2 --删除所有书签F3 查找: Ctrl+F3 --在文件中查找,如果当前光标在一个字符串上,那么自动查找此字符串.相似的有Ctrl+FF3 --查找文件中下一个串Shift+F3 --查找文件中上一个串F4(不是流行花园那个) 如果是编译后或者Find in Fi 阅读全文
posted @ 2011-07-07 09:33 心随灵动 阅读(793) 评论(0) 推荐(0) 编辑
摘要: 在网上找了很多的资料,现将这些资料整合起来,详细介绍一下VC下的socket编程,并提供一个服务器客户端具体的实例。希望对您有所帮助一、原理部分 (个人觉得这篇写的可以,所以转与此,原文地址:http://dev.yesky.com/78/2683078.shtml) 在网络编程中最常用的方案便是Client/Server (客户机/服务器)模型。在这种方案中客户应用程序向服务器程序请求服务。一个服务程序通常在一个众所周知的地址监听对服务的请求,也就是说,服务进程一 直处于休眠状态,直到一个客户向这个服务的地址提出了连接请求。在这个时刻,服务程序被"惊醒"并且为客户提供服务 阅读全文
posted @ 2011-07-06 10:23 心随灵动 阅读(275) 评论(0) 推荐(0) 编辑
摘要: 如果树形控件含有TVS_EDITLABELS样式,用户就可以直接编辑这个控件的项标签。用户可以通过点击项标签开始进行编辑,而程序通过使用EditLabel()成员函数开始进行编辑。当开始编辑、取消或完成时,树形控件就会发送一个通知消息。当编辑完成时,你需要响应更新项标签。当标签编辑开始时,树形控件会发送一个TVN_BEGINLABELEDIT通知消息。通过处理这个消息,你可以允许一些标签可编辑并防止其他标签可编辑。允许编辑返回0,阻止编辑返回非0。当标签编辑被取消或完成时,树形控件会发送一个TVN_ENDLABELEDIT通知消息。lParam参数是一个指向NMTVDISPINFO结构的地址。 阅读全文
posted @ 2011-07-01 18:00 心随灵动 阅读(1030) 评论(0) 推荐(0) 编辑
摘要: PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数本窗口的消息都要通过这里,比较常用,当需要在MFC之前处理某些消息时,常常要在这里添加代码.MFC 消息控制流最具特色的地方是CWnd类的虚拟函数PreTranslateMessage(),通过重载这个函数,可以改变MFC的消息控制流程,甚至可 以作一个全新的控制流出来。只有穿过消息队列的消息才受PreTranslateMessage()影响,采用SendMessage()或其他类似的方 式向窗口直接发送的而不经过消息队列的消息根本不会理睬PreTranslateMessage()的存在 阅读全文
posted @ 2011-07-01 11:40 心随灵动 阅读(587) 评论(1) 推荐(0) 编辑
摘要: 函数功能:该函数在指定位置显示快捷菜单,并跟踪菜单项的选择。快捷菜单可出现在屏幕上的任何位置。函数原型:BOOL TrackPopupMenu(HMENU hMenu,UINT uFlags,int x,int y,int nReserved,HWND hWnd,CONST RECT* prcRect);参数一览hMenu:被显示的快捷菜单的句柄。此句柄可为调用CreatePopupMenu创建的新快捷菜单的句柄,也可以为调用GetSubMenu取得的与一个已存在菜单项相联系的子菜单的句柄。uFlags:一种指定功能选项的位标志。用下列标志位之一来确定函数如何水平放置快捷菜单:TPM_CENT 阅读全文
posted @ 2011-06-30 20:52 心随灵动 阅读(2700) 评论(0) 推荐(0) 编辑
摘要: 如果你有一定的C基础可能学起来比较容易些,但是学习C++的过程中又要尽量避免去使用一些C中的思想;平时还要多看一些高手写的代码,遇到问题多多思考,怎样才能把问题抽象化,以使自己头脑中有类的概念;最后别忘了经常上机自己调调程序,这是谁也代替不了的.C++类库介绍 再次体现了C++保持核心语言的效率同时大力发展应用库的发展趋势!!在C++中,库的地位是非常高的。C++之父 Bjarne Stroustrup先生多次表示了设计库来扩充功能要好过设计更多的语法的言论。现实中,C++的库门类繁多,解决的问题也是极其广泛,库从轻量级到重量级的都有。不少都是让人眼界大开,亦或是望而生叹的思维杰作。由于库的数 阅读全文
posted @ 2011-06-30 17:28 心随灵动 阅读(718) 评论(0) 推荐(0) 编辑
摘要: ON_COMMAND ON_MESSAGE ON_NOTIFY区别与联系ON_COMMAND是菜单和工具栏项处理消息的宏ON_MESSAGE是处理自定义消息的宏ON_NOTIFY 是控件向其父窗口发送消息处理的宏对这几个消息的理解要先了解一下Window消息的背景。在Windows3.1里,控件会将mouse, keybord等等的消息通知它的父窗口, 使用的消息就只有WM_COMMAND, 事件种类和控件ID被包含在wParam中, 控件的句柄包含在lParam中。由于wParam和 lParam已经满了,当控件要向父窗口发送其它特殊消息同时附带很多信息的时候就没有地方可以存放它们了。所以W 阅读全文
posted @ 2011-06-30 14:58 心随灵动 阅读(436) 评论(0) 推荐(0) 编辑