上一页 1 ··· 5 6 7 8 9 10 11 12 13 下一页
摘要: 前段时间,搞了一阵声学回声消除,非常郁闷,因为没有成功,但可以说学到一点东西吧,至少理论上懂了一点。为什么需要声学回声消除呢?在一般的VOIP软件或视频会议系统中,假设我们只有A和B两个人在通话,首先,A的声音传给B,B然后用喇叭放出来,而这时B的MIC呢则会采集到喇叭放出来的声音,然后传回给A,如果这个传输的过程中时延足够大,A就会听到一个和自己刚才说过的话一样的声音,这就是回声,声学回声消除器的作用就是在B端对B采集到的声音进行处理,把采集到声音包含的A的声音去掉再传给A,这样,A就不会听到自己说过的话了。声学回声消除的原理我就不说了,这在网上有很多文档,网上缺少的是实现,所以,我在这把一 阅读全文
posted @ 2011-08-31 14:21 心随灵动 阅读(4824) 评论(0) 推荐(1)
摘要: 随着贸易国际化,在软件开发过程中,常会碰到需在现有中文版软件加入多语言支持的情况。由于不同语言版本间的差别通常仅是软件操作界面的不同,为实现多语言支持,使用纯资源DLL是一个不错的解决之道。所谓纯资源DLL是指只包含资源的DLL,譬如:快捷键、对话框、字符串、菜单、工具条、位图、图标、版本信息等等。具体做法是:利用VC可视化编辑环境为每种语言制作一套资源ID一一对应的资源集并编译生成DLL文件。应用程序初始化时按预设的语言设置选择合适的资源DLL调入,使用资源时依据资源ID进行访问,这样即可实现软件的多语言支持。当然了,应用程序退出前,注意将动态调入的DLL文件占用的资源释放。现有一个心电图查 阅读全文
posted @ 2011-08-26 10:44 心随灵动 阅读(2138) 评论(0) 推荐(0)
摘要: 在使用 GDI + 的 Microsoft 基础类 (MFC) 应用程序的调试版本时, 可能会出现类似于以下内容的错误消息:错误 C2660: Gdiplus::GdiplusBase::operator new: 函数不带三个参数 原因:在调试版本中 MFC 定义扩展到带有两个额外的参数的重载 new 运算符的 new 运算符的预处理器宏。额外的参数是源文件名称和代码行号。 MFC 可以使用此信息对程...在调试版本中 MFC 定义扩展到带有两个额外的参数的重载 new 运算符的 new 运算符的预处理器宏。额外的参数是源文件名称和代码行号。MFC 可以使用此信息对程序员在调试模式下时报告内 阅读全文
posted @ 2011-08-23 10:23 心随灵动 阅读(1741) 评论(0) 推荐(0)
摘要: VC++中GlobalAlloc()、malloc()和new()函数都可以用来实现内存的动态分配,那么它们之间有什么区别呢?三者的区别主要有以下几点:1、GlobalAlloc()函数在程序的堆中分配一定的内存,是Win16的函数,对应于系统的全局栈,而在Win32中全局栈和局部堆的区别已经不存在了,因此不推荐在Win32中使用该函数。2、malloc()是标准库函数,而new则是运算符,它们都可以用于申请动态内存。3、new()实际上调用的是malloc()函数。4、new运算符除了分配内存,还可以调用构造函数,但是malloc()函数只负责分配内存。对于非内部数据类型的对象而言,只使用. 阅读全文
posted @ 2011-08-23 09:29 心随灵动 阅读(725) 评论(0) 推荐(0)
摘要: 首先,在StdAfx.h中静态调用diplus.lib,即由编译系统完成对DLL的加载,应用程序结束时卸载DLL的编码。如下#ifndef ULONG_PTR#define ULONG_PTR unsigned long*#include "GdiPlus.h"using namespace Gdiplus;#pragma comment(lib, "gdiplus.lib")#endif在类的头文件中定义,以下成员变量,用来初始化GDI+的使用和结束使用。GdiplusStartupInput m_gdiplusStartupInput;ULONG_P 阅读全文
posted @ 2011-08-19 11:01 心随灵动 阅读(1562) 评论(0) 推荐(0)
摘要: 1.下载(GDI+ for VC6.0 SDK)GDIPlus文件将其中的Includes和Lib中的文件拷到vc目录下的Includes和Lib文件夹中. 下载地址:http://www.codeguru.com/code/legacy/gdi/GDIPlus.zip(引用他人的)2.在你将要使用GDI+的工程中,完成初始化工作:在StdAfx.h中加入#define ULONG_PTR unsigned long#include <Gdiplus.h>using namespace Gdiplus;#include "GdiPlus.h"3.在CApp头文件 阅读全文
posted @ 2011-08-19 10:58 心随灵动 阅读(278) 评论(0) 推荐(0)
摘要: 1,busybox简介busybox是一个集成了一百多个最常用linux命令和工具的软件,他甚至还集成了一个http服务器和一个telnet服务器,而所有这一切功能却只有区区1M左右的大小.我们平时用的那些linux命令就好比是分立式的电子元件,而busybox就好比是一个集成电路,把常用的工具和命令集成压缩在一个可执行文件里,功能基本不变,而大小却小很多倍,在嵌入式linux应用中,busybox有非常广的应用,另外,大多数linux发行版的安装程序中都有busybox的身影,安装linux的时候案ctrl+alt+F2就能得到一个控制台,而这个控制台中的所有命令都是指向busybox的链接 阅读全文
posted @ 2011-08-15 14:29 心随灵动 阅读(16156) 评论(0) 推荐(2)
摘要: 今天看到论坛上有人在问上下文菜单管理器类CContextMenuManager的问题,记得做过,但是忘了,忙里偷闲记下来,免得下次又忘了... CContextMenuManager和CMenu同样是继承于CObject,请看这里。不过菜单画得比CMenu好看多了,因此很多人愿意使用它。如何使用大家MSDN就是了。 但是,假如你觉得不想创建一个CContextMenuManager类来管理你的菜单。其实,还有一个方法:CWinAppEx还有这么一个方法,CContextMenuManager类型,你想增加菜单的话,theApp.GetContextMenuManager()->AddMe 阅读全文
posted @ 2011-08-15 11:26 心随灵动 阅读(2561) 评论(0) 推荐(0)
摘要: Linux内核源码目录结构代码目录结构在阅读源码之前,还应知道Linux内核源码的整体分布情况。现代的操作系统一般由进程管理、内存管理、文件系统、驱动程序和网络等组成。Linux内核源码的各个目录大致与此相对应,其组成如下(假设相对于Linux-2.4.23目录):arch目录包括了所有和体系结构相关的核心代码。它下面的每一个子目录都代表一种Linux支持的体系结构,例如i386就是Intel CPU及与之相兼容体系结构的子目录。PC机一般都基于此目录。include目录包括编译核心所需要的大部分头文件,例如与平台无关的头文件在include/linux子目录下。init目录包含核心的初始化代 阅读全文
posted @ 2011-08-11 22:37 心随灵动 阅读(4551) 评论(0) 推荐(1)
摘要: sqlliteExpert下载http://www.sqliteexpert.com/download.html3Technorati 标签:c#+SqlLite注意事项:1、 ADO.NET Provider For SQLite 1.0.66版并不支持VS2005、只能在VS2008上用,使用VS2005的请用旧版。其中安装目录下WM的dll需要把dll和lib文件名中的066去掉,否则在WM上不能使用。2、SQLite的图形UI最好用SQLite Expert Personal,免费的,只不过英文版,支持UTF-8,不会乱码。sqliteadmin虽然支持中文界面,但数据容易乱码(不支持 阅读全文
posted @ 2011-08-10 11:46 心随灵动 阅读(2976) 评论(0) 推荐(0)
摘要: 默认情况下,窗口是不响应WM_MOUSELEAVE和WM_MOUSEHOVER消息的,所以要使用_TrackMouseEvent函数来激活这两个消息。调用这个函数后,当鼠标在指定窗口上停留超过一定时间或离开窗口后,该函数会Post这两个消息到指定窗口。使用方法:1.在窗口类中定义一个变量来标识是否追踪当前鼠标状态,之所以要这样定义是要避免鼠标已经在窗体之上时,一移动鼠标就不断重复产生WM_MOUSEHOVER。BOOL _bMouseTrack=TRUE;2.在OnMouseMove中调用_TrackMouseEvent函数if (_bMouseTrack)//若允许追踪,则。{TRACKMO 阅读全文
posted @ 2011-08-08 21:52 心随灵动 阅读(360) 评论(0) 推荐(0)
摘要: 方法一:/*创建全局互斥体,然后在进程启动时检查该互斥体是否已被创建只需要在InitInstance()中加入*/::CreateMutex(NULL, FALSE, "MyAPP");/*创建一个互斥体*/if(ERROR_ALREADY_EXISTS == GetLastError()){ AfxMessageBox("Already run!"); return FALSE;}方法二:一个程序可以运行多个实例(进程),那我们如何让它仅运行一个实例呢?很简单,使用#pragma编译器指令在进程的地址空间内创建一个“共享节”就可以 达到目的,这个“共享 阅读全文
posted @ 2011-08-08 11:57 心随灵动 阅读(921) 评论(0) 推荐(0)
摘要: 转载自:http://blog.sina.com.cn/s/blog_56eda66b0100073j.html1、DirectX是什么DirectX(简称:DX)是微软推出的一套基于Windows系统的多媒体应用程式接口APIs函式。在开发中,DX分为两个部分,一个是运行库,通过DX编译出来的程式必须要有运行库的支持,另外一个是开发库,也就是常说的SDK,这部分是在编译DX程序中是必需的。DirectX是一种图形应用程序接口(API),简单的说它是一个辅助软件,一个提高系统性能的加速软件,微软创建开发的。他的意思不难理解,Direct是直接的意思,X是很多东西,加在一起就是一组具有共性的东西 阅读全文
posted @ 2011-08-04 17:25 心随灵动 阅读(2094) 评论(0) 推荐(0)
摘要: C++调用约定和名字约定调用约定:__cdecl __fastcall与 __stdcall,三者都是调用约定(Calling convention),它决定以下内容:1)函数参数的压栈顺序,2)由调用者还是被调用者把参数弹出栈,3)以及产生函数修饰名的方法。1、__stdcall调用约定:函数的参数自右向左通过栈传递,被调用的函数在返回前清理传送参数的内存栈,2、__cdecl是C和C++程序的缺省调用方式。每一个调用它的函数都包含清空堆栈的代码,所以产生的可执行文件大小会比调用_stdcall函数的大。函数采用从右到左的压栈方式。注意:对于可变参数的成员函数,始终使用__cdecl的转换方 阅读全文
posted @ 2011-07-28 16:45 心随灵动 阅读(1216) 评论(0) 推荐(0)
摘要: 什么是ANSI,什么又是UNICODE呢?其实这是两种不同的编码方式标准,ANSI中的字符采用 8bit,而UNICODE中的字符采用16bit。(对于字符来说ANSI以单字节存放英文字符,以双字节存放中文等字符,而Unicode下,英文和 中文的字符都以双字节存放)Unicode码也是一种国际标准编码,采用二个字节编码,与ANSI码不兼容。目前,在网络、Windows系统和很多大型 软件中得到应用。8bit的ANSI编码只能表示256种字符,表示26个英文字母是绰绰有余的,但是表示汉字,韩国语等有着成千上万个字符的非西方字符 肯定就不够了,正是如此才引入了UNICODE标准。 在软件开发中, 阅读全文
posted @ 2011-07-28 16:15 心随灵动 阅读(575) 评论(0) 推荐(0)
摘要: 前段时间为了一个项目而把VS2008换成了VS2010,结果原本就不堪重负的本本跑起VS2010来那更是慢得没话说,于是看了遍VS2010选项,又从网上到处找资料找优化方法,总算使我的VS2010跑得快了些。一、VS2010选项视觉体验设置工具->选项->环境视觉体验的勾选都去掉。不解释,你懂得。二、禁用Intellisense工具->选项->文本编辑器->C/C++->高级禁用IntelliSense设为True这个功能很好用。相较于Visual Assist X,Intellisence结果更加准确,但活动也更加频繁,项目一庞大时修改头起来就会使VS变得 阅读全文
posted @ 2011-07-28 14:20 心随灵动 阅读(723) 评论(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 心随灵动 阅读(1774) 评论(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 心随灵动 阅读(1108) 评论(0) 推荐(0)
摘要: 首先我想大家应该先明白“壳”的概念。在自然界中,我想大家对壳这东西应该都不会陌生了,植物用它来保护种子,动物用它来保护身体等等。同样,在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。就像动植物的壳一般都是在身体外面一样理所当然(但后来也出现了所谓的“壳中带籽”的壳)。由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,大家就把这样的程序称为“壳”了。就像计算机病毒和自然界的病毒一样,其实都是命名上的方法罢了。 最早提出“壳”这个概念的,据我所知,应该是当年推出脱壳软件 RCOPY 3 的作者熊 阅读全文
posted @ 2011-07-27 20:18 心随灵动 阅读(1331) 评论(0) 推荐(0)
摘要: 一、基本概念1 比特率:表示经过编码(压缩)后的音频数据每秒钟需要用多少个比特来表示,单位常为kbps。2 响度和强度:声音的主观属性响度表示的是一个声音听来有多响的程度。响度主要随声音的强度而变化,但也受频率的影响。总的说,中频纯音听来比低频和高频纯音响一些。3 采样和采样率:采样是把连续的时间信号,变成离散的数字信号。采样率是指每秒钟采集多少个样本。Nyquist采样定律:采样率大于或等于连续信号最高频率分量的2倍时,采样信号可以用来完美重构原始连续信号。二、常见音频格式1. WAV格式,是微软公司开发的一种声音文件格式,也叫波形声音文件,是最早的数字音频格式,被Windows平台及其应用 阅读全文
posted @ 2011-07-25 20:28 心随灵动 阅读(2734) 评论(0) 推荐(0)
摘要: PCM文件:模拟音频信号经模数转换(A/D变换)直接形成的二进制序列,该文件没有附加的文件头和文件结束标志。Windows的Convert工具可以把PCM音频格式的文件转换成Microsoft的WAV格式的文件。脉冲编码调制PCM文件格式简介将音频数字化,其实就是将声音数字化。最常见的方式是透过脉冲编码调制PCM(Pulse Code Modulation) 。运作原理如下。首先我们考虑声音经过麦克风,转换成一连串电压变化的信号,如图一所示。这张图的横座标为秒,纵座标为电压大小。要将这样的信号转为 PCM 格式的方法,是使用三个参数来表示声音,它们是:声道数、采样位数和采样频率。采样频率即取样 阅读全文
posted @ 2011-07-25 20:19 心随灵动 阅读(1064) 评论(0) 推荐(1)
摘要: 在VOIP的音频算法中,回音处理已经成为一个关系通话质量的主要问题。回声的产生在IP网络主要有两种:1.声学回声2.电路回声声学回声主要又分成以下几种:a ) 直接回声:由扬声器产生的声音未经任何反射直接进入麦克风b ) 间接回声: 由扬声器发出的声音经过多次反射后,再进入Mic对于第二种回声,拥有多路径,时变性的特点.是比较难处理的.由于IP网络下的传输的延迟较大,而一般情况下,对于人耳,如果声音延迟达到了10ms以上的话,那么回声就会越来越明显.一般来讲,VOIP中的声音延迟主要来自于几个方面:1. 编码延迟: 一般情况下编码算法在声音压缩时都会产生延迟,就我们采用的Speex来讲,延迟大 阅读全文
posted @ 2011-07-21 22:08 心随灵动 阅读(1739) 评论(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 心随灵动 阅读(4061) 评论(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 心随灵动 阅读(3479) 评论(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 心随灵动 阅读(2191) 评论(0) 推荐(0)
摘要: Speex是近年来开发出的一套功能强大的语音引擎,能够实现高质量和低比特率的编码。它不仅提供了基于码激励线性预测(CELP)算法的编/解码模块,而且在其最新发布的版本中还提供了声音预处理和声学回声消除模块,为保障IP网络中的语音通信质量提供了技术手段。此外,Speex还具有压缩后的比特率低(2~44 kbps)的特点,并支持多种比特率。这些特点使得Speex特别适合VoIP的系统。虽然是开源的,但是使用的人还不是很多,网上的资料也很少,下面简单给大家介绍一下如何使用speex的API。一:编码流程使用Speex的API函数对音频数据进行压缩编码要经过如下步骤:1、定义一个SpeexBits类型 阅读全文
posted @ 2011-07-21 10:29 心随灵动 阅读(6405) 评论(1) 推荐(0)
摘要: 一、波形声音 波形声音就是通过计算机的声音采集设备将现实世界当中的声波通过模数转化之后用数字的方式表示声音波形的一种声音储存方案。在播放声音的时候声卡将以数字储存的声音波形信号转换为一系列的电流信号。 声音的采集过程当中涉及到两个术语:采样率表示声音采集设备每秒钟采集声音信号的次数,一般有44.1KHZ、22.05KHZ等等;样化位数表示每次采样得到的声音信号用多少位来表示。在声音的采样当中采样率和样化位数越高声音的质量就越高。在windows程序设计当中,波形声音的采集和回放有两种方式来实现:一种是使用一系列底层的函数调用来实现;另一种是使用MCI接口来实现。我们首先介绍底层函数的使用。1. 阅读全文
posted @ 2011-07-20 10:49 心随灵动 阅读(1173) 评论(0) 推荐(0)
摘要: 随着计算机网络的日益普及,人们通过网络进行交流显得越来越重要,于是出现了一系列语音通信的软件,比如NetMeeting、IPPhone、MediaRing以及VoxPhone等等,但这些软件都功能完善、相对独立,不利于集成到自己开发的软件中,有时我们也希望将这种语音通信功能集成到自己的软件中,尤其当一个单位的局域网用户分散在不同的房间时。本文给出一种灵活、简单的实现方法,采用基于对话框的方式编程,硬件上只需要一块双DMA通道的声卡(目前的声卡大多支持双DMA通道)和一支耳麦,其余全部由软件编程实现。程序在 Windows98/2000、Visual C++6.0 下编译通过,在Windows 阅读全文
posted @ 2011-07-20 08:59 心随灵动 阅读(1159) 评论(2) 推荐(0)
摘要: 基于API的录音机程序作者/栾义明一、数字音频基础知识Fourier级数:任何周期的波形可以分解成多个正弦波,这些正弦波的频率都是整数倍。级数中其他正线波的频率是基础频率的整数倍。基础频率称为一级谐波。PCM:pulse code modulation,脉冲编码调制,即对波形按照固定周期频率采样。为了保证采样后数据质量,采样频率必须是样本声音最高频率的两倍,这就是Nyquist频率。样本大小:采样后用于存储振幅级的位数,实际就是脉冲编码的阶梯数,位数越大表明精度越高,这一点学过数字逻辑电路的应该清楚。声音强度:波形振幅的平方。两个声音强度上的差常以分贝(db)为单位来度量,计算公式如下:20* 阅读全文
posted @ 2011-07-19 09:03 心随灵动 阅读(561) 评论(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 心随灵动 阅读(2311) 评论(0) 推荐(0)
上一页 1 ··· 5 6 7 8 9 10 11 12 13 下一页