hedgewars/uSound.pas
author nemo
Sun, 20 Jun 2010 22:35:10 -0400
changeset 3526 a1d2180fef42
parent 3418 8545f646a40d
child 3529 0e968ba12a84
permissions -rw-r--r--
Replace SHA1 with adler32. For simple purposes of checking to see if players are playing the same map, this should be quite adequate and runs 15 times faster.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
     1
(*
1066
1f1b3686a2b0 Update copyright headers a bit
unc0rr
parents: 611
diff changeset
     2
 * Hedgewars, a free turn based strategy game
1654
9cfa6f23e767 Start voicepacks implementation
unc0rr
parents: 1562
diff changeset
     3
 * Copyright (c) 2005, 2007, 2009 Andrey Korotaev <unC0Rr@gmail.com>
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
     4
 *
183
57c2ef19f719 Relicense to GPL
unc0rr
parents: 181
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
57c2ef19f719 Relicense to GPL
unc0rr
parents: 181
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
57c2ef19f719 Relicense to GPL
unc0rr
parents: 181
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
     8
 *
183
57c2ef19f719 Relicense to GPL
unc0rr
parents: 181
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
57c2ef19f719 Relicense to GPL
unc0rr
parents: 181
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
57c2ef19f719 Relicense to GPL
unc0rr
parents: 181
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
57c2ef19f719 Relicense to GPL
unc0rr
parents: 181
diff changeset
    12
 * GNU General Public License for more details.
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    13
 *
183
57c2ef19f719 Relicense to GPL
unc0rr
parents: 181
diff changeset
    14
 * You should have received a copy of the GNU General Public License
57c2ef19f719 Relicense to GPL
unc0rr
parents: 181
diff changeset
    15
 * along with this program; if not, write to the Free Software
57c2ef19f719 Relicense to GPL
unc0rr
parents: 181
diff changeset
    16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    17
 *)
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    18
2630
079ef82eac75 revamped file access and debug display
koda
parents: 2603
diff changeset
    19
{$INCLUDE "options.inc"}
079ef82eac75 revamped file access and debug display
koda
parents: 2603
diff changeset
    20
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    21
unit uSound;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    22
interface
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
    23
uses SDLh, uConsts;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    24
1654
9cfa6f23e767 Start voicepacks implementation
unc0rr
parents: 1562
diff changeset
    25
type PVoicepack = ^TVoicepack;
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    26
    TVoicepack = record
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    27
        name: shortstring;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    28
        chunks: array [TSound] of PMixChunk;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    29
        end;
1654
9cfa6f23e767 Start voicepacks implementation
unc0rr
parents: 1562
diff changeset
    30
2716
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2674
diff changeset
    31
var MusicFN: shortstring;
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2674
diff changeset
    32
3038
4e48c276a468 In pascal unit is a namespace
unc0rr
parents: 2948
diff changeset
    33
procedure initModule;
4e48c276a468 In pascal unit is a namespace
unc0rr
parents: 2948
diff changeset
    34
procedure freeModule;
2716
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2674
diff changeset
    35
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    36
procedure InitSound;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    37
procedure ReleaseSound;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    38
procedure SoundLoad;
2745
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
    39
procedure PlaySound(snd: TSound);
3202
b470d7875f23 Engine:
smxx
parents: 3201
diff changeset
    40
procedure PlaySound(snd: TSound; keepPlaying: boolean);
2745
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
    41
procedure PlaySound(snd: TSound; voicepack: PVoicepack);
3201
400c98815100 Engine:
smxx
parents: 3182
diff changeset
    42
procedure PlaySound(snd: TSound; voicepack: PVoicepack; keepPlaying: boolean);
2745
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
    43
function LoopSound(snd: TSound): LongInt;
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
    44
function LoopSound(snd: TSound; voicepack: PVoicepack): LongInt;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    45
procedure PlayMusic;
1712
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1669
diff changeset
    46
procedure PauseMusic;
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1669
diff changeset
    47
procedure ResumeMusic;
282
b1e3387389b6 - Pickhammer sound
unc0rr
parents: 183
diff changeset
    48
procedure StopSound(snd: TSound);
2745
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
    49
procedure StopSound(chn: LongInt);
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
    50
function  ChangeVolume(voldelta: LongInt): LongInt;
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
    51
function  AskForVoicepack(name: shortstring): Pointer;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    52
1097
06b15817b8a0 Enable music dependance on current land theme
unc0rr
parents: 1066
diff changeset
    53
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    54
implementation
2230
d6963f72d21a once again, trying to restore windows compatibility from nemo's experiments
koda
parents: 2222
diff changeset
    55
uses uMisc, uConsole;
564
17fb45c670c1 Finalize basic playlists implementation
unc0rr
parents: 449
diff changeset
    56
3418
8545f646a40d Engine:
smxx
parents: 3202
diff changeset
    57
const chanTPU = 32;
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
    58
var Volume: LongInt;
2716
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2674
diff changeset
    59
    lastChan: array [TSound] of LongInt;
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2674
diff changeset
    60
    voicepacks: array[0..cMaxTeams] of TVoicepack;
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2674
diff changeset
    61
    defVoicepack: PVoicepack;
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2674
diff changeset
    62
    Mus: PMixMusic = nil;
1654
9cfa6f23e767 Start voicepacks implementation
unc0rr
parents: 1562
diff changeset
    63
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
    64
function  AskForVoicepack(name: shortstring): Pointer;
1654
9cfa6f23e767 Start voicepacks implementation
unc0rr
parents: 1562
diff changeset
    65
var i: Longword;
9cfa6f23e767 Start voicepacks implementation
unc0rr
parents: 1562
diff changeset
    66
begin
9cfa6f23e767 Start voicepacks implementation
unc0rr
parents: 1562
diff changeset
    67
i:= 0;
9cfa6f23e767 Start voicepacks implementation
unc0rr
parents: 1562
diff changeset
    68
while (voicepacks[i].name <> name) and (voicepacks[i].name <> '') do
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    69
    begin
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    70
    inc(i);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    71
    TryDo(i <= cMaxTeams, 'Engine bug: AskForVoicepack i > cMaxTeams', true)
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    72
    end;
1654
9cfa6f23e767 Start voicepacks implementation
unc0rr
parents: 1562
diff changeset
    73
9cfa6f23e767 Start voicepacks implementation
unc0rr
parents: 1562
diff changeset
    74
voicepacks[i].name:= name;
9cfa6f23e767 Start voicepacks implementation
unc0rr
parents: 1562
diff changeset
    75
AskForVoicepack:= @voicepacks[i]
9cfa6f23e767 Start voicepacks implementation
unc0rr
parents: 1562
diff changeset
    76
end;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    77
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    78
procedure InitSound;
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2633
diff changeset
    79
var i: TSound;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    80
begin
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    81
    if not isSoundEnabled then exit;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    82
    WriteToConsole('Init sound...');
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    83
    isSoundEnabled:= SDL_InitSubSystem(SDL_INIT_AUDIO) >= 0;
2671
7e0f88013fe8 smaller patches, one missing Sky-lowres, IMG_Init and Mix_Init (might require newer libraries), updates to SDL bindings, code cleanup, new compile flags
koda
parents: 2647
diff changeset
    84
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    85
    if isSoundEnabled then
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    86
        isSoundEnabled:= Mix_OpenAudio(44100, $8010, 2, 1024) = 0;
2327
4832b77ec958 restored volumen control (hoorray)
koda
parents: 2303
diff changeset
    87
3182
f75d546414c4 Engine:
smxx
parents: 3038
diff changeset
    88
{$IFDEF SDL_MIXER_NEWER}
f75d546414c4 Engine:
smxx
parents: 3038
diff changeset
    89
    WriteToConsole('Init SDL_mixer... ');
f75d546414c4 Engine:
smxx
parents: 3038
diff changeset
    90
    SDLTry(Mix_Init(MIX_INIT_OGG) <> 0, true);
f75d546414c4 Engine:
smxx
parents: 3038
diff changeset
    91
    WriteLnToConsole(msgOK);
f75d546414c4 Engine:
smxx
parents: 3038
diff changeset
    92
{$ENDIF}
f75d546414c4 Engine:
smxx
parents: 3038
diff changeset
    93
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    94
    if isSoundEnabled then
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    95
        WriteLnToConsole(msgOK)
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    96
    else
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    97
        WriteLnToConsole(msgFailed);
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2633
diff changeset
    98
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    99
    Mix_AllocateChannels(Succ(chanTPU));
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   100
    if isMusicEnabled then
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   101
        Mix_VolumeMusic(50);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   102
    for i:= Low(TSound) to High(TSound) do
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   103
        lastChan[i]:= -1;
2671
7e0f88013fe8 smaller patches, one missing Sky-lowres, IMG_Init and Mix_Init (might require newer libraries), updates to SDL bindings, code cleanup, new compile flags
koda
parents: 2647
diff changeset
   104
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   105
    Volume:= 0;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   106
    ChangeVolume(cInitVolume)
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   107
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   108
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   109
procedure ReleaseSound;
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   110
var i: TSound;
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   111
    t: Longword;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   112
begin
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   113
for t:= 0 to cMaxTeams do
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   114
    if voicepacks[t].name <> '' then
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   115
        for i:= Low(TSound) to High(TSound) do
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   116
            if voicepacks[t].chunks[i] <> nil then
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   117
                Mix_FreeChunk(voicepacks[t].chunks[i]);
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   118
3182
f75d546414c4 Engine:
smxx
parents: 3038
diff changeset
   119
if Mus <> nil then
f75d546414c4 Engine:
smxx
parents: 3038
diff changeset
   120
    Mix_FreeMusic(Mus);
f75d546414c4 Engine:
smxx
parents: 3038
diff changeset
   121
f75d546414c4 Engine:
smxx
parents: 3038
diff changeset
   122
{$IFDEF SDL_MIXER_NEWER}
f75d546414c4 Engine:
smxx
parents: 3038
diff changeset
   123
// make sure all instances of sdl_mixer are unloaded before continuing
f75d546414c4 Engine:
smxx
parents: 3038
diff changeset
   124
while Mix_Init(0) <> 0 do
f75d546414c4 Engine:
smxx
parents: 3038
diff changeset
   125
    Mix_Quit();
f75d546414c4 Engine:
smxx
parents: 3038
diff changeset
   126
{$ENDIF}    
f75d546414c4 Engine:
smxx
parents: 3038
diff changeset
   127
2671
7e0f88013fe8 smaller patches, one missing Sky-lowres, IMG_Init and Mix_Init (might require newer libraries), updates to SDL bindings, code cleanup, new compile flags
koda
parents: 2647
diff changeset
   128
Mix_CloseAudio();
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   129
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   130
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   131
procedure SoundLoad;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   132
var i: TSound;
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   133
    s: shortstring;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   134
    t: Longword;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   135
begin
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   136
    if not isSoundEnabled then exit;
1656
209cf0e2fc36 Finish voicepacks support in engine (not tested though)
unc0rr
parents: 1654
diff changeset
   137
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   138
    defVoicepack:= AskForVoicepack('Default');
1654
9cfa6f23e767 Start voicepacks implementation
unc0rr
parents: 1562
diff changeset
   139
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   140
for i:= Low(TSound) to High(TSound) do
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   141
    if (Soundz[i].Path <> ptVoices) and (Soundz[i].FileName <> '') then
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   142
        begin
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   143
        s:= Pathz[Soundz[i].Path] + '/' + Soundz[i].FileName;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   144
        WriteToConsole(msgLoading + s + ' ');
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   145
        defVoicepack^.chunks[i]:= Mix_LoadWAV_RW(SDL_RWFromFile(Str2PChar(s), 'rb'), 1);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   146
        TryDo(defVoicepack^.chunks[i] <> nil, msgFailed, true);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   147
        WriteLnToConsole(msgOK);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   148
        end;
1656
209cf0e2fc36 Finish voicepacks support in engine (not tested though)
unc0rr
parents: 1654
diff changeset
   149
209cf0e2fc36 Finish voicepacks support in engine (not tested though)
unc0rr
parents: 1654
diff changeset
   150
for t:= 0 to cMaxTeams do
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   151
    if voicepacks[t].name <> '' then
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   152
        for i:= Low(TSound) to High(TSound) do
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   153
            if (Soundz[i].Path = ptVoices) and (Soundz[i].FileName <> '') then
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   154
                begin
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   155
                s:= Pathz[Soundz[i].Path] + '/' + voicepacks[t].name + '/' + Soundz[i].FileName;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   156
                WriteToConsole(msgLoading + s + ' ');
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   157
                voicepacks[t].chunks[i]:= Mix_LoadWAV_RW(SDL_RWFromFile(Str2PChar(s), 'rb'), 1);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   158
                if voicepacks[t].chunks[i] = nil then
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   159
                    WriteLnToConsole(msgFailed)
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   160
                else
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   161
                    WriteLnToConsole(msgOK)
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   162
                end;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   163
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   164
2745
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
   165
procedure PlaySound(snd: TSound);
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
   166
begin
3201
400c98815100 Engine:
smxx
parents: 3182
diff changeset
   167
    PlaySound(snd, nil, false);
2745
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
   168
end;
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
   169
3202
b470d7875f23 Engine:
smxx
parents: 3201
diff changeset
   170
procedure PlaySound(snd: TSound; keepPlaying: boolean);
b470d7875f23 Engine:
smxx
parents: 3201
diff changeset
   171
begin
b470d7875f23 Engine:
smxx
parents: 3201
diff changeset
   172
    PlaySound(snd, nil, keepPlaying);
b470d7875f23 Engine:
smxx
parents: 3201
diff changeset
   173
end;
b470d7875f23 Engine:
smxx
parents: 3201
diff changeset
   174
2745
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
   175
procedure PlaySound(snd: TSound; voicepack: PVoicepack);
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   176
begin
3201
400c98815100 Engine:
smxx
parents: 3182
diff changeset
   177
    PlaySound(snd, voicepack, false);
400c98815100 Engine:
smxx
parents: 3182
diff changeset
   178
end;
400c98815100 Engine:
smxx
parents: 3182
diff changeset
   179
400c98815100 Engine:
smxx
parents: 3182
diff changeset
   180
procedure PlaySound(snd: TSound; voicepack: PVoicepack; keepPlaying: boolean);
400c98815100 Engine:
smxx
parents: 3182
diff changeset
   181
begin
1562
c0eea030347b Don't play sounds when quick replaying in spectate mode
unc0rr
parents: 1225
diff changeset
   182
if (not isSoundEnabled) or fastUntilLag then exit;
2443
fececcbc2189 Smaxx patch for fixing all sound related issues on any system
koda
parents: 2418
diff changeset
   183
3201
400c98815100 Engine:
smxx
parents: 3182
diff changeset
   184
if keepPlaying and (lastChan[snd] <> -1) and (Mix_Playing(lastChan[snd]) <> 0) then
400c98815100 Engine:
smxx
parents: 3182
diff changeset
   185
    exit;
400c98815100 Engine:
smxx
parents: 3182
diff changeset
   186
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   187
if (voicepack <> nil) and (voicepack^.chunks[snd] <> nil) then
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   188
    lastChan[snd]:= Mix_PlayChannelTimed(-1, voicepack^.chunks[snd], 0, -1)
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   189
else
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   190
    lastChan[snd]:= Mix_PlayChannelTimed(-1, defVoicepack^.chunks[snd], 0, -1)
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   191
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   192
2745
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
   193
function LoopSound(snd: TSound): LongInt;
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
   194
begin
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   195
    LoopSound:= LoopSound(snd, nil)
2745
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
   196
end;
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
   197
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
   198
function LoopSound(snd: TSound; voicepack: PVoicepack): LongInt;
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2633
diff changeset
   199
begin
2832
8cb73c0e77a1 Engine:
smxx
parents: 2745
diff changeset
   200
if (not isSoundEnabled) or fastUntilLag then
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   201
    begin
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   202
    LoopSound:= -1;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   203
    exit
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   204
    end;
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2633
diff changeset
   205
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2633
diff changeset
   206
if (voicepack <> nil) and (voicepack^.chunks[snd] <> nil) then
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   207
    LoopSound:= Mix_PlayChannelTimed(-1, voicepack^.chunks[snd], -1, -1)
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2633
diff changeset
   208
else
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   209
    LoopSound:= Mix_PlayChannelTimed(-1, defVoicepack^.chunks[snd], -1, -1)
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2633
diff changeset
   210
end;
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2633
diff changeset
   211
282
b1e3387389b6 - Pickhammer sound
unc0rr
parents: 183
diff changeset
   212
procedure StopSound(snd: TSound);
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   213
begin
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   214
if not isSoundEnabled then exit;
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2633
diff changeset
   215
if (lastChan[snd] <> -1) and (Mix_Playing(lastChan[snd]) <> 0) then
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   216
    begin
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   217
    Mix_HaltChannel(lastChan[snd]);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   218
    lastChan[snd]:= -1;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   219
    end;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   220
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   221
2745
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
   222
procedure StopSound(chn: LongInt);
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
   223
begin
2832
8cb73c0e77a1 Engine:
smxx
parents: 2745
diff changeset
   224
if not isSoundEnabled then exit;
8cb73c0e77a1 Engine:
smxx
parents: 2745
diff changeset
   225
if (chn <> -1) and (Mix_Playing(chn) <> 0) then Mix_HaltChannel(chn);
2745
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
   226
end;
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
   227
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   228
procedure PlayMusic;
2905
f3c79f7193a9 Engine:
smxx
parents: 2832
diff changeset
   229
var s: shortstring;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   230
begin
1097
06b15817b8a0 Enable music dependance on current land theme
unc0rr
parents: 1066
diff changeset
   231
if (not isSoundEnabled)
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   232
    or (MusicFN = '')
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   233
    or (not isMusicEnabled) then exit;
565
092cb8deffc5 Fix some bug, finish playlist implementation
unc0rr
parents: 564
diff changeset
   234
1097
06b15817b8a0 Enable music dependance on current land theme
unc0rr
parents: 1066
diff changeset
   235
s:= PathPrefix + '/Music/' + MusicFN;
564
17fb45c670c1 Finalize basic playlists implementation
unc0rr
parents: 449
diff changeset
   236
WriteToConsole(msgLoading + s + ' ');
565
092cb8deffc5 Fix some bug, finish playlist implementation
unc0rr
parents: 564
diff changeset
   237
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   238
Mus:= Mix_LoadMUS(Str2PChar(s));
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   239
TryDo(Mus <> nil, msgFailed, false);
564
17fb45c670c1 Finalize basic playlists implementation
unc0rr
parents: 449
diff changeset
   240
WriteLnToConsole(msgOK);
17fb45c670c1 Finalize basic playlists implementation
unc0rr
parents: 449
diff changeset
   241
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   242
SDLTry(Mix_FadeInMusic(Mus, -1, 3000) <> -1, false)
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   243
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   244
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 355
diff changeset
   245
function ChangeVolume(voldelta: LongInt): LongInt;
174
0b2c5b22f644 Changeable volume
unc0rr
parents: 97
diff changeset
   246
begin
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   247
if not isSoundEnabled then
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   248
    exit(0);
2327
4832b77ec958 restored volumen control (hoorray)
koda
parents: 2303
diff changeset
   249
4832b77ec958 restored volumen control (hoorray)
koda
parents: 2303
diff changeset
   250
inc(Volume, voldelta);
4832b77ec958 restored volumen control (hoorray)
koda
parents: 2303
diff changeset
   251
if Volume < 0 then Volume:= 0;
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   252
Mix_Volume(-1, Volume);
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   253
Volume:= Mix_Volume(-1, -1);
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   254
if isMusicEnabled then Mix_VolumeMusic(Volume * 4 div 8);
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   255
ChangeVolume:= Volume * 100 div MIX_MAX_VOLUME
174
0b2c5b22f644 Changeable volume
unc0rr
parents: 97
diff changeset
   256
end;
0b2c5b22f644 Changeable volume
unc0rr
parents: 97
diff changeset
   257
1712
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1669
diff changeset
   258
procedure PauseMusic;
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1669
diff changeset
   259
begin
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1669
diff changeset
   260
if (MusicFN = '') or (not isMusicEnabled) then exit;
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   261
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   262
Mix_PauseMusic(Mus);
1712
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1669
diff changeset
   263
end;
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1669
diff changeset
   264
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1669
diff changeset
   265
procedure ResumeMusic;
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1669
diff changeset
   266
begin
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1669
diff changeset
   267
if (MusicFN = '') or (not isMusicEnabled) then exit;
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   268
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   269
Mix_ResumeMusic(Mus);
1712
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1669
diff changeset
   270
end;
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1669
diff changeset
   271
3038
4e48c276a468 In pascal unit is a namespace
unc0rr
parents: 2948
diff changeset
   272
procedure initModule;
2716
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2674
diff changeset
   273
begin
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   274
    MusicFN:='';
2716
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2674
diff changeset
   275
end;
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2674
diff changeset
   276
3038
4e48c276a468 In pascal unit is a namespace
unc0rr
parents: 2948
diff changeset
   277
procedure freeModule;
2716
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2674
diff changeset
   278
begin
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2674
diff changeset
   279
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2674
diff changeset
   280
end;
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2674
diff changeset
   281
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   282
end.
2192
4763a778c033 - Fix quickplay sound bug triggered by two faults: ttsmj's (passing voicepack with empty name in team config) and koda's (he changed fallback to default scheme condition)
unc0rr
parents: 2191
diff changeset
   283