hedgewars/uSound.pas
author koda
Sat, 20 Mar 2010 15:16:59 +0000
changeset 3025 01682ec58eb0
parent 2948 3f21a9dc93d0
child 3038 4e48c276a468
permissions -rw-r--r--
update project for ipad target relocate objects (windbar, fps, timer) so that window size doesn't matter move touch input in its custom controller rather than hack sdl one
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
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2674
diff changeset
    33
procedure init_uSound;
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2674
diff changeset
    34
procedure free_uSound;
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);
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
    40
procedure PlaySound(snd: TSound; voicepack: PVoicepack);
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
    41
function LoopSound(snd: TSound): LongInt;
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
    42
function LoopSound(snd: TSound; voicepack: PVoicepack): LongInt;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    43
procedure PlayMusic;
1712
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1669
diff changeset
    44
procedure PauseMusic;
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1669
diff changeset
    45
procedure ResumeMusic;
282
b1e3387389b6 - Pickhammer sound
unc0rr
parents: 183
diff changeset
    46
procedure StopSound(snd: TSound);
2745
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
    47
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
    48
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
    49
function  AskForVoicepack(name: shortstring): Pointer;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    50
1097
06b15817b8a0 Enable music dependance on current land theme
unc0rr
parents: 1066
diff changeset
    51
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    52
implementation
2230
d6963f72d21a once again, trying to restore windows compatibility from nemo's experiments
koda
parents: 2222
diff changeset
    53
uses uMisc, uConsole;
564
17fb45c670c1 Finalize basic playlists implementation
unc0rr
parents: 449
diff changeset
    54
13
7a5db822fd3f - Show no crosshair when using mine
unc0rr
parents: 11
diff changeset
    55
const chanTPU = 12;
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
    56
var Volume: LongInt;
2716
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2674
diff changeset
    57
    lastChan: array [TSound] of LongInt;
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2674
diff changeset
    58
    voicepacks: array[0..cMaxTeams] of TVoicepack;
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2674
diff changeset
    59
    defVoicepack: PVoicepack;
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2674
diff changeset
    60
    Mus: PMixMusic = nil;
1654
9cfa6f23e767 Start voicepacks implementation
unc0rr
parents: 1562
diff changeset
    61
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
    62
function  AskForVoicepack(name: shortstring): Pointer;
1654
9cfa6f23e767 Start voicepacks implementation
unc0rr
parents: 1562
diff changeset
    63
var i: Longword;
9cfa6f23e767 Start voicepacks implementation
unc0rr
parents: 1562
diff changeset
    64
begin
9cfa6f23e767 Start voicepacks implementation
unc0rr
parents: 1562
diff changeset
    65
i:= 0;
9cfa6f23e767 Start voicepacks implementation
unc0rr
parents: 1562
diff changeset
    66
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
    67
    begin
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    68
    inc(i);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    69
    TryDo(i <= cMaxTeams, 'Engine bug: AskForVoicepack i > cMaxTeams', true)
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    70
    end;
1654
9cfa6f23e767 Start voicepacks implementation
unc0rr
parents: 1562
diff changeset
    71
9cfa6f23e767 Start voicepacks implementation
unc0rr
parents: 1562
diff changeset
    72
voicepacks[i].name:= name;
9cfa6f23e767 Start voicepacks implementation
unc0rr
parents: 1562
diff changeset
    73
AskForVoicepack:= @voicepacks[i]
9cfa6f23e767 Start voicepacks implementation
unc0rr
parents: 1562
diff changeset
    74
end;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    75
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    76
procedure InitSound;
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2633
diff changeset
    77
var i: TSound;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    78
begin
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    79
    if not isSoundEnabled then exit;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    80
    WriteToConsole('Init sound...');
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    81
    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
    82
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    83
    if isSoundEnabled then
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    84
        isSoundEnabled:= Mix_OpenAudio(44100, $8010, 2, 1024) = 0;
2327
4832b77ec958 restored volumen control (hoorray)
koda
parents: 2303
diff changeset
    85
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    86
    if isSoundEnabled then
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    87
        WriteLnToConsole(msgOK)
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    88
    else
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    89
        WriteLnToConsole(msgFailed);
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2633
diff changeset
    90
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    91
    Mix_AllocateChannels(Succ(chanTPU));
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    92
    if isMusicEnabled then
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    93
        Mix_VolumeMusic(50);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    94
    for i:= Low(TSound) to High(TSound) do
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    95
        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
    96
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    97
    Volume:= 0;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
    98
    ChangeVolume(cInitVolume)
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    99
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   100
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   101
procedure ReleaseSound;
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   102
var i: TSound;
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   103
    t: Longword;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   104
begin
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   105
for t:= 0 to cMaxTeams do
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   106
    if voicepacks[t].name <> '' then
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   107
        for i:= Low(TSound) to High(TSound) do
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   108
            if voicepacks[t].chunks[i] <> nil then
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   109
                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
   110
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   111
Mix_FreeMusic(Mus);
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
   112
Mix_CloseAudio();
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   113
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   114
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   115
procedure SoundLoad;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   116
var i: TSound;
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   117
    s: shortstring;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   118
    t: Longword;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   119
begin
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   120
    if not isSoundEnabled then exit;
1656
209cf0e2fc36 Finish voicepacks support in engine (not tested though)
unc0rr
parents: 1654
diff changeset
   121
2672
0f1403bf267a check for sdl_image and sdl_mixer versions
koda
parents: 2671
diff changeset
   122
{$IFDEF SDL_MIXER_NEWER}
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   123
    WriteToConsole('Init SDL_mixer... ');
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   124
    SDLTry(Mix_Init(MIX_INIT_OGG) <> 0, true);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   125
    WriteLnToConsole(msgOK);
2672
0f1403bf267a check for sdl_image and sdl_mixer versions
koda
parents: 2671
diff changeset
   126
{$ENDIF}
0f1403bf267a check for sdl_image and sdl_mixer versions
koda
parents: 2671
diff changeset
   127
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   128
    defVoicepack:= AskForVoicepack('Default');
1654
9cfa6f23e767 Start voicepacks implementation
unc0rr
parents: 1562
diff changeset
   129
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   130
for i:= Low(TSound) to High(TSound) do
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   131
    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
   132
        begin
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   133
        s:= Pathz[Soundz[i].Path] + '/' + Soundz[i].FileName;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   134
        WriteToConsole(msgLoading + s + ' ');
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   135
        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
   136
        TryDo(defVoicepack^.chunks[i] <> nil, msgFailed, true);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   137
        WriteLnToConsole(msgOK);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   138
        end;
1656
209cf0e2fc36 Finish voicepacks support in engine (not tested though)
unc0rr
parents: 1654
diff changeset
   139
209cf0e2fc36 Finish voicepacks support in engine (not tested though)
unc0rr
parents: 1654
diff changeset
   140
for t:= 0 to cMaxTeams do
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   141
    if voicepacks[t].name <> '' then
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   142
        for i:= Low(TSound) to High(TSound) do
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   143
            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
   144
                begin
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   145
                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
   146
                WriteToConsole(msgLoading + s + ' ');
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   147
                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
   148
                if voicepacks[t].chunks[i] = nil then
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   149
                    WriteLnToConsole(msgFailed)
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   150
                else
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   151
                    WriteLnToConsole(msgOK)
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   152
                end;
2672
0f1403bf267a check for sdl_image and sdl_mixer versions
koda
parents: 2671
diff changeset
   153
{$IFDEF SDL_MIXER_NEWER}
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   154
    Mix_Quit();
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   155
{$ENDIF}    
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   156
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   157
2745
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
   158
procedure PlaySound(snd: TSound);
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
   159
begin
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   160
    PlaySound(snd, nil);
2745
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
   161
end;
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
   162
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
   163
procedure PlaySound(snd: TSound; voicepack: PVoicepack);
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   164
begin
1562
c0eea030347b Don't play sounds when quick replaying in spectate mode
unc0rr
parents: 1225
diff changeset
   165
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
   166
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   167
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
   168
    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
   169
else
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   170
    lastChan[snd]:= Mix_PlayChannelTimed(-1, defVoicepack^.chunks[snd], 0, -1)
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   171
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   172
2745
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
   173
function LoopSound(snd: TSound): LongInt;
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
   174
begin
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   175
    LoopSound:= LoopSound(snd, nil)
2745
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
   176
end;
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
   177
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
   178
function LoopSound(snd: TSound; voicepack: PVoicepack): LongInt;
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2633
diff changeset
   179
begin
2832
8cb73c0e77a1 Engine:
smxx
parents: 2745
diff changeset
   180
if (not isSoundEnabled) or fastUntilLag then
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   181
    begin
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   182
    LoopSound:= -1;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   183
    exit
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   184
    end;
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2633
diff changeset
   185
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2633
diff changeset
   186
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
   187
    LoopSound:= Mix_PlayChannelTimed(-1, voicepack^.chunks[snd], -1, -1)
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2633
diff changeset
   188
else
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   189
    LoopSound:= Mix_PlayChannelTimed(-1, defVoicepack^.chunks[snd], -1, -1)
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2633
diff changeset
   190
end;
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2633
diff changeset
   191
282
b1e3387389b6 - Pickhammer sound
unc0rr
parents: 183
diff changeset
   192
procedure StopSound(snd: TSound);
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   193
begin
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   194
if not isSoundEnabled then exit;
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2633
diff changeset
   195
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
   196
    begin
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   197
    Mix_HaltChannel(lastChan[snd]);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   198
    lastChan[snd]:= -1;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   199
    end;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   200
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   201
2745
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
   202
procedure StopSound(chn: LongInt);
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
   203
begin
2832
8cb73c0e77a1 Engine:
smxx
parents: 2745
diff changeset
   204
if not isSoundEnabled then exit;
8cb73c0e77a1 Engine:
smxx
parents: 2745
diff changeset
   205
if (chn <> -1) and (Mix_Playing(chn) <> 0) then Mix_HaltChannel(chn);
2745
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
   206
end;
11fce231f24a Engine:
smxx
parents: 2744
diff changeset
   207
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   208
procedure PlayMusic;
2905
f3c79f7193a9 Engine:
smxx
parents: 2832
diff changeset
   209
var s: shortstring;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   210
begin
1097
06b15817b8a0 Enable music dependance on current land theme
unc0rr
parents: 1066
diff changeset
   211
if (not isSoundEnabled)
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   212
    or (MusicFN = '')
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   213
    or (not isMusicEnabled) then exit;
565
092cb8deffc5 Fix some bug, finish playlist implementation
unc0rr
parents: 564
diff changeset
   214
1097
06b15817b8a0 Enable music dependance on current land theme
unc0rr
parents: 1066
diff changeset
   215
s:= PathPrefix + '/Music/' + MusicFN;
564
17fb45c670c1 Finalize basic playlists implementation
unc0rr
parents: 449
diff changeset
   216
WriteToConsole(msgLoading + s + ' ');
565
092cb8deffc5 Fix some bug, finish playlist implementation
unc0rr
parents: 564
diff changeset
   217
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   218
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
   219
TryDo(Mus <> nil, msgFailed, false);
564
17fb45c670c1 Finalize basic playlists implementation
unc0rr
parents: 449
diff changeset
   220
WriteLnToConsole(msgOK);
17fb45c670c1 Finalize basic playlists implementation
unc0rr
parents: 449
diff changeset
   221
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   222
SDLTry(Mix_FadeInMusic(Mus, -1, 3000) <> -1, false)
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   223
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   224
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 355
diff changeset
   225
function ChangeVolume(voldelta: LongInt): LongInt;
174
0b2c5b22f644 Changeable volume
unc0rr
parents: 97
diff changeset
   226
begin
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   227
if not isSoundEnabled then
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   228
    exit(0);
2327
4832b77ec958 restored volumen control (hoorray)
koda
parents: 2303
diff changeset
   229
4832b77ec958 restored volumen control (hoorray)
koda
parents: 2303
diff changeset
   230
inc(Volume, voldelta);
4832b77ec958 restored volumen control (hoorray)
koda
parents: 2303
diff changeset
   231
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
   232
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
   233
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
   234
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
   235
ChangeVolume:= Volume * 100 div MIX_MAX_VOLUME
174
0b2c5b22f644 Changeable volume
unc0rr
parents: 97
diff changeset
   236
end;
0b2c5b22f644 Changeable volume
unc0rr
parents: 97
diff changeset
   237
1712
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1669
diff changeset
   238
procedure PauseMusic;
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1669
diff changeset
   239
begin
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1669
diff changeset
   240
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
   241
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   242
Mix_PauseMusic(Mus);
1712
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1669
diff changeset
   243
end;
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1669
diff changeset
   244
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1669
diff changeset
   245
procedure ResumeMusic;
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1669
diff changeset
   246
begin
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1669
diff changeset
   247
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
   248
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   249
Mix_ResumeMusic(Mus);
1712
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1669
diff changeset
   250
end;
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1669
diff changeset
   251
2716
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2674
diff changeset
   252
procedure init_uSound;
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2674
diff changeset
   253
begin
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2905
diff changeset
   254
    MusicFN:='';
2716
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2674
diff changeset
   255
end;
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2674
diff changeset
   256
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2674
diff changeset
   257
procedure free_uSound;
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2674
diff changeset
   258
begin
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2674
diff changeset
   259
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2674
diff changeset
   260
end;
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2674
diff changeset
   261
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2501
diff changeset
   262
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
   263