为HTK添加wav文件采样速率自动转化功能
用HTK处理声音文件分析很好用,可是有时声音文件是重别的地方拿来的,为了和自己期望使用文件采样率一致,经常要手工做声音文件的频率转化,比较麻烦,有没有办法为htk添加一下功能,让其在读入音频数据的时候自动做目标采样率的转化呢?
分析htk的一些相关代码,发现本想法是可行的。
改动点在 HWav.c 文件中。主要是修改 OpenWavInput 和 ConvertWAVData两个方法的实现。
1. 在OpenWavInput函数中,在给 *sampPeriod 赋值那段代码前,先用一个变量记录 原先的采样率。这样就有了从配置参数中读入的目标采样率可原始文件中读入的采样率了。
2. 为ConvertWavData再添加一个原始采样率的参数,在函数Stero转化后,return前做采样率的比较,如果不一致,则做读入数据的采样率转化
3. 在OpenWavInput函数中使用 ConvertWavData 的地方将前面记录的原始采样率传递进去。
到此,HTK在读入Wav文件时就会自动做采样率的转换了,不用担心拿来的wav文件采样率和期望的不一致而手工在外面对音频文件做预处理式的采样速率转化了。 比如更改代码编译后为HTK设置 源的速率为 625 (16khz) 这样无论实际读入的wav文件是8khz,11khz还是44.1khz,在HTK读入文件后正式处理前都会自动转化为16khz的采样率做处理,免去了自己在外部对声音文件采样率的预处理。
Popularity: 44% [?]
Related
常见MySQL数据库备份工具和备份方式比较
原文 Hands on MySQL Backup & Migration
本文在原文的基础上稍有删减。
用以备份的工具
1. mysqldump
http://dev.mysql.com/doc/refman/5.0/en/mysqldump.html
2. mysqlhotcopy
http://dev.mysql.com/doc/refman/5.0/en/mysqlhotcopy.html
3.mysqlsnapshot
http://jeremy.zawodny.com/mysql/mysqlsnapshot/
4.ibbackup
http://www.innodb.com/hot-backup/order/
联机备份 .VS. 脱机备份
联机备份通常使用在不能接受数据库停机的情况下,一般来说,脱机备份速度快,并且发生错误的几率少,我们不用担心数据库正在执行事务,锁表等容易发生一致性问题的发生。如果你幸运的可以停下数据库或者有一个主从方式的数据库,请使用脱机方式备份。
Data Dump vs Raw backups
Data dump 输出一系列SQL 语句序列,可以在后来用来重新创建数据库的结构并恢复数据。mysqldump 是这个领域的首选工具,他可以用在任意类型的表上面,无论是本地的还是网络的。当然,由于要产生很多额外的SQL语句,导出结果将是一个很大的文件并且占用很多CPU资源,最重要的是,当数据恢复后需要一次完全的索引重建。
更有效率的方法是是对MySQL数据库的物理文件做一次快照(snapshot)。因为我们跳过了很多转化步骤,因此处理起来比较高效。 做一个MyISM数据表的备份只要拷贝磁盘上数据文件和索引文件。对InnoDB,需要备份对应表空间和关联的事务日志。
mysqldump / mysqlhotcopy / mysqlsnapshot / ibbackup
mysqldump - (online, dump) - 最一般的工具,他会通过锁表的方式从一个联机数据库中做数据导出并写到指定的文件中(磁盘或网络上)。他只适合小的数据库。
# typical mysql dump backup and restore usage mysqldump -u root -pPassword -x –all-databases > db_dump.sql mysql -u root -pPassword < db_dump.sql # dump into ‘backup’ folder (local machine), into two text files <data, table_structure> mysqldump -T backup –fields-terminated-by=’,’ database-name -u root -pPassword # compress the dumped data on the fly mysqldump -u root -pPassword –all-databases | bzip2 -c > db_dump.bz2
mysqlhotcopy - (online, raw) 将对由 ISAM或MyISAM 表构成的数据库做一个完全的物理备份。他的操作方式:对所有表获取一个只读锁=>做文件拷贝=>释放锁。
# perform an online backup into /backup/location mysqlhotcopy -u root -p password database_name /backup/location
mysqlsnapshot - (online, raw) 一个非常好的工具用来在联机方式下获得MySQL数据库的一个快照。可以配置它来压缩数据,并/或 为每一个数据库提供一个分离的tar文件。 不过他只适合 MyISAM 类型数据库。
# save a full database snapshot of an online database into /backup/location mysqlsnapshot -u root -pPassword -s /backup/location # restore a snapshot tar -xvf /backup/location/db.tar
ibbackup - (online, raw) 可以对使用InnoDB和MyISAM表的任何数据库做联机备份。是一个很好的工具就是要收费.当然如果你是一个InnoDB的用户,还是值得花钱购买的。
# perform online backup of MyISAM / InnoDB tables ibbackup /etc/my.cnf /etc/ibbackup.cnf # restore recent backup (as configured in ibbackup.cnf) ibbackup –restore /etc/ibbackup.cnf
cp, scp, nc - (offline, raw) 如果你可以停下数据库,则可以使用这几个工具直接拷贝数据库目录下的文件。是获取数据库快照的最安全方法。
Popularity: 37% [?]
Related
June 20, 2008 | Filed Under MySQL | 2 Comments
MySQL性能优化工作小结
1. 首先将数据库的慢查询日志功能打开,修改 my.conf
long_query_time=1
log-slow-queries=/var/log/mysqld_slow.log
log-queries-not-using-indexes
2. 运行tuning-primer.sh脚本查看数据库状态。
在数据库运行一段时间后(两天以上)首先使用tuning-primer.sh脚本, 查看一下my.conf中的配置参数设置,按照运行结果的建议做一下my.conf的参数调整。(http://www.day32.com/MySQL/)
3. 使用 mysqlreport 脚本做定期分析,持续观察DB的运行状况
检验每次参数变化后是否起作用(一些数据要在参数变化后运行两天以上捕捉到的结果和变化之前做比较才有价值),具体的分析结果所代表的含义网上有介绍( http://hackmysql.com/)
4. 查看 http://www.mysqlperformanceblog.com/tools/ 的一些资源,做数据库服务器的性能辅助分析,并可以看 http://www.mysqlperformanceblog.com上一些性能调优方面的讨论,针对自己的情况做具体取舍。
5. 根据慢查询日志分析存在问题的SQL,针对性的做SQL和业务逻辑的优化处理
- 通过 mysqlslowdump
-s 排序,c,t,l,r分别按照query次数,时间,lock的时间和返回的记录数来排序,前面添加a便是倒序
-t 是top n 的意思,即是返回前面多少条数据
-g 后面可以写一个正则表达式,大小写不敏感
典型查询
mysqldumpslow –s c –t 20 host-slow.log
mysqldumpslow –s r –t 20 host-slow.log
mysqldumpslow –s t –t 10 –g “left join” host-slow.log
- 在mysql环境中通过explain sql 查看 查询语句的索引命中情况等,一些慢速的查询是由于没有使用到恰当的索引,通过添加调整索引可以得到很明显的速度提升
- explain extent sql 比explain更多一些关于sql查询的信息
6. 其他,对sql查询的一些语句书写准则(参考mysql手册第七章关于优化的章节)
mySQL的优化不是一步到位的,要持续观察改善,一部分优化可以通过服务器端的配置来得到(添加硬件,对系统的参数做优化) ,还有一部分要根据实际业务中使用的数据量和SQL来做分析,考虑换种SQL写法,换一个实现方法等,添加业务层的cache减少对数据库的访问等方式来得到增强。
Popularity: 24% [?]
Related
vc2005编译过程中出现 fatal error C1010解决方法
vc2005编译过程中出现 fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include “stdafx.h””?
解决办法
在解决方案资源管理器中右击文件,选择属性,配置属性=>c++=>预编译头右侧的“创建/使用预编译头”下拉列表框中选择”不使用预编译头“即可。
Popularity: 21% [?]
Random Posts
发现一个支持MySQL中文检索的开源全文检索引擎
发现一个支持中文的开源全文检索搜索引擎 http://www.coreseek.com/opensource/ ,是基于 sphinx 做了 中文化扩展, 按网站说明,其支持MySQL 数据源,可以达到 300kb/s 的中文切分速度,在2-4 GB的文本建立的索引上搜索,平均0.1秒内获得结果。
先关注一下,等最近的工作空闲下来,看看是否可以将其集成到公司的网站中,解决数据搜索问题。
Popularity: 25% [?]
Random Posts
快速打造Win下的Php+Mysql开发环境
快速打造自己的php+mysql开发环境。
一.打造服务端运行环境
选择http://www.fleaphp.org/的安装包,安装后包括了 apache + mysql + php 的集成环境。
假定安装后的路径为 D:\fleaphp-apmxe, 使用cmd方式运行 D:\fleaphp-apmxe\php5\php -ver 查看php版本。
1.为php添加xdebug模块
到 http://xdebug.org/ 下载对应版本的 xdebug 模块,拷贝到 D:\fleaphp-apmxe\php5目录下, 在 D:\fleaphp-apmxe 目录下创建文件夹 xdebug
在 D:\fleaphp-apmxe\etc\php.ini.template 文件中注释掉 [Zend] 设置,然后添加
[XDebug]
zend_extension_ts=”%APMXE%\php5\php_xdebug-2.0.3-5.2.5.dll”
xdebug.profiler_enable=on
xdebug.trace_output_dir=”%APMXE%\xdebug”
xdebug.profiler_output_dir=”%APMXE%\xdebug”
xdebug.profiler_output_name=”script”
到 http://sourceforge.net/projects/wincachegrind/ 下载WinCacheGrind方便以后打开 xdebug目录下的script文件分析php脚本执行性能。 附一篇介绍使用XDebug查找Php代码中问题的好文: http://www.ibm.com/developerworks/cn/opensource/os-php-xdebug/
2.修改apache的www路径为自己的文件路径
fleaphp的集成环境安装后默认是指向 D:\fleaphp-apmxe\htdocs 目录提供服务,我们自己使用其作为开发环境时基本不是这样。需要修改apache的配置文件设定自己的主工作路径和虚拟主机的名称。
在 D:\fleaphp-apmxe\etc\httpd.conf.template 文件的最后添加一个虚拟主机配置
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot d:\mysites\test
ServerName test.mysite.com
ErrorLog %APMXE%/var/logs/dummy-host.example.com-error_log
CustomLog %APMXE%/var/logs/dummy-host.example.com-access_log common
设定一个 test.mysite.com 的主机,指向 d:\mysites\test 的目录
可以到 www.phpmyadmin.net/下载一个phpMyAdmin做mysql的维护
3.修改本地hosts文件
修改 本地 %SYSTEMDIR%\drivers\etc\hosts文件,添加一行
127.0.0.1 test.mysite.com
4.重新启动fleaphp集成包的APM Express,使修改生效
在浏览器中输入 test.mysite.com 打开自己的目录
二.打造自己的浏览器
1. 下载 FireFox 安装
2. 为FireFox安装 FireBug 插件
3. 为FireFox安装Yahoo 的 YSlow插件
Popularity: 35% [?]
Related
June 18, 2008 | Filed Under LAMP | 1 Comment
Nignx配合Memcached提升400%性能(阅读笔记)
原始文章: http://www.igvita.com/2008/02/11/nginx-and-memcached-a-400-boost/
原文引用了 http://nubyonrails.com/articles/about-this-blog-memcached
和 http://blog.leetsoft.com/2007/5/22/the-secret-to-memcached
都是讲述怎样在Rails中使用memcached的(主要是key的设定方式和怎样对memcached的使用做类的包装)
文章在两篇引用文章的基础上直接将memcached的使用提升到url层,通过nginx对memcached的原生支持,讲述了一种利用url rewrite机制来直接将url请求地址作为key给memcached做处理,用以提升访问速度。
首先在编译 nginx 时要添加 memcached 模块编译,nginx 的 memcached 模块配置参数说明见 http://wiki.codemongers.com/NginxHttpMemcachedModule
文章讲述利用 url rewrite 机制来做key validate 的自动化处理,主要讲了一下url rewrite和mime type的配合问题。
本文启发
1.网站url地址要好规划,这样可以将不同类别的资源做分组,方便以后的统一处理,添加缓冲之类的。
2.怎样确定内容的修改频度,自动话的处理?如果是动态的对数据敏感新强的页面。
3.有没有方法可以在url层做validate time 的规范话处理(资源的更新频度,每小时,每天等等)。
Popularity: 53% [?]
Related
VC2005下编译DirectX出错问题解决
朋友介绍跨平台图形开发包SDL,下载下来在VC下编译进行编译,提示没有DirectXSDK,到M$网站上下载DirectXSDK,显示文件大小4xxMB, 被吓了回来,从别人机器上拷贝了DirectXSDK9.0的Include和Lib目录,只有2XMB, 汗,不知道M$是怎么做的文件,大小相差这么大。
添加相应的include路径到SDL编译环境中,重新编译,出现
….vc\platformsdk\include\winnt.h(222) : error C2061: 语法错误 : 标识符“PVOID64”
等问题。
使用google找到VS2005下编译DirectX程序时出现的类似编译问题,看到一位兄弟给了如下一种解释,觉得比较正确:
POINTER_64是一个宏,在64位编译下起作用,它包含在SDK目录下的BASETSD.H中(Microsoft Visual Studio 8\VC\PlatformSDK\Include\basetsd.h(23):#define POINTER_64 __ptr64),但DXSDK自己也带了一个basetsd.h,里面没有定义POINTER_64,从而导致出错。
解决方法1:
在Tools -> Options -> Projects and Solutions -> VC++ Directories -> Include Files里确保系统包含目录(以S打头的)在最前面,同时在 project properties下面的“C/C++ -> General”中确保“Additional Include Directories”为空(因为它会被优先编译,这样就轮不到VC\ PlatformSDK\Include\basetsd.h),所有的包含目录都应该在上面的include里面。这种方法不用改代码。
解决方法2:
在DXSDK自己的basetsd.h里自己定义#define POINTER_64 __ptr64
我采用了第二种方法。修改后,文件编译通过生成了期望的.lib库文件。
Popularity: 30% [?]
Related
VC下编译libMPG123(补)
前次用VC编译了libMPG123库,编译通过,但是没有进行例子程序编译测试。今天测试了一下用libMPG123做MP3到WAV的解码,结果编译器连接错误,提示找不到符号 _strcasecmp 和 _strncasecmp。使用google大法,发现VC没有strcasecmp和strncasecmp函数,只好为他做了一个补丁。
在.h文文件中添加如下声明:
#ifdef _MSC_VER
int strcasecmp(char *s1, char *s2);
int strncasecmp(char *s1, char *s2, register int n);
#endif
在.c文件中添加如下实现
#ifdef _MSC_VER
int strcasecmp(char *s1, char *s2)
{
while (toupper((unsigned char)*s1) == toupper((unsigned char)*s2++))
if (*s1++ == '') return 0;
return(toupper((unsigned char)*s1) - toupper((unsigned char)*--s2));
}
int strncasecmp(char *s1, char *s2, register int n)
{
while (--n >= 0 && toupper((unsigned char)*s1) == toupper((unsigned char)*s2++))
if (*s1++ == '') return 0;
return(n < 0 ? 0 : toupper((unsigned char)*s1) - toupper((unsigned char)*--s2));
}
#endif
编译连接通过。
Popularity: 28% [?]
Related
ExtMail管理员密码恢复
今天需要使用邮件服务器的管理员账号添加几个转发地址,不过突然发现很久没有用的管理员密码忘记了,存放密码的文件也找不到了,一个字惨。在经过几次尝试后没有办法,寻找恢复密码的方法。
公司使用的ExtMail邮箱服务器包,经过一翻分析后发现可以使用如下的一些方法做管理员密码恢复。
- 1. 编辑 MgrApp.pm
将密码判断部分先去掉,直接以任意密码登陆
sub login函数中
if ($a->auth($user, $pass)) {
修改为
if (1) {
这样可以用任意密码登陆,登陆后将密码修改后不要忘记将这段代码修改回来,要不然可是要出问题的哦…
- 2.修改数据库中manager表的记录值
找到 ExtMail 的初始 init.sql 看到有密码 extmail*123* 的密码加密串值为 $1$BrT9qxfB$Ha81Mb5YVV6rNKNN5jmtj1
使用SQL自己修改数据库记录
update manager set password = ‘$1$BrT9qxfB$Ha81Mb5YVV6rNKNN5jmtj1′ where username = ‘admin’;
将密码复位为 extmail*123* 登陆后修改密码
Popularity: 37% [?]
