为HTK添加MP3输入格式支持

HTK作为一个很好的语音分析工具,但是缺少MP3文件作为输入源的支持,在网上找了一些自己需要的语音素材多是MP3格式的,每一个文件都要做WAV格式转化,既耗时间又耗存储空间。
有没有办法直接让HTK直接支持MP3文件的读入呢?经过分析,发现只要对hwav.c中的OpenWavInput函数做修改就可以完成这个想法。
找到关键点,等空闲再研究处理一下。

Popularity: 5% [?]

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: 2% [?]

Related

用VC编译libMPG123库

首先从http://mpg123.org/ 下载最新的源码包,解压后得到如下目录结构
libMPG123目录结构
将src/libmpg123目录下的全部文件拷贝到ports/MSVC++/libMPG123目录下。

打开VS装入libMPG123.vcproj工程文件,按 “生成” 按钮,编译提示 mpg123.h, config.h 文件找不到。查找原始的src文件目录下确实没有这两个文件,但是有mpg123.h.in, config.h.in 两个文件,用记事本打开查看就是c的代码文件,于是将他们拷贝过来后然后去掉后面的 .in 扩展名,编辑 mpg123.h 将前面的

@INCLUDE_STDLIB_H@
@INCLUDE_SYS_TYPE_H@

两行替换为

#include <stdlib.h>
#include <sys/types.h>

再进行编译,提示

libmpg123\mpg123.h(732) : error C2081: “ssize_t”: 形参表中的名称非法

网上搜了一把原来是 VC 中没有ssize_t这个类型定义,于是按照config.h最后面的提示在mpg123.h 中添加如下一个类型定义

#ifdef _MSC_VER
typedef long ssize_t;
#endif

再次编译,还是提示出错,主要是在 mpg123lib_intern.h中提示有一些引入的 .h 文件找不到,找到相对应的错误行可以看到是由一个 #ifdef 定义的开关来做引入库定义的,通过查找发现这些名称是在 config.h 中定义的,记下名称,到config.h 中将对应该名称的 #define 语句注释掉。
再次重新编译,还是失败,分析发现是由于一个ALIGNED(16) 的宏造成的。通过在工程中查找ALIGNED,发现
他是在 config.h 文件中通过

#define CCALIGN 1

来控制使用ALIGNED的,可以将其注释掉,或者在optimize.h中将ALIGNED(a)的宏定义由

#ifdef CCALIGN
#define ALIGNED(a) __attribute__((aligned(a)))
#else
#define ALIGNED(a)
#endif

修改为


#ifdef CCALIGN
#ifdef _MSC_VER
#define ALIGNED(a) __declspec(align(a))
#else
#define ALIGNED(a) __attribute__((aligned(a)))
#endif
#else
#define ALIGNED(a)
#endif

再重新编译,没有新的error 出来,编译通过。
编译工作到此结束,以后就可以通过VC来试验用libMPG123来进行mp3解码了。

附:网上一篇文章,gcc和VC编译器的一些差异

http://www.mathmagic.cn/bbs/read.php?tid=7145

Popularity: 3% [?]

Related