Files
AC_Pro/Instruments.cpp
2026-06-13 00:05:19 +08:00

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;
}