W3C home > Mailing lists > Public > www-style@w3.org > August 2004

Re: Audio

From: Dave Raggett <dsr@w3.org>
Date: Sun, 8 Aug 2004 13:02:33 +0100 (BST)
To: csant <csant@csant.info>
Cc: www-style <www-style@w3.org>
Message-ID: <Pine.LNX.4.58.0408081221240.2858@holly>

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Sun, 8 Aug 2004, csant wrote:

> The specs are IMHO not the place to prevent authors from doing
> non-sensible stuff - if you want, you have plenty of means to
> completely destroy display with valid CSS.

Agreed.

> Nevertheless I have some doubt about pseudo class :visible as
> well. The problem is that we still have no means of preventing
> sound-salads of simultaneously playing audio files, as you might
> have two elements with :visible that are visible at the same
> time...

The "sound-salad" idea of overlapping sounds is a bit like the sound
environment in the natural world. Your ears are exposed to lots of
different sounds overlaying each other - some people talking, a
passing car, a sea gull flying overhead, the sound of the wind,
people's footsteps and so on.

Sound effects for web pages can be effective or a jarring cacophany,
authors will learn what works, or users will turn away from their
pages. In this view sounds should be mixed rather than serialized.

For instance, the following would in principle play the same sound
at the same time for all paragraphs and likewise for all h1
elements.  Probably not what the author intended.

   h1 { sound: url(wind.wav) }
   p { sound: url(waves.wav) }

As an author you need to decide what sounds to play when the page
is loaded, while its loaded and when its unloaded. Having done so
these can then be declared with the body element, e.g.

   body { sound: url(waves.wav) repeat }

The 'repeat' modified causes the sound to be repeated indefinitely
while the current state holds. In this case, while the page is
loaded.

Let's say we wanted to play a different sound while a div is
visible, then we could do:

   div.upbeat:visible {
     sound: url(drum-beat.wav) repeat
   }

This would mix with the sound associated with the body element.
We might be able to suppress sounds from parent or ancestor
elements by adding the 'no-mix' modifier e.g.

   div.upbeat:visible {
     sound: url(drum-beat.wav) repeat no-mix
   }

A further idea is to fade the sound up when the div becomes
visble and to fade it out when it loses visibility, e.g.

   div.upbeat:visible {
     sound: url(drum-beat.wav) repeat no-mix fade
   }

Note that the above property is purely hypothetical, and that
W3C is still collecting ideas for a possible future CSS3 audio
module. 

One thing missing from the above is a means to play one sound
when a state first becomes true, another when it subsequently
becomes false, and yet another to play in between, repeating
as necessary. This suggests three properties:

  sound-prolog:
     The sound to play when the state becomes true
  sound-epilog:
     The sound to play when the state becomes false
  sound:
     The sound to play between the above two

This has problems, as we don't normally know in advance when
a state is going to become false, e.g. when the page will
be unloaded. Perhaps it is simpler to stick with the single
sound property after all.

p.s. I think that :visible is addressing a different issue
and has value in its own right.

- -- 
 Dave Raggett <dsr@w3.org>  W3C lead for voice and multimodal.
 http://www.w3.org/People/Raggett +44 1225 866240 (or 867351)
 
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)

iD8DBQFBFhZgb3AdEmxAsUsRAu4MAJ4n/raV8iWIHBMavRzVJeDSxGljnwCdGpVm
uyogdUBsHgSbz4oq61rAs/U=
=zreo
-----END PGP SIGNATURE-----
Received on Sunday, 8 August 2004 12:01:19 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 27 April 2009 13:54:32 GMT