/// <summary>
        /// Open audio stream
        /// </summary>
        /// <param name="bankIndex">Bank index</param>
        /// <param name="audioIndex">Audio index (unused)</param>
        /// <returns>Audio stream</returns>
        public override Stream Open(uint bankIndex, uint audioIndex)
        {
            Stream ret = null;

            if (FileStream != null)
            {
                if (bankIndex < BankData.Length)
                {
                    GTAAudioBankData bank_data = BankData[bankIndex];
                    uint             offset    = bank_data.Offset + 0x1F84;
                    if (FileStream.Length >= (offset + bank_data.Length))
                    {
                        DecodingBinaryReader reader = new DecodingBinaryReader(FileStream);
                        FileStream.Seek(offset, SeekOrigin.Begin);
                        byte[] data = reader.ReadDecodeBytes((int)(bank_data.Length));
                        if (data != null)
                        {
                            if (data.Length == bank_data.Length)
                            {
                                ret = new CommitableMemoryStream(this, data);
                                ret.Seek(0L, SeekOrigin.Begin);
                            }
                        }
                    }
                }
            }
            return(ret);
        }