Example #1
0
        public void Init()
        {
            __CacheStream = __Storage.GetCacheStream(__Audio);

            switch (__CacheStream.Status)
            {
            case AudioStorageStatus.Stored:
                __ProducerConsumerStream = new ProducerConsumerMemoryStream(__CacheStream);
                __ProducerConsumerStream.LoadToMemory();
                __ProducerConsumerStream.WriteFinished = true;
                DownloadedFracion = 1.0;

                break;

            case AudioStorageStatus.PartiallyStored:
            case AudioStorageStatus.NotStored:
                if (__Downloader == null || __Url == null)
                {
                    throw new PuckevichException("__Url or __Downloader cannot be null for not cached audio!");
                }

                __WebDownloaderTask = Task.Run((Action)WebDownloader);

                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            __TasksInitialized = true;

            while (__CacheStream.Status != AudioStorageStatus.Stored && !__ThresholdDownloaded)
            {
                Thread.Sleep(1);
            }

            if (__RequestTasksStop)
            {
                return;
            }

            __BassStream = Bass.BASS_StreamCreateFileUser(BASSStreamSystem.STREAMFILE_BUFFER,
                                                          BASSFlag.BASS_DEFAULT,
                                                          __BassFileProcs,
                                                          IntPtr.Zero);

            WhenInit();
        }
Example #2
0
 private void CleanActions()
 {
     __PlayingStopwatch.Reset();
     __ProducerConsumerStream.Dispose();
     __ProducerConsumerStream = null;
 }
Example #3
0
        private void WebDownloader()
        {
            Stream webStream = null;

            try
            {
                long audioLengthInBytes;

                if (__RequestTasksStop)
                {
                    return;
                }

                webStream = __Downloader.GetUrlStream(__Url, __CacheStream.Position, out audioLengthInBytes);

                if (webStream == null)
                {
                    throw new PuckevichException("Error while creating Url Stream!");
                }

                if (__RequestTasksStop)
                {
                    return;
                }

                if (__CacheStream.Status == AudioStorageStatus.NotStored)
                {
                    __CacheStream.AudioSize = audioLengthInBytes;
                }

                if (__RequestTasksStop)
                {
                    return;
                }

                __ProducerConsumerStream = new ProducerConsumerMemoryStream(__CacheStream);
                __ProducerConsumerStream.LoadToMemory();

                if (__RequestTasksStop)
                {
                    return;
                }

                var buffer = new byte[WEB_BUFFER_SIZE];

                int blockRead = 0;
                int lengthRead;

                if (__RequestTasksStop)
                {
                    return;
                }

                while ((lengthRead = webStream.Read(buffer, 0, buffer.Length)) != 0)
                {
                    blockRead += lengthRead;
                    __ProducerConsumerStream.Write(buffer, 0, lengthRead);

                    if (__RequestTasksStop)
                    {
                        return;
                    }

                    if (blockRead >= WEB_THRESHOLD)
                    {
                        __ThresholdDownloaded = true;
                    }

                    if (__CacheStream == null)
                    {
                        return;
                    }

                    if (__RequestTasksStop)
                    {
                        return;
                    }
                }
            }
            finally
            {
                if (webStream != null)
                {
                    webStream.Dispose();
                }
                __ProducerConsumerStream.FlushToCache();
                __ProducerConsumerStream.WriteFinished = true;
                __ThresholdDownloaded = true;
            }
        }
Example #4
0
 private void CleanActions()
 {
     __PlayingStopwatch.Reset();
     __ProducerConsumerStream.Dispose();
     __ProducerConsumerStream = null;
 }
Example #5
0
        public void Init()
        {
            __CacheStream = __Storage.GetCacheStream(__Audio);

            switch (__CacheStream.Status)
            {
                case AudioStorageStatus.Stored:
                    __ProducerConsumerStream = new ProducerConsumerMemoryStream(__CacheStream);
                    __ProducerConsumerStream.LoadToMemory();
                    __ProducerConsumerStream.WriteFinished = true;
                    DownloadedFracion = 1.0;

                    break;
                case AudioStorageStatus.PartiallyStored:
                case AudioStorageStatus.NotStored:
                    if (__Downloader == null || __Url == null)
                        throw new PuckevichException("__Url or __Downloader cannot be null for not cached audio!");

                    __WebDownloaderTask = Task.Run((Action)WebDownloader);

                    break;
                default:
                    throw new ArgumentOutOfRangeException();
            }
            __TasksInitialized = true;

            while (__CacheStream.Status != AudioStorageStatus.Stored && !__ThresholdDownloaded)
                Thread.Sleep(1);

            if (__RequestTasksStop)
                return;

            __BassStream = Bass.BASS_StreamCreateFileUser(BASSStreamSystem.STREAMFILE_BUFFER,
                                                          BASSFlag.BASS_DEFAULT,
                                                          __BassFileProcs,
                                                          IntPtr.Zero);

            WhenInit();
        }
Example #6
0
        private void WebDownloader()
        {
            Stream webStream = null;
            try
            {
                long audioLengthInBytes;

                if (__RequestTasksStop)
                    return;

                webStream = __Downloader.GetUrlStream(__Url, __CacheStream.Position, out audioLengthInBytes);

                if (webStream == null)
                    throw new PuckevichException("Error while creating Url Stream!");

                if (__RequestTasksStop)
                    return;

                if (__CacheStream.Status == AudioStorageStatus.NotStored)
                    __CacheStream.AudioSize = audioLengthInBytes;

                if (__RequestTasksStop)
                    return;

                __ProducerConsumerStream = new ProducerConsumerMemoryStream(__CacheStream);
                __ProducerConsumerStream.LoadToMemory();

                if (__RequestTasksStop)
                    return;

                var buffer = new byte[WEB_BUFFER_SIZE];

                int blockRead = 0;
                int lengthRead;

                if (__RequestTasksStop)
                    return;

                while ((lengthRead = webStream.Read(buffer, 0, buffer.Length)) != 0)
                {
                    blockRead += lengthRead;
                    __ProducerConsumerStream.Write(buffer, 0, lengthRead);

                    if (__RequestTasksStop)
                        return;

                    if (blockRead >= WEB_THRESHOLD)
                    {
                        __ThresholdDownloaded = true;
                    }

                    if (__CacheStream == null)
                        return;

                    if (__RequestTasksStop)
                        return;
                }


            }
            finally
            {
                if (webStream != null)
                    webStream.Dispose();
                __ProducerConsumerStream.FlushToCache();
                __ProducerConsumerStream.WriteFinished = true;
                __ThresholdDownloaded = true;
            }
        }