I think it should be possible to achieve what you want with BASS and the BASS_SPX add-on. You can pass your memory block to BASS_SPX_StreamCreateFile with the "mem" paramater set to TRUE. As you want to process the file without playing it, you would also use the BASS_STREAM_DECODE flag in the call. You can then use BASS_ChannelGetData to get decoded sample data from the file, eg. to check where the sound begins/ends in it. Here's some code that you could use as the basis for your silence detection...
www.un4seen.com/forum/?topic=784.msg4164#msg4164Note that thread is old, and some things have since changed, eg. BASS_StreamGetLength is now BASS_ChannelGetLength (you would also add the BASS_POS_BYTE "mode" to it).