Short answer: nonsense.
Long answer: silence detection would require full data decoding, would require reliable metaint positions and indeed would require real silence between tracks. When cross-fading/mixing is used, silence detection is just a waste of computing resource. On streams where silence between tracks does exist, metadata alone will do the work almost as well. Where metaint positions are useless, silence detection would be useless as well. We believe separation done that way is a lost war from the beginning.
If you’re really sure, you can do this by using the file produced by -q. A poor-man’s solution could look like this:
$ fIcy -q foo ... & $ tail -f foo | (while read file; do fResync "$file"; [your \ tagging command here]; done) &
Use the -o flag alone, without -m or -E:
fIcy -o file ...
Short answer: you can’t.
Long answer: if your streaming server supports this, you can block on the user-agent. fIcy uses “fIcy [version]” by default, and, contrarily to most other software, offers no way of changing it. Consider however that any user with a minimal amount of brain will be able to change it anyway. A more realistic solution is to disable metadata (ie titles) on your stream, but even then it won’t prevent people for saving it on large chunks, and/or use ANY other software like winamp, xmms, wget, telnet, netcat, curl (or even your browser of choice).