⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 将指定的16K采样的语音数据文件转换为经G.723编解码后的8K语音数据
💻 CPP
字号:
/*************************************************************************
 Program: 16kto8k
 Function: Convert 16k sample speech data to 8k sample data 
 Usage: arg[0] Input_Dir Output_Dir
 Finish time: 2002.10.25
**************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <direct.h>

#include "ConvertToG723Data.h"

int main(int argc, char ** argv)
{
	long i;
	char str[_MAX_FNAME];

	char File_dirtxt[_MAX_PATH], Dir_Current[_MAX_PATH];
	char Dir_SpeechIn[_MAX_PATH], Dir_SpeechOut[_MAX_PATH];
	char FileName_SpeechIn[_MAX_PATH], FileName_SpeechOut[_MAX_PATH];
	FILE *fp_dirtxt = NULL, *fp_SpeechIn = NULL, *fp_SpeechOut = NULL;
	short SpeechFileNum;
	bool bFOpenNoError = true;//文件打开是否有错
	
	sprintf( File_dirtxt, "%s\\dir.txt", argv[1] );//从dir.txt中得到需要处理的语音文件名和数目
	strcpy( Dir_SpeechIn, argv[1]);//命令行第一个参数是输入语音所在的目录
	strcpy( Dir_SpeechOut, argv[2]);//命令行第二个参数是输出语音所在的目录

	_getcwd( Dir_Current, _MAX_PATH );//得到当前命令 argv[0] 所在目录

	fp_dirtxt = fopen( File_dirtxt,"rt" );
	if( fp_dirtxt == NULL ){
		perror("File open error: dir.txt\n");
		exit(1);
	}
	fscanf( fp_dirtxt, "%d", &SpeechFileNum);//语音文件数
	for( i = 0; i < SpeechFileNum; i++ ){
		fscanf( fp_dirtxt, "%s", str );//语音文件名
		sprintf( FileName_SpeechIn, "%s\\%s", Dir_SpeechIn, str );
		sprintf( FileName_SpeechOut, "%s\\8k_%s", Dir_SpeechOut, str );

		fp_SpeechIn = fopen( FileName_SpeechIn, "rb");
		if( fp_SpeechIn == NULL ){
			perror("File open error: speech data IN file\n");
			bFOpenNoError = false;
			break;
		}

		fp_SpeechOut = fopen( FileName_SpeechOut, "wb");
		if( fp_SpeechOut == NULL ){
			perror("File open error: speech data OUT file\n");
			bFOpenNoError = false;
			break;
		}
		
		//开始转换数据:原始语音16k->8k之后
		printf("\n当前处理文件:%s\n", str);
		ConvertToG723Data( fp_SpeechIn, fp_SpeechOut, Dir_Current);

		fclose( fp_SpeechIn );
		fclose( fp_SpeechOut );
	}

	fclose( fp_dirtxt );

	if( bFOpenNoError )
		return 0;
	else
		return 1;
}


/*16kto8k 使用方法:

命令功能:将16k采样16bit short型语音数据转换为 8k采样16bit short型
作者:茹海波
完成日期:2002.10.25

1.使用命令 16kto8k 前的准备

(1)进入需要转换的语音所在的目录,该目录下都是原始语音,16k采样,16bit。

如:cd F:\WorkInLab\Porject\监听\采集数据\茹海波

如果此时使用dir,显示以下结果:
 驱动器 F 中的卷是 DATA
 卷的序列号是 643B-9A08

 F:\WorkInLab\Porject\监听\采集数据\茹海波 的目录

2002-04-09  08:51       <DIR>          .
2002-04-09  08:51       <DIR>          ..
2002-04-09  08:44            6,165,528 M_茹海波_关键词表.dat
2002-04-09  08:44                1,759 M_茹海波_关键词表.py
2002-04-09  08:44            7,881,752 M_茹海波_句子表1.dat
2002-04-09  08:44                5,453 M_茹海波_句子表1.py
2002-04-09  08:44            1,519,832 M_茹海波_句子表2.dat
2002-04-09  08:44                  589 M_茹海波_句子表2.py
2002-04-09  08:44              860,480 M_茹海波_人名表.dat
2002-04-09  08:44                  344 M_茹海波_人名表.py
               9 个文件     16,435,828 字节
               2 个目录  5,985,124,352 可用字节

(2)使用dir命令,将原始语音的文件名输入到文本文件:dir.txt。选择合适的命令开关可以使无用的垃圾信息不必输入到文本文件。

如:dir *.dat /b/on > dir.txt

结果在dir.txt中的内容是:

M_茹海波_关键词表.dat
M_茹海波_句子表1.dat
M_茹海波_句子表2.dat
M_茹海波_人名表.dat

(3)用文本编辑器修改dir.txt,在第一行写上dir.txt中文件名的个数,并保证每个文件名占据一行。

2. 16kto8k 命令的使用方法

16kto8k 文件dir.txt所在目录 转换后语音文件的存储目录

如:16kto8k F:\WorkInLab\Porject\监听\采集数据\茹海波 F:\WorkInLab\UnderWin2k\16kto8k\SpeechOut

注:(1)dir.txt所在目录应该是dir.txt中的文件所在的目录
    (2)运行 16kto8k 时请加上正确的路径

*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -