Hello Jeff,
It's getting less obscure with:
https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/duration
"Value
A double. If the media data is available but the length is unknown, this value
is NaN. If the media is streamed and has no predefined length, the value is
Inf."
I get more or less this behavior on Firefox and similar on Safari:
HTML:
<audio controls preload="auto" id="g12"></audio>
Javascript:
-- Sound file not loaded
$(gnoga['g12']).prop ('readyState')
0
$(gnoga['g12']).prop ('duration')
NaN
-- Sound file loaded
$(gnoga['g12']).prop ('src','glass.ogg')
Object [ <audio#g12> ]
$(gnoga['g12']).prop ('readyState')
4
$(gnoga['g12']).prop ('duration')
Infinity
-- Sound file not played
$(gnoga['g12']).get(0).play()
Promise { <state>: "pending" }
$(gnoga['g12']).prop ('readyState')
2
$(gnoga['g12']).prop ('duration')
0.751836
Thus, even loaded, the duration seems not known and more is set to "Infinity".
I don't know how to get the duration without playing the file.
Sorry not helping more, Pascal.
http://blady.pagesperso-orange.fr
> Le 30 sept. 2017 à 12:06, Jeffrey R. Carter <[email protected]> a écrit :
>
> On 09/30/2017 10:57 AM, Pascal via Gnoga-list wrote:
>> Two points:
>> - it seems that duration is not available before the sound is ready to play
>> (with Firefox)
>> - the duration function should return Float
>>
>> I modify Play_Sound as follow with a waiting loop for readiness:
>>
>> procedure Play_Sound (Object : in out Gnoga.Gui.Base.Base_Type'Class) is
>> pragma Unreferenced (Object);
>> -- Empty;
>> begin -- Play_Sound
>> Player.Media_Source (Source => "glass.ogg");
>> while not Player.Ready_To_Play loop
>> Gnoga.Log (Message => Player.Ready_To_Play'Img);
>> delay 0.01;
>> end loop;
>> Gnoga.Log
>> (Message => Player.Media_Source & Float'Image
>> (Player.Media_Duration));
>> Player.Play;
>> exception -- Play_Sound
>> when E : others =>
>> Gnoga.Log
>> (Message =>
>> "Play_Sound: " & Ada.Exceptions.Exception_Information (E));
>> end Play_Sound;
>>
>> Results:
>> 2017-09-30 10:42:47.27 : New connection - ID 1
>> 2017-09-30 10:42:49.80 : TRUE
>> 2017-09-30 10:42:49.84 : http://localhost:8080/glass.ogg 7.51836E-01
>>
>> Note: in my case just one round is needed.
>
> OK, with those patches and changing Play_Sound to
>
> procedure Play_Sound (Object : in out Gnoga.Gui.Base.Base_Type'Class) is
> -- Empty;
> begin -- Play_Sound
> Player.Media_Source (Source => "glass.ogg");
>
> Wait_For_Ready : loop
> Gnoga.Log (Message => Integer'Image (Player.Property ("readyState") )
> & ' ' & Boolean'Image (Player.Ready_To_Play) );
>
> exit Wait_For_Ready when Player.Ready_To_Play;
>
> delay 0.01;
> end loop Wait_For_Ready;
>
> Gnoga.Log (Message => Player.Media_Source & Float'Image
> (Player.Media_Duration) );
> Player.Play;
> exception -- Play_Sound
> when E : others =>
> Gnoga.Log (Message => "Play_Sound: " &
> Ada.Exceptions.Exception_Information (E) );
> end Play_Sound;
>
> I get
>
> 2017-09-30 11:58:16.95 : 0 TRUE
> 2017-09-30 11:58:17.04 : Error jQuery_Execute converting to Float (forced to
> 0.0).
> 2017-09-30 11:58:17.04 : raised CONSTRAINT_ERROR : bad input for 'Value:
> "Infinity"
> Call stack traceback locations:
> 0x7f47fa1091c1 0x7f47fa108958 0x7f47fa108c5b 0x5633f90a0ae0 0x5633f90a0d3a
> 0x5633f90abc69 0x5633f9079201 0x5633f908fd6d 0x5633f9104751 0x7f47fa431222
> 0x7f47f96816d8 0x7f47f99a0d7d 0xfffffffffffffffe
>
> 2017-09-30 11:58:17.08 : http://localhost:8080/glass.ogg 0.00000E+00
>
> in the log output with Firefox. Also, the thing that is most important to me
> hasn't changed: the total time isn't displayed in the widget until playback
> finishes.
>
> It looks to me as if Ready_To_Play should probably be Property ("readyState")
> > 1.
>
>> If patches are ok for you I'll push them in Gnoga.
> Looks OK to me.
>> PS: Jeff, I'll put Ding into test stuff of Gnoga if you don't mind.
> Fine with me.
>
> --
> Jeff Carter
> "Frankie Wolf, wanted by Federal authorities for
> dancing with a mailman."
> Take the Money and Run
> 143
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Gnoga-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gnoga-list