/// <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(); } }
/// <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)); }
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); }
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); }
//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; }
private static extern IntPtr _CreateStream(int freq, int flags, StreamCallBack proc, int user);