One common solution is to pass a token, such as a stick, around the room and let each person speak for say one minute. This equalizes conversation time, but destroys spontaneous back and forth interaction. For example, if you ask someone a question, and it takes five minutes before the token gets to them, they can just ignore it.
First distribute a number of tokens, like pennies, equal to the number of minutes the group will meet; ten people meeting for two hours would get twelve tokens each. Then the basic rule is that if you are talking when the device beeps, you must discard one token, say by tossing it into a central pile. When you run out of tokens, you must stay quiet or convince someone else to give a token.
If there is a beep while two people are talking at once, they should both discard a token. If there is a beep when no one is taking, no one should discard. Borderline cases have to be decided by the group.
This alternative has been tested at least a half dozen times, in groups ranging up to a dozen for several hours. It doesn't seem very intrusive, as one can discard tokens while continuing to talk. And talkative people feel gratified when other folks give them tokens so they can speak longer.
The main disadvantage of EquaTalk is that you have to know how long how many people will be talking, and most of them need to stay for the whole meeting. And there will be some random variation in total speaking time.
I sketched out a design for cheap random beeping devices, and tried to pay an engineer to build me a few such random devices, but he flaked out. Anyone interested?
Note added 4Apr2000: The following program, run in LispMe on the Palm Pilot, allows one to produce random beeps. For example, (eqtk 120) produces 120 beeps over roughly two hours. (Note: set preference "no auto-off while eval".)
(define (eqtk n) (cond ((eq? 0 n) 'done) ((eq? 0 (random 60)) (sound 2000 200) (wait 800) (display n) (eqtk (- n 1))) (else (wait 1000) (eqtk n))))
Marginal Revolution Blog Comments, October 2, 2003.