Пример #1
0
        /// <summary>
        /// エフェクトを読み込む
        /// </summary>
        /// <param name="stream">ストリーム</param>
        /// <param name="filename">ファイル名</param>
        /// <param name="callback">コールバック</param>
        /// <param name="BeCached">キャッシュされるかどうか</param>
        /// <param name="streamCallBack">ストリームコールバック</param>
        /// <returns></returns>
        public static EffectManager Load(Stream stream, string filename, bool BeCached, ReadResourceCallBack callback, StreamCallBack streamCallBack)
        {
            var cached = CheckCache(filename, callback);

            if (cached != null)
            {
                return(cached);
            }
            var fn  = Path.GetFileNameWithoutExtension(filename);
            var dir = Path.Combine(Path.GetDirectoryName(filename), fn);

            try
            {
                var ret = LoadEffect(stream, callback, streamCallBack, dir);
                ret.CheckFrameLength();
                if (BeCached)
                {
                    if (table.ContainsKey(filename))
                    {
                        table[filename] = ret;
                    }
                    else
                    {
                        table.Add(filename, ret);
                    }
                    return((EffectManager)ret.Clone());
                }
                return(ret);
            }
            finally
            {
                stream.Close();
            }
        }
Пример #2
0
 /// <summary>
 /// エフェクトを読み込む
 /// </summary>
 /// <param name="stream">ストリーム</param>
 /// <param name="filename">ファイル名</param>
 /// <param name="callback">コールバック</param>
 /// <param name="streamCallBack">ストリームコールバック</param>
 /// <returns></returns>
 public static EffectManager Load(Stream stream, string filename, ReadResourceCallBack callback, StreamCallBack streamCallBack)
 {
     return(Load(stream, filename, true, callback, streamCallBack));
 }
Пример #3
0
        private static EffectManager ReadXMLEffects(XmlReader reader, ReadResourceCallBack callback, StreamCallBack streamCallBack, string dir)
        {
            var list    = new List <BaseEffect>();
            var manager = new EffectManager();

            while (reader.Read())
            {
                if (reader.IsStartElement())
                {
                    switch (reader.Name)
                    {
                    case "Effects":
                        float val = 0;
                        if (float.TryParse(reader.GetAttribute("FPS"), NumberStyles.Float, CultureInfo.InvariantCulture, out val))
                        {
                            manager.FPS = val;
                        }
                        else
                        {
                            manager.FPS = 60;
                        }

                        break;

                    case "Effect":
                        manager.Effects.Add(ReadXMLEffect(reader.ReadSubtree(), callback, dir));
                        break;

                    case "EffectReference":
                        var filepath  = reader.GetAttribute("FilePath");
                        var parentdir = Path.GetDirectoryName(dir);
                        var be        = ReadXMLEffect(reader.ReadSubtree(), callback, dir);
                        be.Filename = Path.Combine(parentdir, filepath);
                        list.Add(be);
                        manager.Effects.Add(be);
                        break;
                    }
                }
            }
            reader.Close();

            foreach (BaseEffect baseEffect in list)
            {
                using (Stream stream = streamCallBack(baseEffect.Filename))
                {
                    var em = Load(stream, baseEffect.Filename, callback, streamCallBack);
                    if (em != null)
                    {
                        baseEffect.Effects = em.Effects;
                        baseEffect.FPS     = em.FPS;
                    }
                }
            }
            return(manager);
        }
Пример #4
0
        private static EffectManager LoadEffect(Stream stream, ReadResourceCallBack callback, StreamCallBack streamCallBack, string dir)
        {
            var reader = XmlReader.Create(stream);

            while (reader.Read())
            {
                if (reader.IsStartElement())
                {
                    if (reader.Name == "Effects")
                    {
                        return(ReadXMLEffects(reader.ReadSubtree(), callback, streamCallBack, dir));
                    }
                }
            }
            reader.Close();
            return(null);
        }
Пример #5
0
        //not properly implemented yet
        /// <summary>
        ///     Create a user sample stream.
        /// </summary>
        /// <param name="freq">BassStream playback rate</param>
        /// <param name="flags">StreamFlags</param>
        /// <param name="proc">StreamCallBack delegate</param>
        /// <param name="user">The "user" value passed to the callback function</param>
        /// <returns></returns>
        private BassStream CreateStream(int freq, StreamFlags flags, StreamCallBack proc, int user)
        {
            if (_disposed)
                throw new ObjectDisposedException("BASSEngine");

            IntPtr handle = _CreateStream(freq, (int) flags, proc, user);
            if (handle == IntPtr.Zero) throw new BASSException();
            var output = new BassStream(handle);
            output.Owner = this;
            return output;
        }
Пример #6
0
 private static extern IntPtr _CreateStream(int freq, int flags, StreamCallBack proc, int user);