Multisense example

This is a simple example in which a rect is created and sound and tone are played on mouse down event.

Focusing on the creation of sample and tone. It should be noted that creation of sample sound is from any supported (sndfile lib) audio file, tone from of specific audible frequency range are controlled by the theme:

The full source code follows:

#include <Eina.h>
#include <Evas.h>
#include <Ecore.h>
#include <Ecore_Evas.h>
#include <Edje.h>
#ifndef PACKAGE_DATA_DIR
#define PACKAGE_DATA_DIR "."
#endif
#define WIDTH 300
#define HEIGHT 300
static Evas_Object *create_my_group(Evas *canvas)
{
Evas_Object *edje;
edje = edje_object_add(canvas);
if (!edje)
{
EINA_LOG_CRIT("could not create edje object!");
return NULL;
}
if (!edje_object_file_set(edje, PACKAGE_DATA_DIR"/multisense.edj",
"example_group"))
{
int err = edje_object_load_error_get(edje);
const char *errmsg = edje_load_error_str(err);
EINA_LOG_ERR("could not load 'example_group' from multisense.edj: %s",
errmsg);
return NULL;
}
evas_object_move(edje, 0, 0);
evas_object_resize(edje, WIDTH, HEIGHT);
return edje;
}
int main()
{
Ecore_Evas *window;
Evas *canvas;
Evas_Object *edje;
window = ecore_evas_new(NULL, 0, 0, WIDTH, HEIGHT, NULL);
if (!window)
{
EINA_LOG_CRIT("could not create window.");
return -1;
}
canvas = ecore_evas_get(window);
edje = create_my_group(canvas);
if (!edje)
return -2;
ecore_evas_show(window);
ecore_evas_free(window);
return 0;
}
collections {
sounds {
sample {
name: "sound_name1" RAW;
source: "duck.wav";
}
tone: "tone-name" 2600;
}
group {
name: "example_group";
parts {
part {
name: "sample_bg";
type: RECT;
mouse_events: 1;
description {
state: "default" 0.0;
min: 300 150;
max: 300 150;
color: 200 200 200 100;
align: 0.5 0.0;
rel1 {
relative: 0.0 0.0;
}
}
}
part {
name: "sample_text";
type: TEXT;
mouse_events: 1;
repeat_events: 1;
description {
state: "default" 0.0;
rel1.to: "sample_bg";
rel2.to: "sample_bg";
text {
font: "Sans";
size: 20;
text: "Play Sound Sample";
}
}
}
part {
name: "tone_bg";
type: RECT;
mouse_events: 1;
description {
state: "default" 0.0;
min: 300 150;
max: 300 150;
align: 0.5 0.0;
color: 180 180 180 100;
rel1 {
relative: 0.0 1.0;
to: "sample_bg";
}
}
}
part {
name: "tone_text";
type: TEXT;
mouse_events: 1;
repeat_events: 1;
description {
state: "default" 0.0;
rel1.to: "tone_bg";
rel2.to: "tone_bg";
text {
font: "Sans";
size: 20;
text: "Play Tone";
}
}
}
programs {
program {
name: "click_sample1";
signal: "mouse,down,1";
source: "sample_bg";
action: PLAY_SAMPLE "sound_name1" 1.0;
}
program {
name: "click_tone";
signal: "mouse,down,1";
source: "tone_bg";
action: PLAY_TONE "tone-name" 0.1;
}
}
}
}
}