On Sun, 9 Feb 2014 22:00:14 +0900 Daniel Juyung Seo <seojuyu...@gmail.com> said:

> Ok, but it looks like channel itself is not specific to edje.
> Then why didn't you add channel to ecore_audio and use it in edje?
> Maybe am I missing some important points?

ecore_audio has an eo only api. the audio is then not controllable except via a
beta only api. 

> On Sun, Feb 9, 2014 at 9:46 PM, Carsten Haitzler <ras...@rasterman.com>wrote:
> 
> > On Sun, 9 Feb 2014 19:34:51 +0900 Daniel Juyung Seo <seojuyu...@gmail.com>
> > said:
> >
> > this is specific to edje. ecore_audio doesn't have the concept of such
> > channel
> > classes.
> >
> > > Hello,
> > > this does not look like a wrapper of ecore_audio.
> > > ecore_audio and edje_audio support audio features in different layers?
> > >
> > > Daniel Juyung Seo (SeoZ)
> > >
> > >
> > > On Sun, Feb 9, 2014 at 7:19 PM, Carsten Haitzler <ras...@rasterman.com
> > >wrote:
> > >
> > > > raster pushed a commit to branch master.
> > > >
> > > >
> > > >
> > http://git.enlightenment.org/core/efl.git/commit/?id=db1990020a9039d867bf620d9f9463dda443f31e
> > > >
> > > > commit db1990020a9039d867bf620d9f9463dda443f31e
> > > > Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
> > > > Date:   Sun Feb 9 19:08:12 2014 +0900
> > > >
> > > >     edje - feature - add channel types for sounds and ability to mute
> > them
> > > >
> > > >     this adds a new feature to be able to assign a sample to a given
> > > >     "type" of audio channel, and then to be able to mute these from
> > code.
> > > > ---
> > > >  data/edje/include/edje.inc      |  4 +--
> > > >  src/bin/edje/edje_cc_handlers.c | 14 +++++++-
> > > >  src/lib/edje/Edje_Common.h      | 71
> > > > +++++++++++++++++++++++++++++++++++++++++
> > > >  src/lib/edje/edje_data.c        |  1 +
> > > >  src/lib/edje/edje_embryo.c      | 22 +++++++++----
> > > >  src/lib/edje/edje_multisense.c  | 53 +++++++++++++++++++++++++++---
> > > >  src/lib/edje/edje_private.h     |  6 ++--
> > > >  src/lib/edje/edje_program.c     |  4 +--
> > > >  8 files changed, 157 insertions(+), 18 deletions(-)
> > > >
> > > > diff --git a/data/edje/include/edje.inc b/data/edje/include/edje.inc
> > > > index 1cf7b89..828380b 100644
> > > > --- a/data/edje/include/edje.inc
> > > > +++ b/data/edje/include/edje.inc
> > > > @@ -235,8 +235,8 @@ native set_state_val(part_id, State_Param:p, ...);
> > > >  native get_state_val(part_id, State_Param:p, ...);
> > > >
> > > >  /* Multisense */
> > > > -native       play_sample      (sample_name[], Float:speed);
> > > > -native       play_tone        (tone_name[], Float:duration);
> > > > +native       play_sample      (sample_name[], Float:speed, ...);
> > > > +native       play_tone        (tone_name[], Float:duration, ...);
> > > >
> > > >  /***********************************************************/
> > > >  /* Edje physics calls.                                     */
> > > > diff --git a/src/bin/edje/edje_cc_handlers.c
> > > > b/src/bin/edje/edje_cc_handlers.c
> > > > index 0ea056d..dda4116 100644
> > > > --- a/src/bin/edje/edje_cc_handlers.c
> > > > +++ b/src/bin/edje/edje_cc_handlers.c
> > > > @@ -9126,7 +9126,7 @@ st_collections_group_programs_program_in(void)
> > > >             action: FOCUS_OBJECT;\n
> > > >             action: PARAM_COPY "src_part" "src_param" "dst_part"
> > > > "dst_param";\n
> > > >             action: PARAM_SET "part" "param" "value";\n
> > > > -           action: PLAY_SAMPLE "sample name" speed (speed of sample -
> > 1.0
> > > > is original speed - faster is higher pitch);\n
> > > > +           action: PLAY_SAMPLE "sample name" speed (speed of sample -
> > 1.0
> > > > is original speed - faster is higher pitch) [channel optional
> > EFFECT/FX |
> > > > BACKGROUND/BG | MUSIC/MUS | FOREGROUND/FG | INTERFACE/UI | INPUT |
> > ALERT;\n
> > > >             action: PLAY_TONE "tone name" duration in seconds ( Range
> > 0.1
> > > > to 10.0 );\n
> > > >             action: PHYSICS_IMPULSE 10 -23.4 0;\n
> > > >             action: PHYSICS_TORQUE_IMPULSE 0 2.1 0.95;\n
> > > > @@ -9199,6 +9199,16 @@
> > st_collections_group_programs_program_action(void)
> > > >                 }
> > > >            }
> > > >          ep->speed = parse_float_range(2, 0.0, 100.0);
> > > > +        if (get_arg_count() >= 4)
> > > > +          ep->channel = parse_enum(3,
> > > > +                                   "EFFECT", 0, "FX", 0,
> > > > +                                   "BACKGROUND", 1, "BG", 1,
> > > > +                                   "MUSIC", 2, "MUS", 2,
> > > > +                                   "FOREGROUND", 3, "FG", 3,
> > > > +                                   "INTERFACE", 4, "UI", 4,
> > > > +                                   "INPUT", 5,
> > > > +                                   "ALERT", 6,
> > > > +                                   NULL);
> > > >       }
> > > >     else if (ep->action == EDJE_ACTION_TYPE_SOUND_TONE)
> > > >       {
> > > > @@ -9303,6 +9313,8 @@
> > st_collections_group_programs_program_action(void)
> > > >        case EDJE_ACTION_TYPE_PHYSICS_ROT_SET:
> > > >          check_arg_count(5);
> > > >          break;
> > > > +      case EDJE_ACTION_TYPE_SOUND_SAMPLE:
> > > > +        break;
> > > >        default:
> > > >         check_arg_count(3);
> > > >       }
> > > > diff --git a/src/lib/edje/Edje_Common.h b/src/lib/edje/Edje_Common.h
> > > > index a2dbf13..9d83fb5 100644
> > > > --- a/src/lib/edje/Edje_Common.h
> > > > +++ b/src/lib/edje/Edje_Common.h
> > > > @@ -2026,3 +2026,74 @@ EAPI const Edje_Perspective
> > > > *edje_evas_global_perspective_get(const Evas *e);
> > > >  /**
> > > >   * @}
> > > >   */
> > > > +
> > > > +/**
> > > > + * @defgroup Edje_Audio Edje Audio
> > > > + *
> > > > + * @brief Functions to manipulate audio abilities in edje.
> > > > + *
> > > > + * Perspective is a graphical tool that makes objets represented in 2D
> > > > + * look like they have a 3D appearance.
> > > > + *
> > > > + * Edje allows us to use perspective on any edje object. This group of
> > > > + * functions deal with the use of perspective, by creating and
> > configuring
> > > > + * a perspective object that must set to a edje object or a canvas,
> > > > + * affecting all the objects inside that have no particular
> > perspective
> > > > + * set already.
> > > > + *
> > > > + * @ingroup Edje_Audio
> > > > + *
> > > > + * @{
> > > > + */
> > > > +
> > > > +/**
> > > > + * Identifiers of Edje message types, which can be sent back and forth
> > > > + * code and a given Edje object's theme file/group.
> > > > + *
> > > > + * @see edje_audio_channel_mute_set()
> > > > + * @see edje_audio_channel_mute_get()
> > > > + *
> > > > + * @since 1.9
> > > > + */
> > > > +typedef enum _Edje_Channel
> > > > +{
> > > > +   EDJE_CHANNEL_EFFECT = 0, /**< Standard audio effects */
> > > > +   EDJE_CHANNEL_BACKGROUND = 1, /**< Background audio sounds  */
> > > > +   EDJE_CHANNEL_MUSIC = 2, /**< Music audio */
> > > > +   EDJE_CHANNEL_FOREGROUND = 3, /**< Foreground audio sounds */
> > > > +   EDJE_CHANNEL_INTERFACE = 4, /**< Sounds related to the interface */
> > > > +   EDJE_CHANNEL_INPUT = 5, /**< Sounds related to regular input */
> > > > +   EDJE_CHANNEL_ALERT = 6, /**< Sounds for major alerts */
> > > > +   EDJE_CHANNEL_ALL = 7 /**< All audio channels (convenience) */
> > > > +} Edje_Channel;
> > > > +
> > > > +/**
> > > > + * Set the mute state of audio for the process as a whole
> > > > + *
> > > > + * @param channel The channel to set the mute state of
> > > > + * @param mute The mute state
> > > > + *
> > > > + * This sets the mute (no output) state of audio for the given
> > channel.
> > > > + *
> > > > + * @see edje_audio_channel_mute_get()
> > > > + *
> > > > + * @since 1.9
> > > > + */
> > > > +EAPI void edje_audio_channel_mute_set(Edje_Channel channel, Eina_Bool
> > > > mute);
> > > > +
> > > > +/**
> > > > + * Get the mute state of the given channel
> > > > + *
> > > > + * @param channel The channel to get the mute state of
> > > > + * @return The mute state of the channel
> > > > + *
> > > > + * @see edje_audio_channel_mute_set()
> > > > + *
> > > > + * @since 1.9
> > > > + */
> > > > +EAPI Eina_Bool edje_audio_channel_mute_get(Edje_Channel channel);
> > > > +
> > > > +/**
> > > > + * @}
> > > > + */
> > > > +
> > > > diff --git a/src/lib/edje/edje_data.c b/src/lib/edje/edje_data.c
> > > > index 3a11cff..fc76593 100644
> > > > --- a/src/lib/edje/edje_data.c
> > > > +++ b/src/lib/edje/edje_data.c
> > > > @@ -477,6 +477,7 @@ _edje_edd_init(void)
> > > >     EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program,
> > > > "physics.y", physics.y, EET_T_DOUBLE);
> > > >     EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program,
> > > > "physics.z", physics.z, EET_T_DOUBLE);
> > > >  #endif
> > > > +   EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program,
> > > > "channel", channel, EET_T_UCHAR);
> > > >
> > > >     EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Edje_Part_Image_Id);
> > > >     _edje_edd_edje_part_image_id =
> > > > diff --git a/src/lib/edje/edje_embryo.c b/src/lib/edje/edje_embryo.c
> > > > index cb20648..d09ae72 100644
> > > > --- a/src/lib/edje/edje_embryo.c
> > > > +++ b/src/lib/edje/edje_embryo.c
> > > > @@ -73,8 +73,8 @@
> > > >   * set_state(part_id, state[], Float:state_val)
> > > >   * get_state(part_id, dst[], maxlen, &Float:val)
> > > >   * set_tween_state(part_id, Float:tween, state1[], Float:state1_val,
> > > > state2[], Float:state2_val)
> > > > - * play_sample(sample_name, speed)
> > > > - * play_tone(tone_name, duration)
> > > > + * play_sample(sample_name, speed, ...)
> > > > + * play_tone(tone_name, duration, ...)
> > > >   * run_program(program_id)
> > > >   * Direction:get_drag_dir(part_id)
> > > >   * get_drag(part_id, &Float:dx, &Float:&dy)
> > > > @@ -915,13 +915,18 @@ _edje_embryo_fn_play_sample(Embryo_Program *ep,
> > > > Embryo_Cell *params)
> > > >     Edje *ed;
> > > >     char *sample_name = NULL;
> > > >     float speed = 1.0;
> > > > +   int channel = 0;
> > > >
> > > > -   CHKPARAM(2);
> > > > +   if (params[0] < (int) (sizeof(Embryo_Cell) * 2))
> > > > +     return 0;
> > > >     ed = embryo_program_data_get(ep);
> > > >     GETSTR(sample_name, params[1]);
> > > >     if ((!sample_name)) return 0;
> > > >     speed = EMBRYO_CELL_TO_FLOAT(params[2]);
> > > > -   _edje_multisense_internal_sound_sample_play(ed, sample_name,
> > > > (double)speed);
> > > > +   if (params[0] == (int) (sizeof(Embryo_Cell) * 3))
> > > > +     GETINT(channel, params[3]);
> > > > +   _edje_multisense_internal_sound_sample_play(ed, sample_name,
> > > > +                                               (double)speed,
> > channel);
> > > >     return 0;
> > > >  }
> > > >
> > > > @@ -931,13 +936,18 @@ _edje_embryo_fn_play_tone(Embryo_Program *ep,
> > > > Embryo_Cell *params)
> > > >     Edje *ed;
> > > >     char *tone_name = NULL;
> > > >     float duration = 0.1;
> > > > +   int channel = 0;
> > > >
> > > > -   CHKPARAM(2);
> > > > +   if (params[0] < (int) (sizeof(Embryo_Cell) * 2))
> > > > +     return 0;
> > > >     ed = embryo_program_data_get(ep);
> > > >     GETSTR(tone_name, params[1]);
> > > >     if ((!tone_name)) return 0;
> > > >     duration = EMBRYO_CELL_TO_FLOAT(params[2]);
> > > > -   _edje_multisense_internal_sound_tone_play(ed, tone_name, (double)
> > > > duration);
> > > > +   if (params[0] == (int) (sizeof(Embryo_Cell) * 3))
> > > > +     GETINT(channel, params[3]);
> > > > +   _edje_multisense_internal_sound_tone_play(ed, tone_name,
> > > > +                                             (double)duration,
> > channel);
> > > >     return 0;
> > > >  }
> > > >
> > > > diff --git a/src/lib/edje/edje_multisense.c
> > > > b/src/lib/edje/edje_multisense.c
> > > > index daa878e..a8ae628 100644
> > > > --- a/src/lib/edje/edje_multisense.c
> > > > +++ b/src/lib/edje/edje_multisense.c
> > > > @@ -80,7 +80,8 @@ eet_snd_file_tell(void *data, Eo *eo_obj EINA_UNUSED)
> > > >     return vf->offset;
> > > >  }
> > > >
> > > > -static void _free(void *data)
> > > > +static void
> > > > +_free(void *data)
> > > >  {
> > > >     struct _edje_multisense_eet_data *eet_data = data;
> > > >
> > > > @@ -90,18 +91,58 @@ static void _free(void *data)
> > > >     free(data);
> > > >     outs--;
> > > >  }
> > > > +
> > > > +static Eina_Bool _channel_mute_states[8] = { 0 };
> > > > +
> > > > +static Eina_Bool
> > > > +_channel_mute(Edje *ed EINA_UNUSED, int channel)
> > > > +{
> > > > +   // ed lets use set mute per object... but for now no api's for this
> > > > +   // if all are muted ... then all!
> > > > +   if (_channel_mute_states[7]) return EINA_TRUE;
> > > > +   if ((channel < 0) || (channel > 7)) return EINA_FALSE;
> > > > +   return _channel_mute_states[channel];
> > > > +   return EINA_FALSE;
> > > > +}
> > > > +
> > > > +#endif
> > > > +
> > > > +EAPI void
> > > > +edje_audio_channel_mute_set(Edje_Channel channel, Eina_Bool mute)
> > > > +{
> > > > +#ifdef ENABLE_MULTISENSE
> > > > +   if ((channel < 0) || (channel > 7)) return;
> > > > +   _channel_mute_states[channel] = mute;
> > > > +#else
> > > > +   (void) channel;
> > > > +   (void) mute;
> > > >  #endif
> > > > +}
> > > > +
> > > > +EAPI Eina_Bool
> > > > +edje_audio_channel_mute_get(Edje_Channel channel)
> > > > +{
> > > > +#ifdef ENABLE_MULTISENSE
> > > > +   if ((channel < 0) || (channel > 7)) return EINA_FALSE;
> > > > +   return _channel_mute_states[channel];
> > > > +#else
> > > > +   (void) channel;
> > > > +   return EINA_FALSE;
> > > > +#endif
> > > > +}
> > > >
> > > >  Eina_Bool
> > > > -_edje_multisense_internal_sound_sample_play(Edje *ed, const char
> > > > *sample_name, const double speed)
> > > > +_edje_multisense_internal_sound_sample_play(Edje *ed, const char
> > > > *sample_name, const double speed, int channel)
> > > >  {
> > > > - #ifdef ENABLE_MULTISENSE
> > > > +#ifdef ENABLE_MULTISENSE
> > > >     Eo *in;
> > > >     Edje_Sound_Sample *sample;
> > > >     char snd_id_str[255];
> > > >     int i;
> > > >     Eina_Bool ret;
> > > >
> > > > +   if (_channel_mute(ed, channel)) return EINA_FALSE;
> > > > +
> > > >     if (outfail) return EINA_FALSE;
> > > >
> > > >     if (!sample_name)
> > > > @@ -189,12 +230,13 @@ _edje_multisense_internal_sound_sample_play(Edje
> > > > *ed, const char *sample_name, c
> > > >     (void) ed;
> > > >     (void) sample_name;
> > > >     (void) speed;
> > > > +   (void) channel;
> > > >     return EINA_FALSE;
> > > >  #endif
> > > >  }
> > > >
> > > >  Eina_Bool
> > > > -_edje_multisense_internal_sound_tone_play(Edje *ed, const char
> > > > *tone_name, const double duration)
> > > > +_edje_multisense_internal_sound_tone_play(Edje *ed, const char
> > > > *tone_name, const double duration, int channel)
> > > >  {
> > > >  #ifdef ENABLE_MULTISENSE
> > > >     unsigned int i;
> > > > @@ -208,6 +250,8 @@ _edje_multisense_internal_sound_tone_play(Edje *ed,
> > > > const char *tone_name, const
> > > >          return EINA_FALSE;
> > > >       }
> > > >
> > > > +   if (_channel_mute(ed, channel)) return EINA_FALSE;
> > > > +
> > > >     if (outfail) return EINA_FALSE;
> > > >
> > > >     if ((!ed) || (!ed->file) || (!ed->file->sound_dir))
> > > > @@ -245,6 +289,7 @@ _edje_multisense_internal_sound_tone_play(Edje *ed,
> > > > const char *tone_name, const
> > > >     (void) ed;
> > > >     (void) duration;
> > > >     (void) tone_name;
> > > > +   (void) channel;
> > > >     return EINA_FALSE;
> > > >  #endif
> > > >
> > > > diff --git a/src/lib/edje/edje_private.h b/src/lib/edje/edje_private.h
> > > > index a057d8e..698d085 100644
> > > > --- a/src/lib/edje/edje_private.h
> > > > +++ b/src/lib/edje/edje_private.h
> > > > @@ -676,7 +676,7 @@ struct _Edje_Program /* a conditional program to be
> > > > run */
> > > >        double z;
> > > >     } physics;
> > > >  #endif
> > > > -
> > > > +   unsigned char channel;
> > > >     Eina_Bool exec : 1;
> > > >  };
> > > >
> > > > @@ -2427,8 +2427,8 @@ void _edje_subobj_unregister(Edje *ed,
> > Evas_Object
> > > > *ob);
> > > >
> > > >  void _edje_multisense_init(void);
> > > >  void _edje_multisense_shutdown(void);
> > > > -Eina_Bool _edje_multisense_internal_sound_sample_play(Edje *ed, const
> > > > char *sample_name, const double speed);
> > > > -Eina_Bool _edje_multisense_internal_sound_tone_play(Edje *ed, const
> > char
> > > > *tone_name, const double duration);
> > > > +Eina_Bool _edje_multisense_internal_sound_sample_play(Edje *ed, const
> > > > char *sample_name, const double speed, int channel);
> > > > +Eina_Bool _edje_multisense_internal_sound_tone_play(Edje *ed, const
> > char
> > > > *tone_name, const double duration, int channel);
> > > >
> > > >  void _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags,
> > > > Edje_Calc_Params *state);
> > > >
> > > > diff --git a/src/lib/edje/edje_program.c b/src/lib/edje/edje_program.c
> > > > index a3b1747..ac32aa5 100644
> > > > --- a/src/lib/edje/edje_program.c
> > > > +++ b/src/lib/edje/edje_program.c
> > > > @@ -877,12 +877,12 @@ low_mem_current:
> > > >        case EDJE_ACTION_TYPE_SOUND_SAMPLE:
> > > >           if (_edje_block_break(ed))
> > > >             goto break_prog;
> > > > -         _edje_multisense_internal_sound_sample_play(ed,
> > pr->sample_name,
> > > > pr->speed);
> > > > +         _edje_multisense_internal_sound_sample_play(ed,
> > pr->sample_name,
> > > > pr->speed, pr->channel);
> > > >           break;
> > > >        case EDJE_ACTION_TYPE_SOUND_TONE:
> > > >           if (_edje_block_break(ed))
> > > >             goto break_prog;
> > > > -         _edje_multisense_internal_sound_tone_play(ed, pr->tone_name,
> > > > pr->duration);
> > > > +         _edje_multisense_internal_sound_tone_play(ed, pr->tone_name,
> > > > pr->duration, pr->channel);
> > > >           break;
> > > >        case EDJE_ACTION_TYPE_PARAM_COPY:
> > > >             {
> > > >
> > > > --
> > > >
> > > >
> > > >
> > >
> > ------------------------------------------------------------------------------
> > > Managing the Performance of Cloud-Based Applications
> > > Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
> > > Read the Whitepaper.
> > >
> > http://pubads.g.doubleclick.net/gampad/clk?id=121051231&iu=/4140/ostg.clktrk
> > > _______________________________________________
> > > enlightenment-devel mailing list
> > > enlightenment-devel@lists.sourceforge.net
> > > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
> > >
> >
> >
> > --
> > ------------- Codito, ergo sum - "I code, therefore I am" --------------
> > The Rasterman (Carsten Haitzler)    ras...@rasterman.com
> >
> >


-- 
------------- Codito, ergo sum - "I code, therefore I am" --------------
The Rasterman (Carsten Haitzler)    ras...@rasterman.com


------------------------------------------------------------------------------
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121051231&iu=/4140/ostg.clktrk
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to