예제 #1
0
 public void Dispose()
 {
     m_TagLibFile.Dispose();
     m_TagLibFile = null;
     m_CSVorbisFile.Dispose();
     m_CSVorbisFile = null;
 }
예제 #2
0
        private void LoadOggFile(IOggFileSource source)
        {
            m_Source       = source;
            m_CSVorbisFile = source.VorbisFile;
            m_TagLibFile   = source.TagLibFile;

            // Populate some other info shizzle and do a little bit of sanity checking
            m_Streams = m_CSVorbisFile.streams();
            if (m_Streams <= 0)
            {
                throw new OggFileReadException("File doesn't contain any logical bitstreams", source.FileName);
            }
            // Assuming <0 is for whole file and >=0 is for specific logical bitstreams
            m_Bitrate    = m_CSVorbisFile.bitrate(-1);
            m_LengthTime = (int)m_CSVorbisFile.time_total(-1);
            // Figure out the ALFormat of the stream
            m_Info = m_CSVorbisFile.getInfo();                  // Get the info of the first stream, assuming all streams are the same? Dunno if this is safe tbh
            if (m_Info[0] == null)
            {
                throw new OggFileReadException("Unable to determine Format{FileInfo.Channels} for first bitstream", source.FileName);
            }
            if (m_TagLibFile.Properties.AudioBitrate == 16)
            {
                m_Format = (m_Info[0].channels) == 1 ? ALFormat.Mono16 : ALFormat.Stereo16;               // This looks like a fudge, but I've seen it a couple of times (what about the other formats I wonder?)
            }
            else
            {
                m_Format = (m_Info[0].channels) == 1 ? ALFormat.Mono8 : ALFormat.Stereo8;
            }

            // A grab our first instance of the file so we're ready to play
            m_CSVorbisFileInstance = m_CSVorbisFile.makeInstance();
        }
예제 #3
0
        //FIXED BY ALEXEY MIKHAYLOV!!!!

        /// <summary>
        /// Reset the OggFile (reload from disk).
        /// Useful if tags have changed externally, or to reset the internal position pointer to replay the file from the beginning
        /// SeekToTime(0) is the preferred method of moving the internal pointer to the beginning however however
        /// </summary>
        public bool ResetFile()
        {
            try
            {
                // Grab a fresh instance of the file
                if (m_CSVorbisFile == null)
                {
                    return(false);
                }
                m_CSVorbisFileInstance = m_CSVorbisFile.makeInstance();

                m_TagLibFile = null;
                m_TagLibFile = m_Source.TagLibFile;

                return(true);
            }
            catch (Exception ex)
            {
                //throw new Exception("Unable to reload OggFile [" + m_Source.FileName + "]", ex);
                return(false);
            }
        }