Changeset 276 for CoolAudio


Ignore:
Timestamp:
Oct 4, 2011, 1:18:33 PM (13 years ago)
Author:
george
Message:
  • Modified: MPlayer system now play audio files.
Location:
CoolAudio
Files:
2 added
8 edited

Legend:

Unmodified
Added
Removed
  • CoolAudio/CoolAudio.lpk

    r275 r276  
    1212        <Debugging>
    1313          <GenerateDebugInfo Value="True"/>
    14           <DebugInfoType Value="dsAuto"/>
    1514        </Debugging>
    1615      </Linking>
     
    6261    </Files>
    6362    <Type Value="RunAndDesignTime"/>
    64     <RequiredPkgs Count="1">
     63    <RequiredPkgs Count="2">
    6564      <Item1>
     65        <PackageName Value="LCL"/>
     66      </Item1>
     67      <Item2>
    6668        <PackageName Value="FCL"/>
    67       </Item1>
     69      </Item2>
    6870    </RequiredPkgs>
    6971    <UsageOptions>
  • CoolAudio/Demo

    • Property svn:ignore
      •  

        old new  
        2211-seal-amazing.mp3
        33lib
         4Demo.exe
  • CoolAudio/Demo/Demo.lpi

    r275 r276  
    3838      </Item2>
    3939    </RequiredPackages>
    40     <Units Count="10">
     40    <Units Count="20">
    4141      <Unit0>
    4242        <Filename Value="Demo.lpr"/>
    4343        <IsPartOfProject Value="True"/>
    4444        <UnitName Value="Demo"/>
    45         <UsageCount Value="21"/>
     45        <UsageCount Value="28"/>
    4646      </Unit0>
    4747      <Unit1>
     
    5151        <ResourceBaseClass Value="Form"/>
    5252        <UnitName Value="UMainForm"/>
    53         <IsVisibleTab Value="True"/>
    5453        <EditorIndex Value="0"/>
    5554        <WindowIndex Value="0"/>
    56         <TopLine Value="1"/>
    57         <CursorPos X="25" Y="9"/>
    58         <UsageCount Value="21"/>
     55        <TopLine Value="58"/>
     56        <CursorPos X="66" Y="65"/>
     57        <UsageCount Value="28"/>
    5958        <Loaded Value="True"/>
    6059        <LoadedDesigner Value="True"/>
     
    6362        <Filename Value="../UCoolAudio.pas"/>
    6463        <UnitName Value="UCoolAudio"/>
    65         <EditorIndex Value="1"/>
    66         <WindowIndex Value="0"/>
    67         <TopLine Value="1"/>
    68         <CursorPos X="1" Y="11"/>
    69         <UsageCount Value="10"/>
    70         <Loaded Value="True"/>
     64        <WindowIndex Value="0"/>
     65        <TopLine Value="1"/>
     66        <CursorPos X="34" Y="6"/>
     67        <UsageCount Value="10"/>
    7168      </Unit2>
    7269      <Unit3>
    7370        <Filename Value="../Systems/UAudioSystemFMOD.pas"/>
    7471        <UnitName Value="UAudioSystemFMOD"/>
    75         <EditorIndex Value="5"/>
    76         <WindowIndex Value="0"/>
    77         <TopLine Value="1"/>
    78         <CursorPos X="46" Y="11"/>
    79         <UsageCount Value="10"/>
     72        <EditorIndex Value="6"/>
     73        <WindowIndex Value="0"/>
     74        <TopLine Value="1"/>
     75        <CursorPos X="20" Y="111"/>
     76        <UsageCount Value="13"/>
    8077        <Loaded Value="True"/>
    8178      </Unit3>
     
    8380        <Filename Value="../UPlaylist.pas"/>
    8481        <UnitName Value="UPlaylist"/>
    85         <EditorIndex Value="7"/>
    8682        <WindowIndex Value="0"/>
    8783        <TopLine Value="1"/>
    8884        <CursorPos X="29" Y="8"/>
    89         <UsageCount Value="20"/>
    90         <Loaded Value="True"/>
     85        <UsageCount Value="22"/>
    9186      </Unit4>
    9287      <Unit5>
    9388        <Filename Value="../fmodintf/fmoddyn.pas"/>
    9489        <UnitName Value="fmoddyn"/>
    95         <EditorIndex Value="8"/>
    9690        <WindowIndex Value="0"/>
    9791        <TopLine Value="46"/>
    9892        <CursorPos X="10" Y="63"/>
    99         <UsageCount Value="10"/>
    100         <Loaded Value="True"/>
     93        <UsageCount Value="12"/>
    10194      </Unit5>
    10295      <Unit6>
    10396        <Filename Value="../fmodintf/fmodtypes.pas"/>
    10497        <UnitName Value="fmodtypes"/>
    105         <EditorIndex Value="6"/>
    10698        <WindowIndex Value="0"/>
    10799        <TopLine Value="158"/>
    108100        <CursorPos X="43" Y="178"/>
    109         <UsageCount Value="10"/>
    110         <Loaded Value="True"/>
     101        <UsageCount Value="12"/>
    111102      </Unit6>
    112103      <Unit7>
    113104        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
    114105        <UnitName Value="UAudioSystemMPlayer"/>
    115         <EditorIndex Value="4"/>
    116         <WindowIndex Value="0"/>
    117         <TopLine Value="1"/>
    118         <CursorPos X="34" Y="8"/>
    119         <UsageCount Value="10"/>
     106        <IsVisibleTab Value="True"/>
     107        <EditorIndex Value="3"/>
     108        <WindowIndex Value="0"/>
     109        <TopLine Value="258"/>
     110        <CursorPos X="8" Y="260"/>
     111        <UsageCount Value="13"/>
    120112        <Loaded Value="True"/>
    121113      </Unit7>
     
    123115        <Filename Value="../CoolAudio.pas"/>
    124116        <UnitName Value="CoolAudio"/>
    125         <EditorIndex Value="2"/>
    126117        <WindowIndex Value="0"/>
    127118        <TopLine Value="1"/>
    128119        <CursorPos X="1" Y="1"/>
    129120        <UsageCount Value="10"/>
    130         <Loaded Value="True"/>
    131121      </Unit8>
    132122      <Unit9>
    133123        <Filename Value="../Systems/UAudioSystem.pas"/>
    134124        <UnitName Value="UAudioSystem"/>
    135         <EditorIndex Value="3"/>
    136         <WindowIndex Value="0"/>
    137         <TopLine Value="48"/>
    138         <CursorPos X="1" Y="81"/>
    139         <UsageCount Value="20"/>
     125        <EditorIndex Value="2"/>
     126        <WindowIndex Value="0"/>
     127        <TopLine Value="70"/>
     128        <CursorPos X="32" Y="82"/>
     129        <UsageCount Value="23"/>
    140130        <Loaded Value="True"/>
    141131      </Unit9>
     132      <Unit10>
     133        <Filename Value="../../../../Lazarus/0.9.31_2.5.1/lcl/stdctrls.pp"/>
     134        <UnitName Value="StdCtrls"/>
     135        <WindowIndex Value="0"/>
     136        <TopLine Value="1046"/>
     137        <CursorPos X="17" Y="1067"/>
     138        <UsageCount Value="10"/>
     139      </Unit10>
     140      <Unit11>
     141        <Filename Value="../../../../Lazarus/0.9.31_2.5.1/lcl/controls.pp"/>
     142        <UnitName Value="Controls"/>
     143        <EditorIndex Value="1"/>
     144        <WindowIndex Value="0"/>
     145        <TopLine Value="2427"/>
     146        <CursorPos X="24" Y="2429"/>
     147        <UsageCount Value="10"/>
     148        <Loaded Value="True"/>
     149      </Unit11>
     150      <Unit12>
     151        <Filename Value="../../../../Lazarus/0.9.31_2.5.1/lcl/lclclasses.pp"/>
     152        <UnitName Value="LCLClasses"/>
     153        <WindowIndex Value="0"/>
     154        <TopLine Value="38"/>
     155        <CursorPos X="32" Y="50"/>
     156        <UsageCount Value="10"/>
     157      </Unit12>
     158      <Unit13>
     159        <Filename Value="../../../../Lazarus/0.9.31_2.5.1/lcl/widgetset/wslclclasses.pp"/>
     160        <UnitName Value="WSLCLClasses"/>
     161        <WindowIndex Value="0"/>
     162        <TopLine Value="120"/>
     163        <CursorPos X="16" Y="131"/>
     164        <UsageCount Value="10"/>
     165      </Unit13>
     166      <Unit14>
     167        <Filename Value="../../../../Lazarus/0.9.31_2.5.1/lcl/include/buttons.inc"/>
     168        <WindowIndex Value="0"/>
     169        <TopLine Value="26"/>
     170        <CursorPos X="18" Y="28"/>
     171        <UsageCount Value="10"/>
     172      </Unit14>
     173      <Unit15>
     174        <Filename Value="../../../../Lazarus/0.9.31_2.5.1/lcl/include/buttoncontrol.inc"/>
     175        <WindowIndex Value="0"/>
     176        <TopLine Value="65"/>
     177        <CursorPos X="17" Y="67"/>
     178        <UsageCount Value="10"/>
     179      </Unit15>
     180      <Unit16>
     181        <Filename Value="../../../../Lazarus/0.9.31_2.5.1/lcl/include/control.inc"/>
     182        <WindowIndex Value="0"/>
     183        <TopLine Value="4280"/>
     184        <CursorPos X="19" Y="4283"/>
     185        <UsageCount Value="10"/>
     186      </Unit16>
     187      <Unit17>
     188        <Filename Value="../../../../Lazarus/0.9.31_2.5.1/lcl/include/wincontrol.inc"/>
     189        <WindowIndex Value="0"/>
     190        <TopLine Value="6307"/>
     191        <CursorPos X="17" Y="6320"/>
     192        <UsageCount Value="10"/>
     193      </Unit17>
     194      <Unit18>
     195        <Filename Value="../../../../Lazarus/0.9.31_2.5.1/fpc/2.5.1/source/packages/fcl-process/src/process.pp"/>
     196        <UnitName Value="process"/>
     197        <EditorIndex Value="4"/>
     198        <WindowIndex Value="0"/>
     199        <TopLine Value="13"/>
     200        <CursorPos X="21" Y="26"/>
     201        <UsageCount Value="10"/>
     202        <Loaded Value="True"/>
     203      </Unit18>
     204      <Unit19>
     205        <Filename Value="../../../../Lazarus/0.9.31_2.5.1/fpc/2.5.1/source/packages/libogcfpc/src/debug.pp"/>
     206        <UnitName Value="debug"/>
     207        <EditorIndex Value="5"/>
     208        <WindowIndex Value="0"/>
     209        <TopLine Value="1"/>
     210        <CursorPos X="1" Y="1"/>
     211        <UsageCount Value="10"/>
     212        <Loaded Value="True"/>
     213      </Unit19>
    142214    </Units>
    143     <JumpHistory Count="13" HistoryIndex="12">
     215    <JumpHistory Count="30" HistoryIndex="29">
    144216      <Position1>
    145         <Filename Value="../UCoolAudio.pas"/>
    146         <Caret Line="22" Column="75" TopLine="1"/>
     217        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     218        <Caret Line="232" Column="1" TopLine="212"/>
    147219      </Position1>
    148220      <Position2>
    149         <Filename Value="../UCoolAudio.pas"/>
    150         <Caret Line="55" Column="3" TopLine="37"/>
     221        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     222        <Caret Line="244" Column="42" TopLine="228"/>
    151223      </Position2>
    152224      <Position3>
    153         <Filename Value="../UCoolAudio.pas"/>
    154         <Caret Line="18" Column="60" TopLine="1"/>
     225        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     226        <Caret Line="239" Column="1" TopLine="228"/>
    155227      </Position3>
    156228      <Position4>
    157         <Filename Value="../UCoolAudio.pas"/>
    158         <Caret Line="56" Column="18" TopLine="37"/>
     229        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     230        <Caret Line="240" Column="1" TopLine="228"/>
    159231      </Position4>
    160232      <Position5>
    161         <Filename Value="../UCoolAudio.pas"/>
    162         <Caret Line="46" Column="33" TopLine="21"/>
     233        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     234        <Caret Line="241" Column="1" TopLine="228"/>
    163235      </Position5>
    164236      <Position6>
    165         <Filename Value="../UCoolAudio.pas"/>
    166         <Caret Line="56" Column="3" TopLine="45"/>
     237        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     238        <Caret Line="242" Column="1" TopLine="228"/>
    167239      </Position6>
    168240      <Position7>
    169         <Filename Value="../UCoolAudio.pas"/>
    170         <Caret Line="11" Column="11" TopLine="1"/>
     241        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     242        <Caret Line="243" Column="1" TopLine="228"/>
    171243      </Position7>
    172244      <Position8>
    173         <Filename Value="../UCoolAudio.pas"/>
    174         <Caret Line="19" Column="12" TopLine="1"/>
     245        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     246        <Caret Line="240" Column="12" TopLine="228"/>
    175247      </Position8>
    176248      <Position9>
    177         <Filename Value="../UCoolAudio.pas"/>
    178         <Caret Line="20" Column="34" TopLine="2"/>
     249        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     250        <Caret Line="219" Column="53" TopLine="203"/>
    179251      </Position9>
    180252      <Position10>
    181         <Filename Value="../UCoolAudio.pas"/>
    182         <Caret Line="1" Column="1" TopLine="1"/>
     253        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     254        <Caret Line="240" Column="1" TopLine="227"/>
    183255      </Position10>
    184256      <Position11>
    185         <Filename Value="../CoolAudio.pas"/>
    186         <Caret Line="1" Column="1" TopLine="1"/>
     257        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     258        <Caret Line="241" Column="1" TopLine="227"/>
    187259      </Position11>
    188260      <Position12>
    189         <Filename Value="../CoolAudio.pas"/>
    190         <Caret Line="19" Column="44" TopLine="1"/>
     261        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     262        <Caret Line="242" Column="1" TopLine="227"/>
    191263      </Position12>
    192264      <Position13>
    193         <Filename Value="UMainForm.pas"/>
    194         <Caret Line="46" Column="15" TopLine="37"/>
     265        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     266        <Caret Line="243" Column="1" TopLine="227"/>
    195267      </Position13>
     268      <Position14>
     269        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     270        <Caret Line="240" Column="12" TopLine="227"/>
     271      </Position14>
     272      <Position15>
     273        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     274        <Caret Line="110" Column="37" TopLine="108"/>
     275      </Position15>
     276      <Position16>
     277        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     278        <Caret Line="239" Column="1" TopLine="227"/>
     279      </Position16>
     280      <Position17>
     281        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     282        <Caret Line="240" Column="1" TopLine="227"/>
     283      </Position17>
     284      <Position18>
     285        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     286        <Caret Line="241" Column="1" TopLine="227"/>
     287      </Position18>
     288      <Position19>
     289        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     290        <Caret Line="240" Column="10" TopLine="227"/>
     291      </Position19>
     292      <Position20>
     293        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     294        <Caret Line="126" Column="50" TopLine="108"/>
     295      </Position20>
     296      <Position21>
     297        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     298        <Caret Line="230" Column="1" TopLine="218"/>
     299      </Position21>
     300      <Position22>
     301        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     302        <Caret Line="231" Column="1" TopLine="218"/>
     303      </Position22>
     304      <Position23>
     305        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     306        <Caret Line="109" Column="1" TopLine="97"/>
     307      </Position23>
     308      <Position24>
     309        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     310        <Caret Line="110" Column="1" TopLine="97"/>
     311      </Position24>
     312      <Position25>
     313        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     314        <Caret Line="111" Column="1" TopLine="97"/>
     315      </Position25>
     316      <Position26>
     317        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     318        <Caret Line="112" Column="1" TopLine="97"/>
     319      </Position26>
     320      <Position27>
     321        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     322        <Caret Line="116" Column="1" TopLine="97"/>
     323      </Position27>
     324      <Position28>
     325        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     326        <Caret Line="233" Column="45" TopLine="218"/>
     327      </Position28>
     328      <Position29>
     329        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     330        <Caret Line="112" Column="45" TopLine="97"/>
     331      </Position29>
     332      <Position30>
     333        <Filename Value="../Systems/UAudioSystemMPlayer.pas"/>
     334        <Caret Line="230" Column="1" TopLine="218"/>
     335      </Position30>
    196336    </JumpHistory>
    197337  </ProjectOptions>
     
    208348      <Debugging>
    209349        <GenerateDebugInfo Value="True"/>
    210         <DebugInfoType Value="dsAuto"/>
    211350      </Debugging>
    212351      <Options>
     
    221360  </CompilerOptions>
    222361  <Debugging>
    223     <BreakPoints Count="2">
     362    <Watches Count="1">
    224363      <Item1>
    225         <Kind Value="bpkSource"/>
    226         <WatchScope Value="wpsLocal"/>
    227         <WatchKind Value="wpkWrite"/>
    228         <Source Value="../UFMODAudio.pas"/>
    229         <Line Value="59"/>
     364        <Expression Value="MPOptions"/>
    230365      </Item1>
    231       <Item2>
    232         <Kind Value="bpkSource"/>
    233         <WatchScope Value="wpsLocal"/>
    234         <WatchKind Value="wpkWrite"/>
    235         <Source Value="../UFMODAudio.pas"/>
    236         <Line Value="49"/>
    237       </Item2>
    238     </BreakPoints>
     366    </Watches>
    239367    <Exceptions Count="3">
    240368      <Item1>
  • CoolAudio/Demo/UMainForm.lfm

    r275 r276  
    11object MainForm: TMainForm
    2   Left = 479
     2  Left = 531
    33  Height = 240
    4   Top = 249
    5   Width = 359
     4  Top = 300
     5  Width = 435
    66  Caption = 'CoolAudio demo'
    77  ClientHeight = 240
    8   ClientWidth = 359
     8  ClientWidth = 435
    99  OnCreate = FormCreate
    1010  OnDestroy = FormDestroy
     
    1414    Height = 21
    1515    Top = 12
    16     Width = 264
     16    Width = 340
    1717    Anchors = [akTop, akLeft, akRight]
    1818    TabOrder = 0
    19     Text = '11-seal-amazing.mp3'
     19    Text = 'h:\Projekty2\PascalClassLibrary\CoolAudio\Demo\4 Strings - Catch A Fall (Radio Edit).mp3'
    2020  end
    2121  object Button1: TButton
    22     Left = 277
     22    Left = 353
    2323    Height = 25
    2424    Top = 12
     
    2626    Anchors = [akTop, akRight]
    2727    Caption = 'Select...'
     28    OnClick = Button1Click
    2829    TabOrder = 1
    2930  end
     
    5960    Height = 33
    6061    Top = 90
    61     Width = 341
     62    Width = 417
    6263    Position = 0
    6364    Anchors = [akTop, akLeft, akRight]
    6465    TabOrder = 5
    6566  end
     67  object OpenDialog1: TOpenDialog
     68    Filter = 'Any file (*.*)|*.*|MP3 (*.mp3)|*.mp3|WAV (*.wav)|*.wav'
     69    left = 296
     70    top = 48
     71  end
    6672end
  • CoolAudio/Demo/UMainForm.pas

    r275 r276  
    1919    ButtonPause: TButton;
    2020    Edit1: TEdit;
     21    OpenDialog1: TOpenDialog;
    2122    TrackBar1: TTrackBar;
     23    procedure Button1Click(Sender: TObject);
    2224    procedure ButtonPauseClick(Sender: TObject);
    2325    procedure ButtonPlayClick(Sender: TObject);
     
    4345procedure TMainForm.FormCreate(Sender: TObject);
    4446begin
    45   AudioSystem := TFMODAudioSystem.Create;
    46   Player := TFMODPlayer.Create;
     47  AudioSystem := TAudioSystemMPlayer.Create;
     48  TAudioSystemMPlayer(AudioSystem).Path := 'c:\Program Files\SMPlayer\mplayer\mplayer.exe';
     49  Player := TPlayerMPlayer.Create;
     50  Player.AudioSystem := AudioSystem;
    4751end;
    4852
     
    5559procedure TMainForm.ButtonPlayClick(Sender: TObject);
    5660begin
     61  Player.FileName := Edit1.Text;
    5762  Player.Play;
    5863end;
     
    6873end;
    6974
     75procedure TMainForm.Button1Click(Sender: TObject);
     76begin
     77  if OpenDialog1.Execute then Edit1.Text := OpenDialog1.FileName;
     78end;
     79
    7080end.
    7181
  • CoolAudio/Systems/UAudioSystem.pas

    r275 r276  
    1515  { TAudioSystem }
    1616
    17   TAudioSystem = class
     17  TAudioSystem = class(TComponent)
    1818  protected
    1919    FOutputDriver: TOutputDriver;
     
    2727  { TPlayer }
    2828
    29   TPlayer = class
     29  TPlayer = class(TComponent)
    3030  private
    3131  protected
     32    FFileName: string;
     33    FAudioSystem: TAudioSystem;
    3234    FPlaying: Boolean;
    3335    function GetMuted: Boolean; virtual; abstract;
     
    3840    procedure SetPosition(AValue: TDateTime); virtual; abstract;
    3941    procedure SetVolume(AValue: Real); virtual; abstract;
     42    procedure SetFileName(AValue: string); virtual;
    4043  public
    4144    procedure Play; virtual; abstract;
     
    4649    property Volume: Real read GetVolume write SetVolume; // 0..1
    4750    property Muted: Boolean read GetMuted write SetMuted;
     51    property AudioSystem: TAudioSystem read FAudioSystem write FAudioSystem;
     52    property FileName: string read FFileName write SetFileName;
    4853    constructor Create; virtual;
    4954  end;
     
    5661
    5762{ TPlayer }
     63
     64procedure TPlayer.SetFileName(AValue: string);
     65begin
     66  if AValue = FFileName then Exit;
     67  FFileName := AValue;
     68end;
    5869
    5970constructor TPlayer.Create;
     
    7283constructor TAudioSystem.Create;
    7384begin
    74 
     85  {$IFDEF Windows}
     86  FOutputDriver := omWin32;
     87  {$ENDIF}
     88  {$IFDEF Linux}
     89  FOutputDriver := omAlsa;
     90  {$ENDIF}
    7591end;
    7692
  • CoolAudio/Systems/UAudioSystemFMOD.pas

    r275 r276  
    1010type
    1111
    12   { TFMODAudioSystem }
     12  { TAudioSystemFMOD }
    1313
    14   TFMODAudioSystem = class(TAudioSystem)
     14  TAudioSystemFMOD = class(TAudioSystem)
    1515  private
    1616    procedure SetOutputMode(AValue: TOutputDriver); override;
     
    2020  end;
    2121
    22   { TFMODPlayer }
     22  { TPlayerFMOD }
    2323
    24   TFMODPlayer = class(TPlayer)
     24  TPlayerFMOD = class(TPlayer)
    2525  private
    2626    FHandle: PFSoundStream;
     
    4141implementation
    4242
    43 { TFMODAudioSystem }
     43{ TAudioSystemFMOD }
    4444
    45 procedure TFMODAudioSystem.SetOutputMode(AValue: TOutputDriver);
     45procedure TAudioSystemFMOD.SetOutputMode(AValue: TOutputDriver);
    4646begin
    4747  inherited SetOutputMode(AValue);
     
    5656end;
    5757
    58 constructor TFMODAudioSystem.Create;
     58constructor TAudioSystemFMOD.Create;
    5959begin
    6060  inherited Create;
     
    6464end;
    6565
    66 destructor TFMODAudioSystem.Destroy;
     66destructor TAudioSystemFMOD.Destroy;
    6767begin
    6868  FMOD_Unload;
     
    7070end;
    7171
    72 { TFMODPlayer }
     72{ TPlayerFMOD }
    7373
    74 function TFMODPlayer.GetLength: TDateTime;
     74function TPlayerFMOD.GetLength: TDateTime;
    7575begin
    7676  Result := FVolume;
    7777end;
    7878
    79 function TFMODPlayer.GetPosition: TDateTime;
     79function TPlayerFMOD.GetPosition: TDateTime;
    8080begin
    8181
    8282end;
    8383
    84 function TFMODPlayer.GetVolume: Real;
     84function TPlayerFMOD.GetVolume: Real;
    8585begin
    8686  Result := FSOUND_GetVolume(0) / 256;
    8787end;
    8888
    89 function TFMODPlayer.GetMuted: Boolean;
     89function TPlayerFMOD.GetMuted: Boolean;
    9090begin
    9191  Result := FSOUND_GetMute(0);
    9292end;
    9393
    94 procedure TFMODPlayer.SetPosition(AValue: TDateTime);
     94procedure TPlayerFMOD.SetPosition(AValue: TDateTime);
    9595begin
    9696  if FPlaying then FSOUND_Stream_SetPosition(FHandle, Trunc(AValue / OneMillisecond));
    9797end;
    9898
    99 procedure TFMODPlayer.SetVolume(AValue: Real);
     99procedure TPlayerFMOD.SetVolume(AValue: Real);
    100100begin
    101101  FSOUND_SetVolume(0, Trunc(AValue * 256));
    102102end;
    103103
    104 procedure TFMODPlayer.SetMuted(AValue: Boolean);
     104procedure TPlayerFMOD.SetMuted(AValue: Boolean);
    105105begin
    106106  FSOUND_SetMute(0, AValue)
    107107end;
    108108
    109 procedure TFMODPlayer.Play;
     109procedure TPlayerFMOD.Play;
    110110begin
    111111  //FHandle := FSOUND_Stream_Open(tmpp, FSOUND_NONBLOCKING, 0, 0);
     
    113113end;
    114114
    115 procedure TFMODPlayer.Pause;
     115procedure TPlayerFMOD.Pause;
    116116begin
    117117  if FPlaying then
     
    119119end;
    120120
    121 procedure TFMODPlayer.Stop;
     121procedure TPlayerFMOD.Stop;
    122122begin
    123123  if FPlaying then begin
  • CoolAudio/Systems/UAudioSystemMPlayer.pas

    r275 r276  
    66
    77uses
    8   Classes, SysUtils, UAudioSystem;
     8  Classes, SysUtils, UAudioSystem, Process, Math, Dialogs;
     9
     10const
     11{$ifdef Unix}
     12  MPlayerExecutableName = 'mplayer';
     13{$endif}
     14{$ifdef Windows}
     15  MPlayerExecutableName = 'mplayer.exe';
     16{$endif}
    917
    1018type
     
    1321  TAudioSystemMPlayer = class(TAudioSystem)
    1422  private
     23    FPath: string;
    1524    procedure SetOutputMode(AValue: TOutputDriver); override;
     25    function FindPath: string;
    1626  public
    1727    constructor Create; override;
    1828    destructor Destroy; override;
     29    property Path: string read FPath write FPath;
    1930  end;
    2031
     
    2334  TPlayerMPlayer = class(TPlayer)
    2435  private
     36    FProcess: TProcess;
     37    FProcessActive: Boolean;
     38    FPlaying: Boolean;
    2539    FVolume: Real;
     40    function GetProcessOutput: string;
     41    procedure SendCommand(Command: string);
    2642    function GetLength: TDateTime; override;
    2743    function GetPosition: TDateTime; override;
     
    3147    procedure SetVolume(AValue: Real); override;
    3248    procedure SetMuted(AValue: Boolean); override;
     49    procedure SetFileName(AValue: string); override;
    3350  public
    3451    procedure Play; override;
    3552    procedure Pause; override;
    3653    procedure Stop; override;
    37   end;
    38 
     54    constructor Create; override;
     55    destructor Destroy; override;
     56  end;
     57
     58resourcestring
     59  SMPlayerNotFound = 'MPlayer executable not found. Make sure it is properly installed in binary path';
     60  SSendCommandException = 'Exception occured during sending command to MPlayer';
     61  SErrorReadingOutput = 'Exception while reading MPlayer output';
     62  SCantStopProcess = 'Can''t stop Mplayer process';
    3963
    4064implementation
     
    4771end;
    4872
     73function TAudioSystemMPlayer.FindPath: string;
     74var
     75  tmps: string;
     76  tmppath: string;
     77  I: Integer;
     78begin
     79  Result := '';
     80  {$ifdef Darwin}
     81  {$else}
     82  // Searches for MPlayer in the PATH
     83  tmps := GetEnvironmentVariable('PATH');
     84  repeat
     85    I := pos(':', tmps);
     86    if I = 0 then I := Length(tmps);
     87    tmppath := IncludeTrailingPathDelimiter(Copy(tmps, 0, I - 1)) + MPlayerExecutableName;
     88    if FileExists(tmppath) then Result := tmppath
     89      else Delete(tmps, 1, I);
     90  until (Length(tmps) <= 1) or (Result <> '');
     91  {$endif}
     92  if Result = '' then raise Exception.Create(SMPlayerNotFound);
     93end;
     94
    4995constructor TAudioSystemMPlayer.Create;
    5096begin
    5197  inherited Create;
     98  FPath := '';
    5299end;
    53100
     
    59106{ TPlayerMPlayer }
    60107
     108procedure TPlayerMPlayer.SendCommand(Command: string);
     109begin
     110  Command := Command + LineEnding;// #10; // MPLayer always needs #10 as Lineending, no matter if win32 or linux
     111  try
     112    if FProcessActive then FProcess.Input.Write(Command[1], System.Length(Command));
     113  except
     114    raise Exception.Create(SSendCommandException);
     115  end;
     116end;
     117
    61118function TPlayerMPlayer.GetLength: TDateTime;
    62119begin
    63   Result:=inherited GetLength;
    64120end;
    65121
    66122function TPlayerMPlayer.GetPosition: TDateTime;
    67 begin
    68   Result:=inherited GetPosition;
     123var
     124  tmps: string;
     125  I: Integer;
     126  Time: Real;
     127begin
     128  if FProcess.Running then begin
     129    I := 0;
     130    repeat
     131      SendCommand('get_property time_pos');
     132      Sleep(8);
     133      tmps := GetProcessOutput;
     134      Inc(I);
     135    until (Pos('time_pos', tmps) > 0) or (I >= 3);
     136    I := LastDelimiter('=', tmps);
     137    if I > 0 then begin
     138      Time := StrToFloat(Copy(tmps, I + 1, System.Length(tmps)));
     139      Time := Time * 1000;
     140      Result := Round(Time);
     141    end else Result := -1;
     142  end else Result := -1;
    69143end;
    70144
    71145function TPlayerMPlayer.GetVolume: Real;
    72146begin
    73   Result:=inherited GetVolume;
    74147end;
    75148
    76149function TPlayerMPlayer.GetMuted: Boolean;
    77 begin
    78   Result:=inherited GetMuted;
     150var
     151  tmps, s: string;
     152  I: Integer;
     153begin
     154  if FPlaying and FProcess.Running then begin
     155    repeat
     156      SendCommand('get_property mute');
     157      Sleep(5);
     158      tmps := GetProcessOutput;
     159    until Pos('mute', tmps) > 0;
     160    i := LastDelimiter('=', tmps);
     161    if i > 0 then begin
     162      s := Copy(tmps, i + 1, System.Length(tmps) - i);
     163      Result := s = 'yes';
     164    end;
     165  end;
    79166end;
    80167
    81168procedure TPlayerMPlayer.SetPosition(AValue: TDateTime);
    82169begin
    83   inherited SetPosition(AValue);
    84170end;
    85171
    86172procedure TPlayerMPlayer.SetVolume(AValue: Real);
    87173begin
    88   inherited SetVolume(AValue);
     174  if FVolume = AValue then Exit;
     175  FVolume := AValue;
     176  if FPlaying and FProcess.Running then begin
     177    if AValue < 0 then AValue := 0;
     178    if AValue > 1 then AValue := 1;
     179    SendCommand('set_property volume ' + IntToStr(Round(AValue * 100)) + '/1');
     180  end;
    89181end;
    90182
    91183procedure TPlayerMPlayer.SetMuted(AValue: Boolean);
    92184begin
    93   inherited SetMuted(AValue);
     185  if FPlaying and FProcess.Running then
     186    SendCommand('mute');
     187end;
     188
     189procedure TPlayerMPlayer.SetFileName(AValue: string);
     190begin
     191  inherited SetFileName(AValue);
     192end;
     193
     194function IntTodB(I, Ref: Longint): Integer;
     195var
     196  dB: Real;
     197begin
     198  if I = 0 then db := 0.001 else dB := I;
     199  dB := 20 * log10(dB / ref);
     200  Result := Round(dB);
    94201end;
    95202
    96203procedure TPlayerMPlayer.Play;
    97 begin
    98   inherited Play;
     204var
     205  MPOptions: String;
     206  Vol: Real;
     207begin
     208  if FPlaying then Stop;
     209  //FProcess := TProcess.Create(nil);
     210  MPOptions := '-slave -quiet -softvol';
     211  if AudioSystem.OutputMode = omAlsa then MPOptions := MPOptions + ' -ao alsa';
     212  if AudioSystem.OutputMode = omOSS then MPOptions := MPOptions + ' -ao oss';
     213  if AudioSystem.OutputMode = omWin32 then MPOptions := MPOptions + ' -ao win32';
     214  if AudioSystem.OutputMode = omDirectX then MPOptions := MPOptions + ' -ao dsound';
     215
     216  //MPOptions := '-af volume=' + IntToStr(IntTodB(Round(FVolume * 100), 100)) + ' ' + MPOptions;// -volume xx only supported with patched mplayer;
     217
     218  FProcess.CommandLine := TAudioSystemMPlayer(AudioSystem).FPath + ' ' + MPOptions + ' "' + FFileName + '"';
     219  FProcess.Options := FProcess.Options + [poUsePipes, poDefaultErrorMode, poStderrToOutPut, poNoConsole];
     220  //InputBox('', '', FProcess.CommandLine);
     221  FProcess.Execute;
     222
     223  if FProcess.Running then begin
     224    FPlaying := True;
     225  end;
    99226end;
    100227
    101228procedure TPlayerMPlayer.Pause;
    102229begin
    103   inherited Pause;
     230  if FPlaying then begin
     231    SendCommand('pause');
     232    Sleep(10);
     233    //FPaused := not FPaused;
     234  end;
    104235end;
    105236
    106237procedure TPlayerMPlayer.Stop;
    107238begin
    108   inherited Stop;
     239  if FPlaying then begin
     240    SendCommand('quit');
     241    Sleep(15);
     242    if FProcess.Running then begin
     243      Sleep(50);
     244      if FProcess.Running then
     245        if not FProcess.Terminate(0) then
     246          raise Exception.Create(SCantStopProcess);
     247    end;
     248  end;
     249  FPlaying := False;
     250end;
     251
     252constructor TPlayerMPlayer.Create;
     253begin
     254  inherited Create;
     255  FProcess := TProcess.Create(nil);
     256end;
     257
     258destructor TPlayerMPlayer.Destroy;
     259begin
     260  Stop;
     261  FProcess.Free;
     262  inherited Destroy;
     263end;
     264
     265function TPlayerMPlayer.GetProcessOutput: string;
     266var
     267  AStringList: TStringList;
     268begin
     269  try
     270    AStringList:=TStringList.Create;
     271    try
     272      if FProcess.Running then AStringList.LoadFromStream(FProcess.Output);
     273      if AStringList.Count > 0 then
     274        Result := AStringList.Strings[0]
     275        else Result := '';
     276    except
     277      Result := '';
     278      raise Exception.Create(SErrorReadingOutput);
     279    end;
     280  finally
     281    AStringList.Free;
     282  end;
    109283end;
    110284
Note: See TracChangeset for help on using the changeset viewer.