Changeset 280 for CoolAudio


Ignore:
Timestamp:
Oct 5, 2011, 12:40:56 PM (13 years ago)
Author:
george
Message:
  • Added: Support for play, stop, pause, seek of Windows mmsystem backend.
Location:
CoolAudio
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • CoolAudio/Demo/Demo.lpi

    r279 r280  
    3838      </Item2>
    3939    </RequiredPackages>
    40     <Units Count="23">
     40    <Units Count="24">
    4141      <Unit0>
    4242        <Filename Value="Demo.lpr"/>
    4343        <IsPartOfProject Value="True"/>
    4444        <UnitName Value="Demo"/>
    45         <EditorIndex Value="8"/>
     45        <EditorIndex Value="10"/>
    4646        <WindowIndex Value="0"/>
    4747        <TopLine Value="1"/>
    48         <CursorPos X="1" Y="1"/>
    49         <UsageCount Value="33"/>
     48        <CursorPos X="19" Y="10"/>
     49        <UsageCount Value="38"/>
    5050        <Loaded Value="True"/>
    5151      </Unit0>
     
    5656        <ResourceBaseClass Value="Form"/>
    5757        <UnitName Value="UMainForm"/>
    58         <IsVisibleTab Value="True"/>
    5958        <EditorIndex Value="0"/>
    6059        <WindowIndex Value="0"/>
    61         <TopLine Value="69"/>
    62         <CursorPos X="39" Y="82"/>
    63         <UsageCount Value="33"/>
     60        <TopLine Value="84"/>
     61        <CursorPos X="1" Y="96"/>
     62        <UsageCount Value="38"/>
    6463        <Loaded Value="True"/>
    6564        <LoadedDesigner Value="True"/>
     
    6867        <Filename Value="../UCoolAudio.pas"/>
    6968        <UnitName Value="UCoolAudio"/>
    70         <EditorIndex Value="3"/>
    71         <WindowIndex Value="0"/>
    72         <TopLine Value="16"/>
    73         <CursorPos X="9" Y="7"/>
    74         <UsageCount Value="11"/>
     69        <EditorIndex Value="5"/>
     70        <WindowIndex Value="0"/>
     71        <TopLine Value="11"/>
     72        <CursorPos X="18" Y="16"/>
     73        <UsageCount Value="14"/>
    7574        <Loaded Value="True"/>
    7675      </Unit2>
     
    7877        <Filename Value="../Systems/UAudioSystemFMOD.pas"/>
    7978        <UnitName Value="UAudioSystemFMOD"/>
    80         <EditorIndex Value="6"/>
     79        <EditorIndex Value="8"/>
    8180        <WindowIndex Value="0"/>
    8281        <TopLine Value="47"/>
    8382        <CursorPos X="1" Y="61"/>
    84         <UsageCount Value="16"/>
     83        <UsageCount Value="19"/>
    8584        <Loaded Value="True"/>
    8685      </Unit3>
     
    9190        <TopLine Value="1"/>
    9291        <CursorPos X="29" Y="8"/>
    93         <UsageCount Value="21"/>
     92        <UsageCount Value="20"/>
    9493      </Unit4>
    9594      <Unit5>
    9695        <Filename Value="../fmodintf/fmoddyn.pas"/>
    9796        <UnitName Value="fmoddyn"/>
    98         <EditorIndex Value="7"/>
    99         <WindowIndex Value="0"/>
    100         <TopLine Value="577"/>
    101         <CursorPos X="38" Y="581"/>
    102         <UsageCount Value="11"/>
     97        <EditorIndex Value="9"/>
     98        <WindowIndex Value="0"/>
     99        <TopLine Value="579"/>
     100        <CursorPos X="19" Y="593"/>
     101        <UsageCount Value="14"/>
    103102        <Loaded Value="True"/>
    104103      </Unit5>
     
    109108        <TopLine Value="158"/>
    110109        <CursorPos X="43" Y="178"/>
    111         <UsageCount Value="11"/>
     110        <UsageCount Value="10"/>
    112111      </Unit6>
    113112      <Unit7>
    114113        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
    115114        <UnitName Value="UAudioSystemMPlayer"/>
    116         <EditorIndex Value="4"/>
    117         <WindowIndex Value="0"/>
    118         <TopLine Value="254"/>
    119         <CursorPos X="1" Y="276"/>
    120         <UsageCount Value="16"/>
     115        <EditorIndex Value="6"/>
     116        <WindowIndex Value="0"/>
     117        <TopLine Value="30"/>
     118        <CursorPos X="31" Y="36"/>
     119        <UsageCount Value="19"/>
    121120        <Loaded Value="True"/>
    122121      </Unit7>
     
    127126        <TopLine Value="1"/>
    128127        <CursorPos X="1" Y="1"/>
    129         <UsageCount Value="9"/>
     128        <UsageCount Value="8"/>
    130129      </Unit8>
    131130      <Unit9>
    132131        <Filename Value="../Systems/UAudioSystem.pas"/>
    133132        <UnitName Value="UAudioSystem"/>
    134         <EditorIndex Value="2"/>
    135         <WindowIndex Value="0"/>
    136         <TopLine Value="31"/>
    137         <CursorPos X="15" Y="48"/>
    138         <UsageCount Value="26"/>
     133        <EditorIndex Value="4"/>
     134        <WindowIndex Value="0"/>
     135        <TopLine Value="123"/>
     136        <CursorPos X="1" Y="137"/>
     137        <UsageCount Value="29"/>
    139138        <Loaded Value="True"/>
    140139      </Unit9>
     
    145144        <TopLine Value="418"/>
    146145        <CursorPos X="18" Y="430"/>
    147         <UsageCount Value="11"/>
     146        <UsageCount Value="10"/>
    148147      </Unit10>
    149148      <Unit11>
     
    153152        <TopLine Value="2427"/>
    154153        <CursorPos X="24" Y="2429"/>
    155         <UsageCount Value="13"/>
     154        <UsageCount Value="12"/>
    156155      </Unit11>
    157156      <Unit12>
     
    161160        <TopLine Value="38"/>
    162161        <CursorPos X="32" Y="50"/>
    163         <UsageCount Value="9"/>
     162        <UsageCount Value="8"/>
    164163      </Unit12>
    165164      <Unit13>
     
    169168        <TopLine Value="120"/>
    170169        <CursorPos X="16" Y="131"/>
    171         <UsageCount Value="9"/>
     170        <UsageCount Value="8"/>
    172171      </Unit13>
    173172      <Unit14>
     
    176175        <TopLine Value="26"/>
    177176        <CursorPos X="18" Y="28"/>
    178         <UsageCount Value="9"/>
     177        <UsageCount Value="8"/>
    179178      </Unit14>
    180179      <Unit15>
     
    183182        <TopLine Value="65"/>
    184183        <CursorPos X="17" Y="67"/>
    185         <UsageCount Value="9"/>
     184        <UsageCount Value="8"/>
    186185      </Unit15>
    187186      <Unit16>
    188187        <Filename Value="../../../../Lazarus/0.9.31_2.5.1/lcl/include/control.inc"/>
    189         <WindowIndex Value="0"/>
    190         <TopLine Value="4280"/>
    191         <CursorPos X="19" Y="4283"/>
    192         <UsageCount Value="9"/>
     188        <EditorIndex Value="1"/>
     189        <WindowIndex Value="0"/>
     190        <TopLine Value="2275"/>
     191        <CursorPos X="1" Y="2287"/>
     192        <UsageCount Value="13"/>
     193        <Loaded Value="True"/>
    193194      </Unit16>
    194195      <Unit17>
     
    197198        <TopLine Value="6307"/>
    198199        <CursorPos X="17" Y="6320"/>
    199         <UsageCount Value="9"/>
     200        <UsageCount Value="8"/>
    200201      </Unit17>
    201202      <Unit18>
     
    205206        <TopLine Value="13"/>
    206207        <CursorPos X="21" Y="26"/>
    207         <UsageCount Value="13"/>
     208        <UsageCount Value="12"/>
    208209      </Unit18>
    209210      <Unit19>
     
    213214        <TopLine Value="1"/>
    214215        <CursorPos X="1" Y="1"/>
    215         <UsageCount Value="13"/>
     216        <UsageCount Value="12"/>
    216217      </Unit19>
    217218      <Unit20>
    218219        <Filename Value="../../../../Lazarus/0.9.31_2.5.1/fpc/2.5.1/source/packages/winunits-base/src/mmsystem.pp"/>
    219220        <UnitName Value="mmsystem"/>
    220         <WindowIndex Value="0"/>
    221         <TopLine Value="165"/>
    222         <CursorPos X="10" Y="177"/>
    223         <UsageCount Value="12"/>
     221        <EditorIndex Value="3"/>
     222        <WindowIndex Value="0"/>
     223        <TopLine Value="882"/>
     224        <CursorPos X="5" Y="765"/>
     225        <UsageCount Value="15"/>
     226        <Loaded Value="True"/>
    224227      </Unit20>
    225228      <Unit21>
    226229        <Filename Value="../Systems/UAudioSystemWindows.pas"/>
    227230        <UnitName Value="UAudioSystemWindows"/>
    228         <EditorIndex Value="1"/>
    229         <WindowIndex Value="0"/>
    230         <TopLine Value="13"/>
    231         <CursorPos X="1" Y="46"/>
    232         <UsageCount Value="22"/>
     231        <IsVisibleTab Value="True"/>
     232        <EditorIndex Value="2"/>
     233        <WindowIndex Value="0"/>
     234        <TopLine Value="117"/>
     235        <CursorPos X="26" Y="137"/>
     236        <UsageCount Value="25"/>
    233237        <Loaded Value="True"/>
    234238      </Unit21>
    235239      <Unit22>
    236240        <Filename Value="/usr/share/fpcsrc/2.4.2/rtl/objpas/sysutils/sysstrh.inc"/>
    237         <EditorIndex Value="5"/>
    238241        <WindowIndex Value="0"/>
    239242        <TopLine Value="159"/>
    240243        <CursorPos X="10" Y="176"/>
    241         <UsageCount Value="10"/>
    242         <Loaded Value="True"/>
     244        <UsageCount Value="9"/>
    243245      </Unit22>
     246      <Unit23>
     247        <Filename Value="../../../../Lazarus/0.9.31_2.5.1/fpc/2.5.1/source/rtl/objpas/sysutils/osutilsh.inc"/>
     248        <EditorIndex Value="7"/>
     249        <WindowIndex Value="0"/>
     250        <TopLine Value="23"/>
     251        <CursorPos X="10" Y="23"/>
     252        <UsageCount Value="13"/>
     253        <Loaded Value="True"/>
     254      </Unit23>
    244255    </Units>
    245     <JumpHistory Count="30" HistoryIndex="29">
     256    <JumpHistory Count="30" HistoryIndex="28">
    246257      <Position1>
    247         <Filename Value="../Systems/UAudioSystem.pas"/>
    248         <Caret Line="91" Column="25" TopLine="89"/>
     258        <Filename Value="../Systems/UAudioSystemWindows.pas"/>
     259        <Caret Line="170" Column="49" TopLine="158"/>
    249260      </Position1>
    250261      <Position2>
    251         <Filename Value="../Systems/UAudioSystem.pas"/>
    252         <Caret Line="93" Column="25" TopLine="79"/>
     262        <Filename Value="../Systems/UAudioSystemWindows.pas"/>
     263        <Caret Line="162" Column="1" TopLine="158"/>
    253264      </Position2>
    254265      <Position3>
    255         <Filename Value="../Systems/UAudioSystem.pas"/>
    256         <Caret Line="76" Column="1" TopLine="56"/>
     266        <Filename Value="../Systems/UAudioSystemWindows.pas"/>
     267        <Caret Line="85" Column="1" TopLine="73"/>
    257268      </Position3>
    258269      <Position4>
    259         <Filename Value="UMainForm.pas"/>
    260         <Caret Line="53" Column="33" TopLine="41"/>
     270        <Filename Value="../Systems/UAudioSystemWindows.pas"/>
     271        <Caret Line="86" Column="1" TopLine="73"/>
    261272      </Position4>
    262273      <Position5>
    263274        <Filename Value="../Systems/UAudioSystem.pas"/>
    264         <Caret Line="76" Column="50" TopLine="64"/>
     275        <Caret Line="135" Column="1" TopLine="123"/>
    265276      </Position5>
    266277      <Position6>
    267         <Filename Value="UMainForm.pas"/>
    268         <Caret Line="55" Column="24" TopLine="42"/>
     278        <Filename Value="../Systems/UAudioSystem.pas"/>
     279        <Caret Line="136" Column="1" TopLine="123"/>
    269280      </Position6>
    270281      <Position7>
    271         <Filename Value="UMainForm.pas"/>
    272         <Caret Line="99" Column="28" TopLine="85"/>
     282        <Filename Value="../Systems/UAudioSystem.pas"/>
     283        <Caret Line="137" Column="1" TopLine="123"/>
    273284      </Position7>
    274285      <Position8>
    275         <Filename Value="UMainForm.pas"/>
    276         <Caret Line="100" Column="10" TopLine="85"/>
     286        <Filename Value="../Systems/UAudioSystemWindows.pas"/>
     287        <Caret Line="87" Column="1" TopLine="73"/>
    277288      </Position8>
    278289      <Position9>
    279         <Filename Value="UMainForm.pas"/>
    280         <Caret Line="97" Column="1" TopLine="86"/>
     290        <Filename Value="../Systems/UAudioSystemWindows.pas"/>
     291        <Caret Line="108" Column="1" TopLine="104"/>
    281292      </Position9>
    282293      <Position10>
    283         <Filename Value="UMainForm.pas"/>
    284         <Caret Line="98" Column="1" TopLine="86"/>
     294        <Filename Value="../Systems/UAudioSystemWindows.pas"/>
     295        <Caret Line="161" Column="1" TopLine="149"/>
    285296      </Position10>
    286297      <Position11>
    287         <Filename Value="../Systems/UAudioSystemFMOD.pas"/>
    288         <Caret Line="59" Column="1" TopLine="47"/>
     298        <Filename Value="../Systems/UAudioSystemWindows.pas"/>
     299        <Caret Line="162" Column="1" TopLine="149"/>
    289300      </Position11>
    290301      <Position12>
    291         <Filename Value="../Systems/UAudioSystemFMOD.pas"/>
    292         <Caret Line="64" Column="1" TopLine="47"/>
     302        <Filename Value="../Systems/UAudioSystemWindows.pas"/>
     303        <Caret Line="42" Column="56" TopLine="30"/>
    293304      </Position12>
    294305      <Position13>
    295         <Filename Value="../Systems/UAudioSystemFMOD.pas"/>
    296         <Caret Line="60" Column="1" TopLine="47"/>
     306        <Filename Value="../Systems/UAudioSystemWindows.pas"/>
     307        <Caret Line="134" Column="29" TopLine="116"/>
    297308      </Position13>
    298309      <Position14>
    299         <Filename Value="../Systems/UAudioSystemFMOD.pas"/>
    300         <Caret Line="61" Column="1" TopLine="47"/>
     310        <Filename Value="../Systems/UAudioSystemWindows.pas"/>
     311        <Caret Line="112" Column="76" TopLine="100"/>
    301312      </Position14>
    302313      <Position15>
    303         <Filename Value="../Systems/UAudioSystem.pas"/>
    304         <Caret Line="66" Column="5" TopLine="54"/>
     314        <Filename Value="../Systems/UAudioSystemWindows.pas"/>
     315        <Caret Line="113" Column="15" TopLine="101"/>
    305316      </Position15>
    306317      <Position16>
    307         <Filename Value="../Systems/UAudioSystem.pas"/>
    308         <Caret Line="1" Column="1" TopLine="1"/>
     318        <Filename Value="../Systems/UAudioSystemWindows.pas"/>
     319        <Caret Line="46" Column="28" TopLine="34"/>
    309320      </Position16>
    310321      <Position17>
    311         <Filename Value="../UCoolAudio.pas"/>
    312         <Caret Line="39" Column="30" TopLine="13"/>
     322        <Filename Value="../Systems/UAudioSystemWindows.pas"/>
     323        <Caret Line="134" Column="47" TopLine="122"/>
    313324      </Position17>
    314325      <Position18>
    315         <Filename Value="UMainForm.pas"/>
    316         <Caret Line="57" Column="85" TopLine="43"/>
     326        <Filename Value="../Systems/UAudioSystemWindows.pas"/>
     327        <Caret Line="43" Column="45" TopLine="30"/>
    317328      </Position18>
    318329      <Position19>
    319         <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
    320         <Caret Line="132" Column="30" TopLine="121"/>
     330        <Filename Value="../Systems/UAudioSystemWindows.pas"/>
     331        <Caret Line="146" Column="3" TopLine="140"/>
    321332      </Position19>
    322333      <Position20>
    323         <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
    324         <Caret Line="42" Column="14" TopLine="25"/>
     334        <Filename Value="../Systems/UAudioSystemWindows.pas"/>
     335        <Caret Line="121" Column="1" TopLine="117"/>
    325336      </Position20>
    326337      <Position21>
    327         <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
    328         <Caret Line="74" Column="17" TopLine="49"/>
     338        <Filename Value="../Systems/UAudioSystemWindows.pas"/>
     339        <Caret Line="122" Column="1" TopLine="117"/>
    329340      </Position21>
    330341      <Position22>
    331         <Filename Value="UMainForm.pas"/>
    332         <Caret Line="31" Column="50" TopLine="1"/>
     342        <Filename Value="../Systems/UAudioSystemWindows.pas"/>
     343        <Caret Line="123" Column="1" TopLine="117"/>
    333344      </Position22>
    334345      <Position23>
    335         <Filename Value="UMainForm.pas"/>
    336         <Caret Line="108" Column="1" TopLine="84"/>
     346        <Filename Value="../Systems/UAudioSystemWindows.pas"/>
     347        <Caret Line="128" Column="1" TopLine="117"/>
    337348      </Position23>
    338349      <Position24>
    339         <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
    340         <Caret Line="271" Column="1" TopLine="254"/>
     350        <Filename Value="../Systems/UAudioSystemWindows.pas"/>
     351        <Caret Line="129" Column="1" TopLine="117"/>
    341352      </Position24>
    342353      <Position25>
    343         <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
    344         <Caret Line="272" Column="1" TopLine="254"/>
     354        <Filename Value="../Systems/UAudioSystemWindows.pas"/>
     355        <Caret Line="134" Column="1" TopLine="117"/>
    345356      </Position25>
    346357      <Position26>
    347         <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
    348         <Caret Line="273" Column="1" TopLine="254"/>
     358        <Filename Value="../Systems/UAudioSystemWindows.pas"/>
     359        <Caret Line="135" Column="1" TopLine="117"/>
    349360      </Position26>
    350361      <Position27>
    351         <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
    352         <Caret Line="276" Column="1" TopLine="254"/>
     362        <Filename Value="../Systems/UAudioSystemWindows.pas"/>
     363        <Caret Line="136" Column="1" TopLine="117"/>
    353364      </Position27>
    354365      <Position28>
    355         <Filename Value="UMainForm.pas"/>
    356         <Caret Line="102" Column="17" TopLine="84"/>
     366        <Filename Value="../Systems/UAudioSystemWindows.pas"/>
     367        <Caret Line="138" Column="1" TopLine="118"/>
    357368      </Position28>
    358369      <Position29>
    359         <Filename Value="UMainForm.pas"/>
    360         <Caret Line="94" Column="52" TopLine="84"/>
     370        <Filename Value="../Systems/UAudioSystemWindows.pas"/>
     371        <Caret Line="134" Column="28" TopLine="117"/>
    361372      </Position29>
    362373      <Position30>
    363         <Filename Value="UMainForm.pas"/>
    364         <Caret Line="74" Column="29" TopLine="68"/>
     374        <Filename Value="../../../../Lazarus/0.9.31_2.5.1/fpc/2.5.1/source/packages/winunits-base/src/mmsystem.pp"/>
     375        <Caret Line="765" Column="5" TopLine="882"/>
    365376      </Position30>
    366377    </JumpHistory>
     
    378389      <Debugging>
    379390        <GenerateDebugInfo Value="True"/>
    380         <DebugInfoType Value="dsStabs"/>
    381391      </Debugging>
    382392      <Options>
  • CoolAudio/Demo/Demo.lpr

    r279 r280  
    88  {$ENDIF}{$ENDIF}
    99  Interfaces, // this includes the LCL widgetset
    10   Forms, UMainForm, USystem;
     10  Forms, UMainForm;
    1111
    1212{$R *.res}
  • CoolAudio/Demo/UMainForm.lfm

    r279 r280  
    6969  object ComboBox1: TComboBox
    7070    Left = 80
    71     Height = 25
     71    Height = 21
    7272    Top = 46
    7373    Width = 128
    74     ItemHeight = 0
     74    ItemHeight = 13
    7575    OnChange = ComboBox1Change
    7676    Style = csDropDownList
     
    8181    Height = 14
    8282    Top = 46
    83     Width = 52
     83    Width = 45
    8484    Caption = 'Backend:'
    8585    ParentColor = False
     
    8989    Height = 14
    9090    Top = 152
    91     Width = 48
     91    Width = 42
    9292    Caption = 'Position:'
    9393    ParentColor = False
  • CoolAudio/Demo/UMainForm.pas

    r279 r280  
    5454begin
    5555  AudioSystemManager.FillStringList(ComboBox1.Items);
    56   AudioSystem := TAudioSystemMPlayer.Create;
    57   TAudioSystemMPlayer(AudioSystem).Path := 'c:\Program Files\SMPlayer\mplayer\mplayer.exe';
    58   TAudioSystemMPlayer(AudioSystem).Path := TAudioSystemMPlayer(AudioSystem).FindPath;
    59   Player := TPlayerMPlayer.Create;
    60   Player.AudioSystem := AudioSystem;
     56  if ComboBox1.Items.Count > 0 then
     57    ComboBox1.ItemIndex := 0;
     58  ComboBox1Change(Self);
    6159end;
    6260
    6361procedure TMainForm.FormDestroy(Sender: TObject);
    6462begin
    65   Player.Free;
    66   AudioSystem.Free;
     63  FreeAndNil(Player);
     64  FreeAndNil(AudioSystem);
    6765end;
    6866
    6967procedure TMainForm.TimerPlaybackTimer(Sender: TObject);
    7068begin
    71   if Player.Playing then begin
     69  if Assigned(Player) and Player.Playing then begin
    7270    TrackBar1.OnChange := nil;
    7371    TrackBar1.Position := Trunc(Player.Position / Player.Length * TrackBar1.Max);
     
    9694procedure TMainForm.ComboBox1Change(Sender: TObject);
    9795begin
    98   Player.Free;
    99   AudioSystem.Free;
     96  FreeAndNil(Player);
     97  FreeAndNil(AudioSystem);
    10098  if ComboBox1.ItemIndex <> - 1 then begin
    10199    with TAudioSystemManagerItem(ComboBox1.Items.Objects[ComboBox1.ItemIndex]) do begin
     
    103101      Player := PlayerClass.Create;
    104102      Player.AudioSystem := AudioSystem;
     103      //Player.Active := True;
    105104    end;
    106105  end;
  • CoolAudio/Systems/UAudioSystem.pas

    r278 r280  
    3131  TPlayer = class(TComponent)
    3232  private
    33     procedure SetPlaying(AValue: Boolean);
    3433  protected
     34    FActive: Boolean;
    3535    FFileName: string;
    3636    FAudioSystem: TAudioSystem;
    3737    FPlaying: Boolean;
    38     function GetMuted: Boolean; virtual; abstract;
    39     procedure SetMuted(AValue: Boolean); virtual; abstract;
    40     function GetLength: TDateTime; virtual; abstract;
    41     function GetPosition: TDateTime; virtual; abstract;
    42     function GetVolume: Real; virtual; abstract;
    43     procedure SetPosition(AValue: TDateTime); virtual; abstract;
    44     procedure SetVolume(AValue: Real); virtual; abstract;
     38    procedure SetActive(AValue: Boolean); virtual;
     39    procedure SetPlaying(AValue: Boolean); virtual;
     40    function GetMuted: Boolean; virtual;
     41    procedure SetMuted(AValue: Boolean); virtual;
     42    function GetLength: TDateTime; virtual;
     43    function GetPosition: TDateTime; virtual;
     44    function GetVolume: Real; virtual;
     45    procedure SetPosition(AValue: TDateTime); virtual;
     46    procedure SetVolume(AValue: Real); virtual;
    4547    procedure SetFileName(AValue: string); virtual;
    4648  public
    47     procedure Play; virtual; abstract;
    48     procedure Pause; virtual; abstract;
    49     procedure Stop; virtual; abstract;
     49    procedure Play; virtual;
     50    procedure Pause; virtual;
     51    procedure Stop; virtual;
     52    procedure Open; virtual;
     53    procedure Close; virtual;
    5054    property Position: TDateTime read GetPosition write SetPosition;
    5155    property Length: TDateTime read GetLength;
     
    5559    property FileName: string read FFileName write SetFileName;
    5660    property Playing: Boolean read FPlaying write SetPlaying;
     61    property Active: Boolean read FActive write SetActive;
    5762    constructor Create; virtual;
     63    destructor Destroy; override;
    5864  end;
    5965
     
    125131{ TPlayer }
    126132
     133procedure TPlayer.SetActive(AValue: Boolean);
     134begin
     135  if FActive = AValue then Exit;
     136  FActive := AValue;
     137end;
     138
    127139procedure TPlayer.SetPlaying(AValue: Boolean);
    128140begin
     
    131143end;
    132144
     145function TPlayer.GetMuted: Boolean;
     146begin
     147  Result := False;
     148end;
     149
     150procedure TPlayer.SetMuted(AValue: Boolean);
     151begin
     152end;
     153
     154function TPlayer.GetLength: TDateTime;
     155begin
     156  Result := 0;
     157end;
     158
     159function TPlayer.GetPosition: TDateTime;
     160begin
     161  Result := 0;
     162end;
     163
     164function TPlayer.GetVolume: Real;
     165begin
     166  Result := 0;
     167end;
     168
     169procedure TPlayer.SetPosition(AValue: TDateTime);
     170begin
     171end;
     172
     173procedure TPlayer.SetVolume(AValue: Real);
     174begin
     175end;
     176
    133177procedure TPlayer.SetFileName(AValue: string);
    134178begin
     
    137181end;
    138182
     183procedure TPlayer.Play;
     184begin
     185end;
     186
     187procedure TPlayer.Pause;
     188begin
     189end;
     190
     191procedure TPlayer.Stop;
     192begin
     193end;
     194
     195procedure TPlayer.Open;
     196begin
     197  Active := True;
     198end;
     199
     200procedure TPlayer.Close;
     201begin
     202  Active := False;
     203end;
     204
    139205constructor TPlayer.Create;
    140206begin
    141 
     207end;
     208
     209destructor TPlayer.Destroy;
     210begin
     211  Active := False;
     212  inherited Destroy;
    142213end;
    143214
  • CoolAudio/Systems/UAudioSystemMPlayer.pas

    r279 r280  
    105105  tmps := GetEnvironmentVariable('PATH');
    106106  repeat
    107     I := pos(':', tmps);
     107    I := Pos(PathSeparator, tmps);
    108108    if I = 0 then I := Length(tmps);
    109109    tmppath := IncludeTrailingPathDelimiter(Copy(tmps, 0, I - 1)) + MPlayerExecutableName;
     
    118118begin
    119119  inherited Create;
    120   FPath := '';
     120  FPath := FindPath;
    121121end;
    122122
  • CoolAudio/Systems/UAudioSystemWindows.pas

    r279 r280  
    77{$IFDEF Windows}
    88uses
    9   Classes, SysUtils, UAudioSystem, MMSystem;
     9  Windows, Classes, SysUtils, UAudioSystem, MMSystem, DateUtils;
    1010
    1111type
     12  TAudioSystemWindows = class(TAudioSystem)
     13  public
     14    PlayerIndex: Integer;
     15  end;
     16
     17  TMPDeviceTypes = (dtAutoSelect, dtAVIVideo, dtCDAudio, dtDAT, dtDigitalVideo, dtMMMovie,
     18    dtOther, dtOverlay, dtScanner, dtSequencer, dtVCR, dtVideodisc, dtWaveAudio);
    1219
    1320  { TPlayerWindows }
     
    1522  TPlayerWindows = class(TPlayer)
    1623  private
     24    FHandle: HWND;
     25    FDeviceId: MCIDEVICEID;
     26    FDeviceType: TMPDeviceTypes;
     27    FFlags: Longint;
     28    FUseNotify: Boolean;
     29    FNotify: Boolean;
     30    FUseWait: Boolean;
     31    FWait: Boolean;
     32    FAliasName: string;
     33    procedure DoClose;
     34    procedure DoOpen;
     35    procedure SetDeviceType(AValue: TMPDeviceTypes);
     36    procedure CheckError(AValue: Integer);
     37    function GetErrorMessage(Code: Integer): string;
     38    procedure SetActive(AValue: Boolean); override;
     39    procedure SetNotify(AValue: Boolean);
     40    procedure SetWait(AValue: Boolean);
     41    function GetPosition: TDateTime; override;
     42    procedure SetPosition(AValue: TDateTime); override;
     43    function GetLength: TDateTime; override;
     44  public
    1745    procedure Play; override;
    1846    procedure Pause; override;
    1947    procedure Stop; override;
     48    constructor Create; override;
     49    destructor Destroy; override;
     50    property DeviceType: TMPDeviceTypes read FDeviceType write SetDeviceType;
     51    property Handle: HWND read FHandle;
     52    property Wait: Boolean read FWait write SetWait;
     53    property Notify: Boolean read FNotify write SetNotify;
    2054  end;
    2155{$ENDIF}
    2256
     57resourcestring
     58  SMCIUnknownError = 'Unknown error code';
     59
    2360implementation
    2461
     
    2764{ TPlayerWindows }
    2865
     66procedure TPlayerWindows.SetDeviceType(AValue: TMPDeviceTypes);
     67begin
     68  if FDeviceType = AValue then Exit;
     69  FDeviceType := AValue;
     70end;
     71
     72procedure TPlayerWindows.CheckError(AValue: Integer);
     73begin
     74  if AValue <> 0 then raise Exception.Create('Error ' + IntToStr(AValue) + ': ' + GetErrorMessage(AValue));
     75end;
     76
     77function TPlayerWindows.GetErrorMessage(Code: Integer): string;
     78var
     79  ErrMsg: array[0..4095] of Char;
     80begin
     81  if not mciGetErrorString(Code, ErrMsg, SizeOf(ErrMsg)) then
     82    Result := SMCIUnknownError
     83  else SetString(Result, ErrMsg, StrLen(ErrMsg));
     84end;
     85
     86procedure TPlayerWindows.SetActive(AValue: Boolean);
     87begin
     88  if FActive = AValue then Exit;
     89  inherited SetActive(AValue);
     90  if AValue then DoOpen else DoClose;
     91end;
     92
     93procedure TPlayerWindows.SetNotify(AValue: Boolean);
     94begin
     95  if FNotify = AValue then Exit;
     96  FNotify := AValue;
     97  FUseNotify := True;
     98end;
     99
     100procedure TPlayerWindows.SetWait(AValue: Boolean);
     101begin
     102  if FWait = AValue then Exit;
     103  FWait := AValue;
     104  FUseWait := True;
     105end;
     106
     107function TPlayerWindows.GetPosition: TDateTime;
     108var
     109  Parm: TMCI_Status_Parms;
     110begin
     111  FFlags := mci_Wait or mci_Status_Item;
     112  Parm.dwItem := mci_Status_Position;
     113  CheckError(mciSendCommand(FDeviceID, mci_Status, FFlags, Longint(@Parm)));
     114  Result := Parm.dwReturn * OneMillisecond;
     115end;
     116
     117procedure TPlayerWindows.SetPosition(AValue: TDateTime);
     118var
     119  Parm: TMCI_Seek_Parms;
     120begin
     121  if FDeviceID <> 0 then begin
     122    FFlags := 0;
     123    if FUseWait then
     124    begin
     125      if FWait then FFlags := mci_Wait;
     126      FUseWait := False;
     127    end
     128    else FFlags := mci_Wait;
     129    if FUseNotify then
     130    begin
     131      if FNotify then FFlags := FFlags or mci_Notify;
     132      FUseNotify := False;
     133    end;
     134    FFlags := FFlags or mci_To;
     135    Parm.dwTo := Round(AValue / OneMillisecond);
     136    CheckError(mciSendCommand(FDeviceID, mci_Seek, FFlags, Longint(@Parm)));
     137    if FPlaying then Play;
     138  end;
     139end;
     140
     141function TPlayerWindows.GetLength: TDateTime;
     142var
     143  Parm: TMCI_Status_Parms;
     144begin
     145  FFlags := mci_Wait or mci_Status_Item;
     146  Parm.dwItem := mci_Status_Length;
     147  mciSendCommand(FDeviceID, mci_Status, FFlags, Longint(@Parm));
     148  Result := Parm.dwReturn * OneMillisecond;
     149end;
     150
    29151procedure TPlayerWindows.Play;
    30 begin
    31   PlaySound();
    32   sndPlaySound(FFileName, SND_ASYNC);
     152var
     153  Parm: TMCI_Play_Parms;
     154begin
     155  if FDeviceID = 0 then DoOpen;
     156
     157  FFlags := 0;
     158  if FUseNotify then
     159  begin
     160    if FNotify then FFlags := mci_Notify;
     161    FUseNotify := False;
     162  end else FFlags := mci_Notify;
     163  if FUseWait then
     164  begin
     165    if FWait then FFlags := FFlags or mci_Wait;
     166    FUseWait := False;
     167  end;
     168  CheckError(mciSendCommand(FDeviceID, mci_Play, FFlags, Longint(@Parm)));
     169  FPlaying := True;
    33170end;
    34171
    35172procedure TPlayerWindows.Pause;
    36 begin
    37   inherited Pause;
     173var
     174  Parm: TMCI_Generic_Parms;
     175begin
     176  if FPlaying then begin
     177    CheckError(mciSendCommand(FDeviceID, mci_Pause, FFlags, Longint(@Parm)));
     178    FPlaying := False;
     179  end else begin
     180    CheckError(mciSendCommand(FDeviceID, mci_Resume, FFlags, Longint(@Parm)));
     181    FPlaying := True;
     182  end;
    38183end;
    39184
    40185procedure TPlayerWindows.Stop;
    41 begin
    42   sndPlaySound(nil, 0);
     186var
     187  Parm: TMCI_Generic_Parms;
     188begin
     189  FFlags := 0;
     190  if FUseNotify then
     191  begin
     192    if FNotify then FFlags := mci_Notify;
     193    FUseNotify := False;
     194  end else FFlags := mci_Notify;
     195  if FUseWait then
     196  begin
     197    if FWait then FFlags := FFlags or mci_Wait;
     198    FUseWait := False;
     199  end;
     200  CheckError(mciSendCommand(FDeviceID, mci_Stop, FFlags, Longint(@Parm)));
     201  FPlaying := False;
     202end;
     203
     204constructor TPlayerWindows.Create;
     205begin
     206  inherited Create;
     207end;
     208
     209destructor TPlayerWindows.Destroy;
     210begin
     211  Active := False;
     212  inherited Destroy;
     213end;
     214
     215procedure TPlayerWindows.DoOpen;
     216const
     217  DeviceName: array[TMPDeviceTypes] of PChar = ('', 'AVIVideo', 'CDAudio', 'DAT',
     218    'DigitalVideo', 'MMMovie', 'Other', 'Overlay', 'Scanner', 'Sequencer',
     219    'VCR', 'Videodisc', 'WaveAudio');
     220var
     221  Parm: TMCI_Open_Parms;
     222begin
     223  if FDeviceId <> 0 then DoClose;
     224
     225  FillChar(Parm, SizeOf(TMCI_Open_Parms), 0);
     226  Parm.dwCallback := 0;
     227  Parm.lpstrDeviceType := DeviceName[FDeviceType];
     228  Parm.lpstrElementName := PChar(FFileName);
     229
     230  FFlags := 0;
     231
     232  if FUseWait then
     233  begin
     234    if FWait then FFlags := mci_Wait;
     235    FUseWait := False;
     236  end
     237  else
     238    FFlags := mci_Wait;
     239
     240  if FUseNotify then
     241  begin
     242    if FNotify then FFlags := FFlags or mci_Notify;
     243    FUseNotify := False;
     244  end;
     245
     246  if FDeviceType <> dtAutoSelect then
     247    FFlags := FFlags or mci_Open_Type;
     248
     249  if FDeviceType <> dtAutoSelect then
     250    FFlags := FFlags or mci_Open_Type
     251  else
     252    FFlags := FFlags or MCI_OPEN_ELEMENT;
     253
     254  //Parm.dwCallback := Handle;
     255  CheckError(mciSendCommand(0, mci_Open, FFlags, Longint(@Parm)));
     256  FDeviceID := Parm.wDeviceID;
     257  FActive := True;
     258end;
     259
     260procedure TPlayerWindows.DoClose;
     261var
     262  Parm: TMCI_Generic_Parms;
     263begin
     264  if FDeviceId <> 0 then begin
     265    FFlags := 0;
     266    if FUseWait then
     267    begin
     268      if FWait then FFlags := mci_Wait;
     269      FUseWait := False;
     270    end
     271    else FFlags := mci_Wait;
     272    if FUseNotify then
     273    begin
     274      if FNotify then FFlags := FFlags or mci_Notify;
     275      FUseNotify := False;
     276    end;
     277    CheckError(mciSendCommand(FDeviceId, mci_Close, FFlags, Longint(@Parm)));
     278    FDeviceId := 0;
     279    FActive := False;
     280  end;
    43281end;
    44282
Note: See TracChangeset for help on using the changeset viewer.