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();
|
|
}
|
|
}
|