
家园1修改和家园2差不多。 HW1和HW2的修改文件都是从homeworldbig和homeworld2big中解压缩出来的。但是HW2的文件不能直接修改,所以才转换成DATE包提供下载。
用BIGVIEWER可以察看家园和灾难的核心big文件。然后选择相应的文件(可以在其中直接关看文件内容)。在文件浏览区中选择保存就可以直接保存在相应的文件夹中(舰船属性文件是shp文件)。然后用记事本打开直接修改就可以了。可以说如果仅仅做bigMOD,HW的比HW2的简单的多。
《家园》跳关脚本
《家园》的跳关脚本 warpscript 应该是开发小组测试单人任务时使用的一个脚本,利用这个脚本,可以带上任意数量的money和任何你想带上的某种族飞船n艘跳至你想去的第m关(1<m≤17)可是这个脚本并没有放进big文件里,大概是由于它的功能实在是太强了吧……
下面就是我今天用的一个‘跳关脚本’,这个脚本从游戏开始便进入第二关,资源为5000000,还有一艘本图希商船-FloatingCity:
WarpTo 2 ;你想去的关卡
;CHEAT FLEET #1
WarpStartRU 5000000 ;你的资源
WarpFleet FloatingCity, 1 ;你的船和数量
打开‘记事本’拷贝上面4行,保存在homeworld目录里,文件名为 warpscript (注意扩展名,不要存成warpscripttxt)进入游戏,选择‘单人游戏’,再选择‘新游戏’……
大家看了上面的例子就可以明白:
WarpTo 后面的数字就是要跳到的关卡
WarpStartRU 后面的数字就是MONEY
WarpFleet 后是出场的舰船和数量,中间用逗号隔开,也就是在船名后要有逗号。每调用一种舰船就要用一句WarpFleet
下面是《家园》中可以引用的舰船各称列表:
库申/泰坦
Mothership
Carrier
LightInterceptor
HeavyInterceptor
AttackBomber
LightDefender
HeavyDefender
CloakedFighter (库申)
DefenseFighter (泰坦)
LightCorvette
RepairCorvette
SalCapCorvette
HeavyCorvette
MultiGunCorvette
MinelayerCorvette
ResourceCollector
ResourceController
AdvanceSupportFrigate
StandardFrigate
IonCannonFrigate
DDDFrigate (库申)
DFGFrigate (泰坦)
StandardDestroyer
MissileDestroyer
HeavyCruiser
ResearchShip
Probe
ProximitySensor
SensorArray
CloakGenerator
GravWellGenerator
Drone (库申)
CryoTray
HeadShotAsteroid
TargetDrone
图拉尼
P1Mothership
P1Fighter
P1StandardCorvette
P1MissileCorvette
P1IonArrayFrigate
卡德申
P2Mothership
P2Swarmer
P2AdvanceSwarmer
P2FuelPod
P2MultiBeamFrigate
星际理事会
P3Frigate
P3MegaShip
本图希等
CargoBarge
GhostShip
FloatingCity
MiningBase
Junk_Lgun
Junk_Sgun
JunkyardDawg
JunkyardHQ
ResearchStation
ResearchStationBridge
ResearchStationTower
至于《灾难》的跳关脚本 warpscript,在cataclysmbig可以找到,有兴趣的同志自己研究一下吧需要注意的是:
《灾难》里用WARPSCRIPT调用的单位和任务脚本的关系更密切,如果调用了任务里没有的非本族飞船,在任务载入时就会跳出!!!不过在《灾难》中那些出现本图希的关卡中是可以用WARPSCRIPT来调用的,比如在第5关和第15关。
如在第5关调出了本图希的船,可以被带到下一关,但如果那一关情节中没出现本图希的话,飞船将没有贴图。
这个是完整的代码,我自己的账号发不了这么长,希望好心人帮忙注释啊,非常感谢!!!
(1)端点检测部分(vad):
function [x1,x2] = vad(x)
%语音信号x幅度归一化到[-1,1]
x = double(x);
x = x / max(abs(x));
%常数设置
FrameLen = 240; %帧长度为240
FrameInc = 80; %帧移为80
amp1 = 10; %短时能量高门限10
amp2 = 2; %短时能量低门限为2
zcr1 = 10; %短时过零率高门限为10
zcr2 = 5; %短时过零率低门限为5
maxsilence =3;%静音时间门限310ms= 30ms
minlen= 15;%最小语音时间长度1510ms = 150ms
status= 0; %
count= 0; %语音时间累计
silence = 0; %静音时间累计
%计算过零率
tmp1= enframe(x(1:end-1), FrameLen, FrameInc);
tmp2= enframe(x(2:end), FrameLen, FrameInc);
signs =(tmp1tmp2)<0;%符号数组,用于存储相邻两个采样点符号是否相同,即是否穿越0电平
diffs = (tmp1-tmp2)>002;%度量相邻两个采样点之间距离,如果大于门限002(经验值),则1,否则0
zcr = sum(signsdiffs,2);%过零率
%计算短时能量
amp =sum(abs(enframe(filter([1 -09375], 1, x), FrameLen, FrameInc)), 2);
%调整能量门限
amp1 = min(amp1,max(amp)/4);
amp2 = min(amp2,max(amp)/8);
%开始端点检测
x1 = 0;
x2 = 0;
for n=1:length(zcr)
goto = 0;
switch status
case {0,1}% 0 =静音, 1 =可能开始
if amp(n) > amp1%确信进入语音段
x1 = max(n-count-1,1);
status= 2;
silence = 0;
count= count + 1;
elseif amp(n) > amp2 || %可能处于语音段
zcr(n) > zcr2
status = 1;
count= count + 1;
else%静音状态
status= 0;
count= 0;
end
case 2,% 2 =语音段
if amp(n) > amp2 || %保持在语音段
zcr(n) > zcr2
count = count + 1;
else%语音将结束
silence = silence+1;
if silence < maxsilence %静音还不够长,尚未结束
count= count + 1;
elseif count < minlen%语音长度太短,认为是噪声
status= 0;
silence = 0;
count= 0;
else%语音结束
status= 3;
end
end
case 3,
break;
end
end
count = count-silence/2;
x2 = x1 + count -1;
subplot(311)
plot(x)
axis([1 length(x) -1 1])
xlabel('语音信号');
line([x1FrameIncx1FrameInc ],[-1,1],'Color','red');
line([x2FrameIncx2FrameInc ],[-1,1],'Color','red');
subplot(312)
plot(amp);
axis([1 length(amp) 0max(amp)])
xlabel('短时能量');
line([x1,x1],[min(amp),max(amp)],'Color','red');
line([x2,x2],[min(amp),max(amp)],'Color','red');
subplot(313)
plot(zcr);
axis([1 length(zcr) 0max(zcr)])
xlabel('过零率');
line([x1,x1],[min(zcr),max(zcr)],'Color','red');
line([x2,x2],[min(zcr),max(zcr)],'Color','red');
(2)MFCC部分:
function ccc = mfcc(x)
%归一化mel滤波器组系数
bank=melbankm(24,256,8000,0,05,'m');%24滤波器个数,8000采样频率
bank=full(bank);
bank=bank/max(bank(:));
% DCT系数,1224
for k=1:12
n=0:23;
dctcoef(k,:)=cos((2n+1)kpi/(224));
end
%归一化倒谱提升窗口
w = 1 + 6 sin(pi (1:12) / 12);
w = w/max(w);
%预加重滤波器
xx=double(x);
xx=filter([1-09375],1,xx);
%语音信号分帧,xx是输入语音信号;256是帧长;80是帧移
xx=enframe(xx,256,80);
%计算每帧的MFCC参数
for i=1:size(xx,1)
y = xx(i,:);
s = y' hamming(256);%加汉明窗
t = abs(fft(s));%fft变换
t = t^2;
c1=dctcoef log(bank t(1:129));
c2 = c1w';
m(i,:)=c2';
end
%差分系数
dtm = zeros(size(m));
for i=3:size(m,1)-2
dtm(i,:) = -2m(i-2,:) - m(i-1,:) + m(i+1,:)+ 2m(i+2,:);
end
dtm = dtm / 3;
%合并mfcc参数和一阶差分mfcc参数
ccc = [m dtm];
%去除首尾两帧,因为这两帧的一阶差分参数为0
ccc =ccc(3:size(m,1)-2,:);
(3)dtw计算部分:
function dist = dtw2(test, ref)
global x y_min y_max
global t r
global D d
global m n
t = test;
r = ref;
n = size(t,1);
m = size(r,1);
d = zeros(m,1);
D =ones(m,1) realmax;
D(1) = 0;
%如果两个模板长度相差过多,匹配失败
if (2m-n<3) || (2n-m<2)
dist =realmax;
return
end
%计算匹配区域
xa = round((2m-n)/3);
xb = round((2n-m)2/3);
if xb>xa
%xb>xa,按下面三个区域匹配
%1:xa
%xa+1:xb
%xb+1:N
for x =1:xa
y_max= 2x;
y_min= round(05x);
warp
end
for x =(xa+1):xb
y_max= round(05(x-n)+m);
y_min= round(05x);
warp
end
for x =(xb+1):n
y_max= round(05(x-n)+m);
y_min= round(2(x-n)+m);
warp
end
elseif xa>xb
%xa>xb,按下面三个区域匹配
%0:xb
%xb+1:xa
%xa+1:N
for x =1:xb
y_max= 2x;
y_min= round(05x);
warp
end
for x =(xb+1):xa
y_max= 2x;
y_min= round(2(x-n)+m);
warp
end
for x =(xa+1):n
y_max= round(05(x-n)+m);
y_min= round(2(x-n)+m);
warp
end
elseif xa==xb
%xa=xb,按下面两个区域匹配
%0:xa
%xa+1:N
for x =1:xa
y_max= 2x;
y_min= round(05x);
warp
end
for x =(xa+1):n
y_max= round(05(x-n)+m);
y_min= round(2(x-n)+m);
warp
end
end
%返回匹配分数
dist = D(m);
function warp
global x y_min y_max
global t r
global D d
global m n
d = D;
for y = y_min:y_max
D1 = D(y);
if y>1
D2= D(y-1);
else
D2 =realmax;
end
if y>2
D3= D(y-2);
else
D3 = realmax;
end
d(y) =sum((t(x,:)-r(y,:))^2) + min([D1,D2,D3]);
end
D = d;
(4)测试函数testdtw部分;
disp('正在计算参考模板的参数')
for i=1:10
fname = sprintf('G:\\石东东\\语音\\%dawav',i-1);
x = wavread(fname);
[x1 x2] = vad(x);
m = mfcc(x);
m = m(x1-2:x2-2,:);
ref(i)mfcc = m;
end
disp('正在计算测试模板的参数')
for i=1:10
fname = sprintf('G:\\石东东\\语音\\%dbwav',i-1);
x = wavread(fname);
[x1 x2] = vad(x);
m = mfcc(x);
m = m(x1-2:x2-2,:);
test(i)mfcc = m;
end
disp('正在进行模板匹配')
dist = zeros(10,10);
for i=1:10
for j=1:10
dist(i,j) = dtw2(test(i)mfcc, ref(j)mfcc);
end
end
disp('正在计算匹配结果')
for i=1:10
[d,j] = min(dist(i,:));
fprintf('测试模板%d的识别结果为:%d\n', i-1, j-1);
end
以上就是关于家园1 homeworld (库申 VS 泰坦) 的秘籍~`麻烦发一下 ,谢谢全部的内容,包括:家园1 homeworld (库申 VS 泰坦) 的秘籍~`麻烦发一下 ,谢谢、求助语音识别代码的注释,要每一句都写明意思,谢谢、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)