bingada_1.0.0_a25771e2/src/q_sound.canberra.adb

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
--*****************************************************************************
--*
--* PROJECT:            BINGADA
--*
--* FILE:               q_sound.adb
--*
--* AUTHOR:             Manuel <mgrojo at github>
--*
--*****************************************************************************

-- External sound library
--
with Canberra;

with Ada.Directories;
with Ada.Strings.Fixed;

with Gtkada.Intl;

package body Q_Sound is

  V_Context : Canberra.Context := Canberra.Create
    (Name => "BingAda",
     Id   => "bingada.lovelace",
     Icon => "applications-games");

  --==================================================================
  procedure P_Initialize is null;
  --==================================================================

  procedure P_Play_Number (V_Number : Positive) is

    C_Number_Image   : constant String := Ada.Strings.Fixed.Trim
      (V_Number'Image, Ada.Strings.Left);
    C_Path           : constant String := "media/";
    C_Extension      : constant String := ".ogg";
    C_Lang_Code_Last : constant        := 2;
    C_Locale         : constant String := Gtkada.Intl.Getlocale;
    C_Default_Lang   : constant String := "en";

    V_Lang : String (1 .. C_Lang_Code_Last) := C_Default_Lang;
    V_Sound : Canberra.Sound;
  begin

    if C_Locale'Length >= C_Lang_Code_Last then

      V_Lang := C_Locale (C_Locale'First ..
                            C_Locale'First + C_Lang_Code_Last - 1);
    end if;

    if not Ada.Directories.Exists
      (C_Path & V_Lang & '/' & C_Number_Image & C_Extension) then

      V_Lang := C_Default_Lang;
    end if;

    V_Context.Play_File
      (File_Name  => C_Path & V_Lang & '/' & C_Number_Image & C_Extension,
       File_Sound => V_Sound,
       Kind       => Canberra.Music,
       Name       => "Number");

  end P_Play_Number;

  --==================================================================

  -- Nothing to do in the canberra version
  --
  procedure P_Clean_Up is null;

end Q_Sound;