铁血丹心

 找回密码
 我要成为铁血侠客
搜索
查看: 1630|回复: 5

请求复刻版音乐文件错误修复方法

[复制链接]
发表于 2009-6-5 08:35 | 显示全部楼层 |阅读模式

马上注册,结交更多侠友!

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x
就是我有玩 PTT复刻版重装上阵这个MOD http://www.txdx.net/thread-416699-1-1.html
他里面有说到 "基本修复音乐文件的错误"
我玩的结果,发现当我没有把music的档案删掉时,玩很久也都不会跳错误讯息而强制关掉游戏了

可是像我玩群芳这个MOD还是会有听音乐的时候,会跳错误讯息出来,非得移动music里面的档案才行
我是想说可不可以请大大把这方面的技术分享出来,让其他MOD也可以解决这些问题?
分享给其他MOD的制作者...

还是说已经都统一源码了,我玩ptt复刻没有出错纯粹是RP...

[发帖际遇]: vincent0825在老顽童处骗取《养蜂秘法》,翻印成《如何饲养文化型蜜蜂》出版后获利银两1.
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-6-5 09:52 | 显示全部楼层
在初始化音频的时候,增加音频缓冲区的大小。
游戏开始时将所有音频文件在一个数组中,而不是只使用一个指针。

负责维护代码的人应该能看懂这部分。

[发帖际遇]: weyl抢了钟灵给段誉的绣花鞋,卖了有银两5。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-6-5 10:21 | 显示全部楼层
看不懂……………………………………………………………………

[发帖际遇]: 金圭子乘船去王盘山旅游,被不明噪音弄晕,花费银两银两20。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-6-5 10:50 | 显示全部楼层
Run子程中:
Mix_OpenAudio(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, 2, 4096);

尝试将4096改成更大的值

如果改善不大再试下面的

声音指针定义改为:

Music: array[0..23] of PMix_music;
  ESound: array[0..52] of PMix_Chunk;
  ASound: array[0..23] of PMix_Chunk;

增加以下子程:

procedure InitialMusic;
var
  i: integer;
  str: string;
begin
  for i := 0 to 23 do
  begin
    str := 'music\' + inttostr(i) + '.mp3';
    if fileexists(pchar(str)) then
      Music[i] := Mix_LoadMUS(pchar(str))
    else
      Music[i] := nil;
  end;
  for i := 0 to 52 do
  begin
    str := formatfloat('sound\e00', i) + '.wav';
    if fileexists(pchar(str)) then
      ESound[i] := Mix_LoadWav(pchar(str))
    else
      ESound[i] := nil;
  end;
  for i := 0 to 23 do
  begin
    str := formatfloat('sound\atk00', i) + '.wav';
    if fileexists(pchar(str)) then
      ASound[i] := Mix_LoadWav(pchar(str))
    else
      ASound[i] := nil;
  end;

end;

播放部分进行如下修改:
//播放mp3音乐

procedure PlayMP3(MusicNum, times: integer); overload;
begin
  if MusicNum in [Low(Music)..High(Music)] then
    if Music[MusicNum] <> nil then
      Mix_PlayMusic(Music[MusicNum], times);


end;

procedure PlayMP3(filename: pchar; times: integer); overload;
begin
  //if fileexists(filename) then
  //begin
    //Music := Mix_LoadMUS(filename);
    //Mix_volumemusic(MIX_MAX_VOLUME div 3);
    //Mix_PlayMusic(music, times);
  //end;

end;

//停止当前播放的音乐

procedure StopMP3;
begin
  Mix_HaltMusic;

end;

//播放wav音效

procedure PlaySound(SoundNum, times: integer); overload;
begin
  if SoundNum in [Low(Esound)..High(Esound)] then
    if Esound[SoundNum] <> nil then
      Mix_PlayChannel(-1, Esound[SoundNum], times);

end;

procedure PlaySound(SoundNum: integer); overload;
begin
  if SoundNum in [Low(Esound)..High(Esound)] then
    if Esound[SoundNum] <> nil then
      Mix_PlayChannel(-1, Esound[SoundNum], 0);

end;

procedure PlaySound(filename: pchar; times: integer); overload;
begin
  {if fileexists(filename) then
  begin
    Sound := Mix_LoadWav(filename);
    Mix_PlayChannel(-1, sound, times);
  end;}
end;

[[i] 本帖最后由 weyl 于 2009-6-5 10:52 编辑 [/i]]

[[i] 本帖最后由 weyl 于 2009-6-5 10:57 编辑 [/i]]
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-6-5 10:53 | 显示全部楼层
可能修改缓冲区大小是比较主要的原因,你可以先试试增加缓冲区的值,如果这样做问题就能改善很多的话那么把音频保存在数组中也不太必要。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-6-5 17:22 | 显示全部楼层
向偶像学习~~~~~~
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

小黑屋|手机版|铁血丹心

GMT+8, 2024-12-23 13:32

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表