93 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
// This example will show how to override file access with irrKlang.
 | 
						|
// This is useful if you want to read sounds from other sources than
 | 
						|
// just files, for example from custom internet streams or 
 | 
						|
// an own encypted archive format.
 | 
						|
 | 
						|
using System;
 | 
						|
using System.IO;
 | 
						|
using IrrKlang;
 | 
						|
 | 
						|
namespace CSharp._04._OverrideFileAccess
 | 
						|
{
 | 
						|
	class Class1
 | 
						|
	{
 | 
						|
		// To start, we need to implement the class IFileFactory, which irrKlang uses
 | 
						|
		// to open files. The interface consists only of one single method named 
 | 
						|
		// openFile(String filename). In this method, we create return 
 | 
						|
		// our own file access class and return it:
 | 
						|
 | 
						|
		class MyIrrKlangFileFactory : IrrKlang.IFileFactory
 | 
						|
		{
 | 
						|
			public System.IO.Stream openFile(String filename)
 | 
						|
			{
 | 
						|
				// we simply could return an opened FileStream here, but to demonstrate
 | 
						|
				// overriding, we return our own filestream implementation
 | 
						|
				return new MyFileStream(filename);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		// an own implementation of FileStream to overwrite read access to files 
 | 
						|
		public class MyFileStream : System.IO.FileStream
 | 
						|
		{
 | 
						|
			public MyFileStream(String filename) : base(filename, FileMode.Open)
 | 
						|
			{
 | 
						|
			}		
 | 
						|
	
 | 
						|
			public override int Read(byte[] array, int offset, int count)
 | 
						|
			{
 | 
						|
				System.Console.Out.WriteLine("MyFileStream read bytes: " + count);
 | 
						|
				return base.Read(array, offset, count);
 | 
						|
			}
 | 
						|
 | 
						|
			public override long Seek(long offset, SeekOrigin origin)
 | 
						|
			{
 | 
						|
				System.Console.Out.WriteLine("MyFileStream seeked to: " + offset);
 | 
						|
				return base.Seek(offset, origin);
 | 
						|
			}
 | 
						|
		};
 | 
						|
 | 
						|
 | 
						|
 | 
						|
		// The main work is done, the only thing missing is to start up the 
 | 
						|
		// sound engine and tell it to use the created FileFactory for file access:
 | 
						|
 | 
						|
		// irrKlang 3D sound engine example 04, 
 | 
						|
		// demonstrating how to override file access of irrKlang
 | 
						|
		[STAThread]
 | 
						|
		static void Main(string[] args)
 | 
						|
		{
 | 
						|
			// start the sound engine with default parameters
 | 
						|
			ISoundEngine engine = new ISoundEngine();
 | 
						|
 | 
						|
			// create an instance of the file factory and let
 | 
						|
			// irrKlang know about it. 
 | 
						|
 | 
						|
			MyIrrKlangFileFactory myfactory = new MyIrrKlangFileFactory();
 | 
						|
			engine.AddFileFactory(myfactory);
 | 
						|
 | 
						|
			// that's it, play some sounds with our overriden
 | 
						|
			// file access methods:
 | 
						|
 | 
						|
			// now play some sounds until user presses 'q'
 | 
						|
 | 
						|
			Console.Out.WriteLine("\nDemonstrating file access overriding.");
 | 
						|
			Console.Out.WriteLine("Press any key to play some sound, press ESCAPE to quit.");
 | 
						|
 | 
						|
			_getch();
 | 
						|
 | 
						|
			engine.Play2D("../../media/getout.ogg", true);			
 | 
						|
 | 
						|
			do
 | 
						|
			{
 | 
						|
				// play some wave sound
 | 
						|
				engine.Play2D("../../media/bell.wav");
 | 
						|
			}
 | 
						|
			while(_getch() != 27); // user pressed eskape key to cancel
 | 
						|
		}
 | 
						|
		
 | 
						|
		// some simple function for reading keys from the console
 | 
						|
		[System.Runtime.InteropServices.DllImport("msvcrt")]
 | 
						|
		static extern int _getch();
 | 
						|
	}
 | 
						|
}
 |