X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Feditor%2Ff_addresource_sound.pas;h=eaba574aa61e2d71e0f8621e5f3b0842d3442301;hb=952e5c9c629e44e260c55f2756d72a199d8d9052;hp=914f0beccecb9f40143ec24eb9a23836c968da7a;hpb=3360cb5c3e96b591451afa67a0f8a281db79e8c5;p=d2df-editor.git diff --git a/src/editor/f_addresource_sound.pas b/src/editor/f_addresource_sound.pas index 914f0be..eaba574 100644 --- a/src/editor/f_addresource_sound.pas +++ b/src/editor/f_addresource_sound.pas @@ -30,8 +30,10 @@ type private FSpectrum: TMiniSpectrum; FSetResource: String; + FSoundEnabled: Boolean; procedure ShowSpectrum(); + function CreateSoundWAD(Resource: String): Boolean; public property SetResource: String read FSetResource write FSetResource; @@ -43,7 +45,7 @@ var implementation uses - BinEditor, WADEDITOR, e_log, f_main, g_language, g_resources + BinEditor, WADEDITOR, e_log, f_main, g_language {$IFNDEF NOSOUND}, fmod, fmodtypes, fmoderrors;{$ELSE};{$ENDIF} {$R *.lfm} @@ -77,6 +79,7 @@ begin Inherited; res := FMOD_OK; + FSoundEnabled := False; {$IFNDEF NOSOUND} try @@ -104,9 +107,9 @@ begin if res <> FMOD_OK then raise Exception.Create('FMOD_System_Init failed!'); + FSoundEnabled := True; except - Application.MessageBox(FMOD_ErrorString(res), 'Initialization', MB_OK or MB_ICONHAND); - raise; + Application.MessageBox(PChar('Sound was disabled. Reason: ' + FMOD_ErrorString(res)), 'FMOD Error', MB_OK or MB_ICONWARNING); end; {$ENDIF} @@ -116,8 +119,9 @@ begin FSpectrum.Style := ssBlock; end; -function CreateSoundWAD(Resource: String): Boolean; +function TAddSoundForm.CreateSoundWAD(Resource: String): Boolean; var + WAD: TWADEditor_1; FileName, SectionName, ResourceName: String; ResLength: Integer; sz: LongWord; @@ -129,11 +133,17 @@ begin SoundData := nil; Sound := nil; Channel := nil; + + if FSoundEnabled = False then + Exit; + {$IFNDEF NOSOUND} g_ProcessResourceStr(Resource, FileName, SectionName, ResourceName); - g_ReadResource(FileName, SectionName, ResourceName, SoundData, ResLength); - if SoundData <> nil then + WAD := TWADEditor_1.Create; + WAD.ReadFile(FileName); + + if WAD.GetResource(utf2win(SectionName), utf2win(ResourceName), SoundData, ResLength) then begin sz := SizeOf(FMOD_CREATESOUNDEXINFO); FillMemory(@soundExInfo, sz, 0); @@ -148,16 +158,19 @@ begin begin e_WriteLog(Format('Error creating sound %s', [Resource]), MSG_WARNING); e_WriteLog(FMOD_ErrorString(res), MSG_WARNING); + WAD.Free(); Exit; end; end else begin e_WriteLog(Format('Error loading sound %s', [Resource]), MSG_WARNING); - //e_WriteLog(Format('WAD Reader error: %s', [WAD.GetLastErrorStr]), MSG_WARNING); + e_WriteLog(Format('WAD Reader error: %s', [WAD.GetLastErrorStr]), MSG_WARNING); + WAD.Free(); Exit; end; + WAD.Free(); Result := True; {$ENDIF} end; @@ -174,8 +187,12 @@ begin if Playing then bbStop.Click(); + if FSoundEnabled = False then + Exit; + if not CreateSoundWAD(FFullResourceName) then Exit; + {$IFNDEF NOSOUND} res := FMOD_System_PlaySound(F_System, FMOD_CHANNEL_FREE, Sound, False, Channel); @@ -209,6 +226,10 @@ var begin Inherited; + + if FSoundEnabled = False then + Exit; + {$IFNDEF NOSOUND} FMOD_System_Update(F_System); @@ -228,6 +249,10 @@ begin Inherited; FSpectrum.Free; + + if FSoundEnabled = False then + Exit; + {$IFNDEF NOSOUND} res := FMOD_System_Close(F_System); if res <> FMOD_OK then