The TS_PLAY_SOUND_PDU_DATA structure contains the contents of the Play Sound PDU, which is a Share Data Header and two fields.
file:///C:/ts_dev/TestSuites/MS-RDPBCGR/TestSuite/Src/TD/latest_XMLS_16may/RDPBCGR/ _rfc_ms-rdpbcgr2_1_8_2_1_1.xml
        /// <summary>
        /// Parse TS_PLAY_SOUND_PDU_DATA
        /// (parser index is updated according to parsed length)
        /// </summary>
        /// <param name="data">data to be parsed</param>
        /// <param name="currentIndex">current parser index</param>
        /// <returns>TS_PLAY_SOUND_PDU_DATA</returns>
        private TS_PLAY_SOUND_PDU_DATA ParseTsPlaySoundPduData(byte[] data, ref int currentIndex)
        {
            TS_PLAY_SOUND_PDU_DATA pdu = new TS_PLAY_SOUND_PDU_DATA();

            // TS_PLAY_SOUND_PDU_DATA: shareDataHeader
            pdu.shareDataHeader = ParseTsShareDataHeader(data, ref currentIndex);

            // TS_PLAY_SOUND_PDU_DATA: duration
            pdu.duration = ParseUInt32(data, ref currentIndex, false);

            // TS_PLAY_SOUND_PDU_DATA: frequency
            pdu.frequency = ParseUInt32(data, ref currentIndex, false);

            return pdu;
        }
        private byte[] EncodePlaySoundData(TS_PLAY_SOUND_PDU_DATA playSoundPduData)
        {
            List<byte> dataBuffer = new List<byte>();

            RdpbcgrEncoder.EncodeStructure(dataBuffer, playSoundPduData.shareDataHeader);
            RdpbcgrEncoder.EncodeStructure(dataBuffer, playSoundPduData.duration);
            RdpbcgrEncoder.EncodeStructure(dataBuffer, playSoundPduData.frequency);

            return dataBuffer.ToArray();
        }