Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src/gc_sound/src/test_gc_sound.c
blob: 745cfff37f85e8529f014445e184ce290937b415 (plain)
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#include <glib.h>
#include <gc-sound.h>
#include <stdio.h>

void finish(GcSoundItem *item, gboolean stopped, gpointer data)
{
  g_warning("Return of finish callback %s %s", GC_SOUND_OBJECT(item)->nick, stopped ? "STOPPED" : "normal");
}

void start(GcSoundItem *item, gpointer data)
{
  g_warning("Return of start callback %s",  GC_SOUND_OBJECT(item)->nick);
}

main (int argc, char *argv)
{
  GcSoundMixer *gcmix;
  GcSoundChannel* gcchan1, *gcchan2;
  GcSoundItem *item1, *item2, *item3, *root1, *root2, *item1_1, *item1_2; 
   g_type_init ();

  /* Sound mixer opens SDL and audio device */
  gcmix = gc_sound_mixer_sdl_new();
   GC_SOUND_OBJECT(gcmix)->nick = "gcmix";

  /* We open two chans to play simultaneously */
  gcchan1 = gc_sound_mixer_new_channel(gcmix);
  gcchan2 = gc_sound_mixer_new_channel(gcmix);

  GC_SOUND_OBJECT(gcchan1)->nick = "gcchan1";
  GC_SOUND_OBJECT(gcchan2)->nick = "gcchan2";

  /* Each chan has a root item, where we group the sounds to play in that channel*/
  root1 = GC_SOUND_ITEM(gc_sound_channel_get_root(gcchan1));
  root2 = GC_SOUND_ITEM(gc_sound_channel_get_root(gcchan2));

  GC_SOUND_OBJECT(root1)->nick="root1";
  GC_SOUND_OBJECT(root2)->nick="root2";

  /* create new item for our sounds */
  item1 = gc_sound_item_append_child (root1, NULL);
  // item2 = gc_sound_item_append_child (root2, "filename", "../../../../../gcompris_main/gcompris/boards/music/background/LRLaPause.ogg", NULL);
  
  item2 = gc_sound_item_append_child (root2, NULL);
   g_object_set( G_OBJECT(item2), "filename", "../../../../../gcompris_main/gcompris/boards/music/background/LRLaPause.ogg", NULL);
  item3 = gc_sound_item_append_child (root2, "filename", "../../../../../gcompris_main/gcompris/boards/sounds/bonus.ogg", NULL);
  item1_1 = gc_sound_item_append_child (item1, "filename", "../../../../../gcompris_main/gcompris/boards/sounds/train.ogg", NULL);
  item1_2 = gc_sound_item_append_child (item1, "filename",  "../../../../../gcompris_main/gcompris/boards/sounds/wahoo.ogg", "destroy_after_play", TRUE, NULL);
  
  GC_SOUND_OBJECT(item1)->nick = "item1";
  GC_SOUND_OBJECT(item2)->nick = "item2";
  GC_SOUND_OBJECT(item3)->nick = "item3";
  GC_SOUND_OBJECT(item1_1)->nick = "item1_1";
  GC_SOUND_OBJECT(item1_2)->nick = "item1_2";

   /* set file sound name */
  /*   gc_sound_item_set_filename(item1_1, "../../../../../gcompris_main/gcompris/boards/sounds/wahoo.ogg");
   gc_sound_item_set_filename(item1_2, "../../../../../gcompris_main/gcompris/boards/sounds/wahoo.ogg");
   gc_sound_item_set_filename(item2, "../../../../../gcompris_main/gcompris/boards/music/background/LRLaPause.ogg");
   gc_sound_item_set_filename(item3, "../../../../../gcompris_main/gcompris/boards/sounds/bonus.ogg");
  */

   // test
   gc_sound_item_set_filename(item1_1, NULL);
   gc_sound_item_set_filename(item1_1, "../../../../../gcompris_main/gcompris/boards/sounds/train.ogg");

   //policy test: works on channel and on item.
   //gc_sound_channel_set_policy(gcchan2, GC_SOUND_INTERRUPT_AND_PLAY);
   gc_sound_item_set_policy(item3, INTERRUPT_AND_PLAY);

   // callback connection
   //gc_sound_item_connect__play_finished(item2, (GCallback) finish, NULL);
   //gc_sound_item_connect__play_finished(item3, (GCallback) finish, NULL);
   //gc_sound_item_connect__play_started(item1_1, (GCallback) start, NULL);
   //gc_sound_item_connect__play_started(item1_2, (GCallback) start, NULL);
   g_signal_connect( item2, "play_end", (GCallback) finish, NULL);
   g_signal_connect( item2, "play_end", (GCallback) finish, NULL);
   g_signal_connect( item1_1, "play_start",  (GCallback) start, NULL);
   g_signal_connect( item1_2, "play_start",  (GCallback) start, NULL);
   g_signal_connect( item1_2, "play_end",  (GCallback) finish, NULL);


/*    // test mute  */
/*    //gc_sound_item_set_mute(item1_1, TRUE); */

    gc_sound_item_set_loop(item1, TRUE); 

    //play 
    gc_sound_item_play(item2); 
    g_usleep(1000000); 

    /*   will loop with the two sounds of group */
    gc_sound_item_play(item1); 

    g_usleep(8000000);

    //stopping loop after next
    g_warning("stopping loop on item1");
    gc_sound_item_set_loop(item1, FALSE);
    g_usleep(3000000);

    //this will stop item2 because of policy
    gc_sound_item_play(item3);
    //gc_sound_object_destroy(GC_SOUND_OBJECT(gcchan2));

    g_warning("destroying item1");
    gc_sound_object_destroy(GC_SOUND_OBJECT(item1));

    g_usleep(3000000);
    g_warning("destroying root2");
    gc_sound_object_destroy(GC_SOUND_OBJECT(root2));

    g_usleep(3000000);

    g_warning("destroying gcmix");
    gc_sound_object_destroy(GC_SOUND_OBJECT(gcmix));

    //gc_sound_object_destroy(GC_SOUND_OBJECT(gcmix2));

    g_usleep(3000000);
   /* infinite loop */
    g_warning("loop now");
   g_main_loop_run(g_main_loop_new  (NULL, FALSE));

}