375 lines
4.6 KiB
C++
375 lines
4.6 KiB
C++
//---------------------------------------------------------------------------
|
|
|
|
#pragma hdrstop
|
|
|
|
#include "Instruments.h"
|
|
//---------------------------------------------------------------------------
|
|
#pragma package(smart_init)
|
|
|
|
char *GM_GROUP[] = {
|
|
"钢琴",
|
|
"音阶打击乐器",
|
|
"风琴",
|
|
"吉他",
|
|
"贝司",
|
|
"弦乐",
|
|
"合奏/合唱",
|
|
"铜管",
|
|
"簧管",
|
|
"木管",
|
|
"合成主音",
|
|
"合成背景",
|
|
"合成效果",
|
|
"民间乐器",
|
|
"打击乐器",
|
|
"声音效果"
|
|
};
|
|
|
|
char * GM_INSTRUMENT[] = {
|
|
//钢琴组
|
|
"大钢琴"
|
|
,"明亮钢琴"
|
|
,"电钢琴"
|
|
,"酒吧钢琴"
|
|
,"柔和电钢琴"
|
|
,"合唱电钢琴"
|
|
,"拨弦古钢琴"
|
|
,"击弦古钢琴"
|
|
|
|
//打击乐器组
|
|
,"钢片琴"
|
|
,"钟琴"
|
|
,"八音盒"
|
|
,"颤音琴"
|
|
,"马林巴"
|
|
,"木琴"
|
|
,"管钟"
|
|
,"杨琴"
|
|
|
|
//风琴组
|
|
,"击杆风琴"
|
|
,"打击式风琴"
|
|
,"摇滚风琴"
|
|
,"教堂风琴"
|
|
,"簧管风琴"
|
|
,"手风琴"
|
|
,"口琴"
|
|
,"探戈手风琴"
|
|
|
|
//吉他组
|
|
,"尼龙弦吉他"
|
|
,"钢弦吉他"
|
|
,"爵士电吉他"
|
|
,"清音电吉他"
|
|
,"闷音电吉他"
|
|
,"过激电吉他"
|
|
,"失真电吉他"
|
|
,"吉他泛音"
|
|
|
|
//贝司组
|
|
,"原音贝司"
|
|
,"指弹电贝司"
|
|
,"拨片电贝司"
|
|
,"无品贝司"
|
|
,"掌击贝司1"
|
|
,"掌击贝司2"
|
|
,"合成贝司1"
|
|
,"合成贝司2"
|
|
|
|
//提琴组
|
|
,"小提琴"
|
|
,"中提琴"
|
|
,"大提琴"
|
|
,"低音大提琴"
|
|
,"颤音弦乐组"
|
|
,"拨奏弦乐组"
|
|
,"竖琴"
|
|
,"定音鼓"
|
|
|
|
//合奏/合唱组
|
|
,"弦乐合奏1"
|
|
,"弦乐合奏2"
|
|
,"合成弦乐合奏1"
|
|
,"合成弦乐合奏2"
|
|
,"人声合唱(啊)"
|
|
,"人声合唱(嘟)"
|
|
,"合成人声"
|
|
,"管弦乐齐奏"
|
|
|
|
//铜管乐器组
|
|
,"小号"
|
|
,"长号"
|
|
,"大号"
|
|
,"弱音小号"
|
|
,"圆号"
|
|
,"铜管组"
|
|
,"合成铜管1"
|
|
,"合成铜管2"
|
|
|
|
//簧片乐器组
|
|
,"高音萨克斯"
|
|
,"中音萨克斯"
|
|
,"次中音萨克斯"
|
|
,"低音萨克斯"
|
|
,"双簧管"
|
|
,"英国管"
|
|
,"巴松(大管)"
|
|
,"单簧管(黑管)"
|
|
|
|
//木管乐器组
|
|
,"短笛"
|
|
,"长笛"
|
|
,"竖笛"
|
|
,"排箫"
|
|
,"吹瓶"
|
|
,"日本尺八"
|
|
,"口哨声"
|
|
,"陶笛(洋埙)"
|
|
|
|
//合成主音组
|
|
,"合成主音1(方波)"
|
|
,"合成主音2(锯齿波)"
|
|
,"合成主音3"
|
|
,"合成主音4"
|
|
,"合成主音5"
|
|
,"合成主音6(人声)"
|
|
,"合成主音7(平行五度)"
|
|
,"合成主音8(贝司与主音)"
|
|
|
|
//合成背景组
|
|
,"合成背景1(新时代)"
|
|
,"合成背景2(温暖)"
|
|
,"合成背景3"
|
|
,"合成背景4(合唱)"
|
|
,"合成背景5(弓弦)"
|
|
,"合成背景6(金属)"
|
|
,"合成背景7(光环)"
|
|
,"合成背景8"
|
|
|
|
//合成效果组
|
|
,"效果(雨声)"
|
|
,"效果(音轨)"
|
|
,"效果(水晶)"
|
|
,"效果(大气)"
|
|
,"效果(明亮)"
|
|
,"效果(诡异)"
|
|
,"效果(回声)"
|
|
,"效果(科幻)"
|
|
|
|
//民族乐器组
|
|
,"西塔尔"
|
|
,"班卓琴"
|
|
,"三昧线"
|
|
,"十三弦筝"
|
|
,"卡林巴"
|
|
,"风笛"
|
|
,"民族提琴"
|
|
,"山奈"
|
|
|
|
//打击乐器组
|
|
,"叮当铃"
|
|
,"阿果果"
|
|
,"钢鼓"
|
|
,"木鱼"
|
|
,"太鼓"
|
|
,"通通鼓"
|
|
,"合成鼓"
|
|
,"钢钹"
|
|
|
|
//特殊音效组
|
|
,"吉他换把杂音"
|
|
,"呼吸声"
|
|
,"海浪声"
|
|
,"鸟鸣"
|
|
,"电话铃"
|
|
,"直升飞机"
|
|
,"鼓掌声"
|
|
,"枪声"
|
|
};
|
|
|
|
char * LSZ_STYLTYPES[24] =
|
|
{
|
|
"流行",
|
|
"民谣",
|
|
"摇滚",
|
|
"舞曲",
|
|
"爵士",
|
|
"蓝调",
|
|
"桑巴",
|
|
"古典",
|
|
"圆舞曲",
|
|
"独立",
|
|
"乡村",
|
|
"R&B",
|
|
"电子",
|
|
"小夜曲",
|
|
"进行曲",
|
|
"叙事曲",
|
|
"说唱",
|
|
"拉丁",
|
|
"曼波",
|
|
"雷鬼",
|
|
"萨尔萨",
|
|
"摇摆",
|
|
"波萨",
|
|
"FUNKY"
|
|
} ;
|
|
|
|
char * CNS_INSTRUMENT[] = {
|
|
//吹奏类
|
|
"",
|
|
"大唢呐",
|
|
"小唢呐",
|
|
"高笙",
|
|
"曲笛",
|
|
"曲笛2",
|
|
"梆笛",
|
|
"梆笛2",
|
|
"巴乌",
|
|
|
|
//弦乐类
|
|
"二胡",
|
|
"高胡",
|
|
"京胡",
|
|
"板胡",
|
|
|
|
//弹奏类
|
|
"琵琶1",
|
|
"琵琶2",
|
|
"阮",
|
|
"三弦",
|
|
"扬琴",
|
|
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
|
|
//打击乐
|
|
"朝鲜鼓",
|
|
"大鼓",
|
|
"大鼓1",
|
|
"大鼓2",
|
|
"打击乐",
|
|
"大锣",
|
|
"风锣",
|
|
"京戏",
|
|
"锣",
|
|
"铙钹镲",
|
|
"排鼓",
|
|
"声波",
|
|
"象脚鼓",
|
|
"编磬",
|
|
"编钟"
|
|
};
|
|
|
|
FONTINFO::FONTINFO()
|
|
{
|
|
memset( this, 0, sizeof(FONTINFO) );
|
|
}
|
|
|
|
FONTINFO::FONTINFO( char* strFile, char* strFont, int nInst, FONTPRESET* setInst,
|
|
int nDrum, FONTPRESET* setDrum )
|
|
{
|
|
strcpy(strFileName, strFile);
|
|
|
|
if( strlen(strFont) > 0 )
|
|
strcpy(strFontName, strFont);
|
|
else{
|
|
char *name = strrchr( strFile, '\\' )+1,
|
|
*ext = strrchr( strFile, '.' );
|
|
|
|
if( ext>name ){
|
|
strncpy( strFontName, name, ext-name );
|
|
strFontName[ext-name] = '\0';
|
|
}
|
|
else
|
|
strcpy(strFontName, name );
|
|
}
|
|
|
|
nInstCount = nInst;
|
|
if( nInst>0 ){
|
|
aInsts = new FONTPRESET[nInst];
|
|
memcpy( aInsts, setInst, sizeof(FONTPRESET) * nInst );
|
|
}
|
|
else{
|
|
aInsts = NULL;
|
|
}
|
|
|
|
nDrumCount = nDrum;
|
|
if( nDrum>0 ){
|
|
aDrums = new FONTPRESET[nDrum];
|
|
memcpy( aDrums, setDrum, sizeof(FONTPRESET) * nDrum );
|
|
}
|
|
else{
|
|
aDrums = NULL;
|
|
}
|
|
}
|
|
|
|
VSTINFO::VSTINFO()
|
|
{
|
|
memset( this, 0, sizeof(VSTINFO) );
|
|
}
|
|
|
|
VSTINFO::VSTINFO( char* strFile, char* strEff, unsigned int id )
|
|
{
|
|
uniqueID = id;
|
|
strcpy(strFileName, strFile);
|
|
|
|
if( strlen(strEff) > 0 && stricmp(strEff, "container") )
|
|
strcpy(strVSTName, strEff);
|
|
else{
|
|
char *name = strrchr( strFile, '\\' )+1,
|
|
*ext = strrchr( strFile, '.' );
|
|
|
|
if( ext>name ){
|
|
strncpy( strVSTName, name, ext-name );
|
|
strVSTName[ext-name] = '\0';
|
|
}
|
|
else
|
|
strcpy(strVSTName, name );
|
|
}
|
|
}
|
|
|
|
VSTINFO::~VSTINFO()
|
|
{
|
|
while( !aPlugins.empty() ){
|
|
delete aPlugins.back();
|
|
aPlugins.pop_back();
|
|
}
|
|
}
|
|
|
|
char AutoTransCNS( char prog )
|
|
{
|
|
char ret = -1;
|
|
|
|
if( prog>=8 && prog<=15 )
|
|
ret = 17;
|
|
else if( prog>=16 && prog<=23 )
|
|
ret = 9;//3;
|
|
else if( prog>=40 && prog<=45 )
|
|
ret = 9;
|
|
else if( prog==46 )
|
|
ret = 13;
|
|
else if( prog==47 )
|
|
ret = 31;
|
|
else if( prog>=56 && prog<=63 )
|
|
ret = 1;
|
|
else if( prog>=64 && prog<=71 )
|
|
ret = 4;
|
|
else if( prog>=72 && prog<=79 )
|
|
ret = 6;
|
|
|
|
return ret;
|
|
}
|
|
|