aboutsummaryrefslogtreecommitdiff
path: root/cvs/cvsweb.cgi/code/nel/samples/sound_sources/main.cpp?rev=1.6&content-type=text
diff options
context:
space:
mode:
authorneodarz <neodarz@neodarz.net>2018-08-11 20:21:34 +0200
committerneodarz <neodarz@neodarz.net>2018-08-11 20:21:34 +0200
commit0ea5fc66924303d1bf73ba283a383e2aadee02f2 (patch)
tree2568e71a7ccc44ec23b8bb3f0ff97fb6bf2ed709 /cvs/cvsweb.cgi/code/nel/samples/sound_sources/main.cpp?rev=1.6&content-type=text
downloadnevrax-website-self-hostable-0ea5fc66924303d1bf73ba283a383e2aadee02f2.tar.xz
nevrax-website-self-hostable-0ea5fc66924303d1bf73ba283a383e2aadee02f2.zip
Initial commit
Diffstat (limited to 'cvs/cvsweb.cgi/code/nel/samples/sound_sources/main.cpp?rev=1.6&content-type=text')
-rw-r--r--cvs/cvsweb.cgi/code/nel/samples/sound_sources/main.cpp?rev=1.6&content-type=text/x-cvsweb-markup&sortby=rev/index.html222
1 files changed, 222 insertions, 0 deletions
diff --git a/cvs/cvsweb.cgi/code/nel/samples/sound_sources/main.cpp?rev=1.6&content-type=text/x-cvsweb-markup&sortby=rev/index.html b/cvs/cvsweb.cgi/code/nel/samples/sound_sources/main.cpp?rev=1.6&content-type=text/x-cvsweb-markup&sortby=rev/index.html
new file mode 100644
index 00000000..244b1138
--- /dev/null
+++ b/cvs/cvsweb.cgi/code/nel/samples/sound_sources/main.cpp?rev=1.6&content-type=text/x-cvsweb-markup&sortby=rev/index.html
@@ -0,0 +1,222 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML>
+<HEAD><style> A { color:black }</style>
+<!-- hennerik CVSweb $Revision: 1.93 $ -->
+<TITLE>code/nel/samples/sound_sources/main.cpp - view - 1.6</TITLE></HEAD>
+<BODY BGCOLOR="#eeeeee">
+<table width="100%" border=0 cellspacing=0 cellpadding=1 bgcolor="#aaaaaa"><tr valign=bottom><td><a href="main.cpp?sortby=rev"><IMG SRC="http://www.nevrax.org/inc/img/picto-up.gif" ALT="[BACK]" BORDER="0" WIDTH="14" HEIGHT="13"></a> <b>Return to <A HREF="main.cpp?sortby=rev">main.cpp</A>
+ CVS log</b> <IMG SRC="http://www.nevrax.org/inc/img/picto-news.gif" ALT="[TXT]" BORDER="0" WIDTH="13" HEIGHT="15"></td><td align=right><IMG SRC="http://www.nevrax.org/inc/img/picto-dir.gif" ALT="[DIR]" BORDER="0" WIDTH="15" HEIGHT="13"> <b>Up to <a href="/cvs/cvsweb.cgi/?sortby=rev">Nevrax</a> / <a href="/cvs/cvsweb.cgi/code/?sortby=rev">code</a> / <a href="/cvs/cvsweb.cgi/code/nel/?sortby=rev">nel</a> / <a href="/cvs/cvsweb.cgi/code/nel/samples/?sortby=rev">samples</a> / <a href="/cvs/cvsweb.cgi/code/nel/samples/sound_sources/?sortby=rev">sound_sources</a></b></td></tr></table><HR noshade><table width="100%"><tr><td bgcolor="#ffffff">File: <a href="/cvs/cvsweb.cgi/?sortby=rev">Nevrax</a> / <a href="/cvs/cvsweb.cgi/code/?sortby=rev">code</a> / <a href="/cvs/cvsweb.cgi/code/nel/?sortby=rev">nel</a> / <a href="/cvs/cvsweb.cgi/code/nel/samples/?sortby=rev">samples</a> / <a href="/cvs/cvsweb.cgi/code/nel/samples/sound_sources/?sortby=rev">sound_sources</a> / <a href="/cvs/cvsweb.cgi/code/nel/samples/sound_sources/main.cpp?sortby=rev">main.cpp</a>&nbsp;(<A HREF="/cvs/cvsweb.cgi/~checkout~/code/nel/samples/sound_sources/main.cpp?rev=1.6&amp;sortby=rev" target="cvs_checkout" onClick="window.open('/cvs/cvsweb.cgi/~checkout~/code/nel/samples/sound_sources/main.cpp?rev=1.6','cvs_checkout','resizeable,scrollbars');"><b>download</b></A>)<BR>
+Revision <B>1.6</B>, <i>Wed Feb 20 18:07:22 2002 UTC</i> (5 months ago) by <i>lecroart</i>
+<BR>Branch: <b>MAIN</b>
+<BR>CVS Tags: <b>georges_v2, HEAD</b><BR>Changes since <b>1.5: +2 -2
+ lines</b><PRE>
+#FIXED: doxygen warning
+</PRE>
+</td></tr></table><HR noshade><PRE>/** \file sound_sources/main.cpp
+ * Simple example of NeL sound engine usage
+ *
+ * $Id: main.cpp,v 1.6 2002/02/20 18:07:22 lecroart Exp $
+ */
+
+/* Copyright, 2001 Nevrax Ltd.
+ *
+ * This file is part of NEVRAX NEL.
+ * NEVRAX NEL is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+
+ * NEVRAX NEL is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with NEVRAX NEL; see the file COPYING. If not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ * MA 02111-1307, USA.
+ */
+
+
+/*
+ * This sample shows how to initialize the audio mixer (UAudioMixer),
+ * how to create a source (USource), and how to move the listener
+ * (UListener).
+ */
+
+
+#include &quot;nel/misc/debug.h&quot;
+#include &quot;nel/misc/time_nl.h&quot;
+#include &quot;nel/misc/vector.h&quot;
+using namespace NLMISC;
+
+#include &quot;nel/sound/u_audio_mixer.h&quot;
+#include &quot;nel/sound/u_listener.h&quot;
+using namespace NLSOUND;
+
+#include &lt;stdio.h&gt;
+
+
+// Pointer to the audio mixer object
+UAudioMixer &nbsp; &nbsp; *AudioMixer = NULL;
+
+
+/*
+ * Initialization
+ */
+void Init()
+{
+ &nbsp; &nbsp; &nbsp; &nbsp;try
+ &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * 1. Create the audio mixer object and init it.
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * If the sound driver cannot be loaded, an exception is thrown.
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; */
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AudioMixer = UAudioMixer::createAudioMixer();
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AudioMixer-&gt;init();
+
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * 2. Load a &quot;sources sounds file&quot; (.nss), its sound properties and
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * its attached wave data files (.wav)
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; */
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AudioMixer-&gt;loadSoundBuffers( &quot;sample_sounds.nss&quot; );
+
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * In this small example, we don't have any environmental effects or
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * environment sounds. If so we would load an &quot;environmental effects
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * file&quot; (.nef) and an &quot;environment sounds file&quot; (.nes):
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * AudioMixer-&gt;loadEnvEffects( &quot;effects.nef&quot; );
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * UEnvSound *root;
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * AudioMixer-&gt;loadEnvSounds( &quot;envsounds.nes&quot;, &amp;root );
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; */
+
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * 3. Initialize listener's position and orientation (in NeL coordinate system).
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; */
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CVector initpos ( 0.0f, 0.0f, 0.0f );
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CVector frontvec( 0.0f, 1.0f, 0.0f );
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CVector upvec( 0.0f, 0.0f, 1.0f );
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AudioMixer-&gt;getListener()-&gt;setPos( initpos );
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AudioMixer-&gt;getListener()-&gt;setOrientation( frontvec, upvec );
+
+ &nbsp; &nbsp; &nbsp; &nbsp;}
+ &nbsp; &nbsp; &nbsp; &nbsp;catch( Exception&amp; e )
+ &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;nlerror( &quot;Error: %s&quot;, e.what() );
+ &nbsp; &nbsp; &nbsp; &nbsp;}
+}
+
+
+/*
+ * Adding a source
+ */
+USource *OnAddSource( const char *name, float x, float y, float z )
+{
+ &nbsp; &nbsp; &nbsp; &nbsp;/*
+ &nbsp; &nbsp; &nbsp; &nbsp; * Create a source with sound 'name', and set some of its initial properties, if successful
+ &nbsp; &nbsp; &nbsp; &nbsp; */
+ &nbsp; &nbsp; &nbsp; &nbsp;USource *source = AudioMixer-&gt;createSource( name );
+ &nbsp; &nbsp; &nbsp; &nbsp;if ( source != NULL )
+ &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;source-&gt;setPos( CVector(x,y,z) );
+
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/* The initial gain, pitch and looping state are stored
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * in the &quot;source sounds file&quot;.
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; */
+
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;source-&gt;play(); // start playing immediately
+ &nbsp; &nbsp; &nbsp; &nbsp;}
+ &nbsp; &nbsp; &nbsp; &nbsp;else
+ &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;nlwarning( &quot;Sound '%s' not found&quot;, name );
+ &nbsp; &nbsp; &nbsp; &nbsp;}
+ &nbsp; &nbsp; &nbsp; &nbsp;return source;
+}
+
+
+/*
+ * When moving the listener, wait for a short delay
+ */
+void OnMove( const CVector&amp; listenerpos )
+{
+ &nbsp; &nbsp; &nbsp; &nbsp;// Move forward
+ &nbsp; &nbsp; &nbsp; &nbsp;AudioMixer-&gt;getListener()-&gt;setPos( listenerpos );
+
+ &nbsp; &nbsp; &nbsp; &nbsp;// Wait 20 ms
+ &nbsp; &nbsp; &nbsp; &nbsp;TTime time = CTime::getLocalTime();
+ &nbsp; &nbsp; &nbsp; &nbsp;while ( CTime::getLocalTime() &lt; time+20 );
+
+ &nbsp; &nbsp; &nbsp; &nbsp;/* If we used spawned sources or &quot;envsounds&quot; or if we had
+ &nbsp; &nbsp; &nbsp; &nbsp; * a large number of sources, we should call:
+ &nbsp; &nbsp; &nbsp; &nbsp; * AudioMixer-&gt;update();
+ &nbsp; &nbsp; &nbsp; &nbsp; */
+}
+
+
+/*
+ * main
+ *
+ * Note: The NeL vector coordinate system is described as follows:
+ * \verbatim
+ * &nbsp; &nbsp; (top)
+ * &nbsp; &nbsp; &nbsp; z &nbsp; &nbsp;
+ * &nbsp; &nbsp; &nbsp; | &nbsp;y (front)
+ * &nbsp; &nbsp; &nbsp; | /
+ * &nbsp; &nbsp; &nbsp; -----x (right)
+ * \endverbatim
+ */
+void main()
+{
+ &nbsp; &nbsp; &nbsp; &nbsp;// Initialization
+ &nbsp; &nbsp; &nbsp; &nbsp;Init();
+
+ &nbsp; &nbsp; &nbsp; &nbsp;// First step: we create two sources
+ &nbsp; &nbsp; &nbsp; &nbsp;printf( &quot;Press ENTER to start playing the two sources\n&quot; );
+ &nbsp; &nbsp; &nbsp; &nbsp;printf( &quot;One is 20 meters ahead, on the right\n&quot; );
+ &nbsp; &nbsp; &nbsp; &nbsp;printf( &quot;The other is 5 meters ahead, on the left\n&quot; );
+ &nbsp; &nbsp; &nbsp; &nbsp;getchar();
+ &nbsp; &nbsp; &nbsp; &nbsp;USource *src1 = OnAddSource( &quot;Beep&quot;, 1.0f, 20.0f, 0.0f ); &nbsp;// Beep on the right, 20 meters ahead
+ &nbsp; &nbsp; &nbsp; &nbsp;USource *src2 = OnAddSource( &quot;Tuut&quot;, -2.0f, 5.0f, 0.0f ); // Tuut on the left, 5 meters ahead
+
+ &nbsp; &nbsp; &nbsp; &nbsp;// Second step: we will move the listener ahead
+ &nbsp; &nbsp; &nbsp; &nbsp;printf( &quot;Press ENTER again to start moving the listener\n&quot; );
+ &nbsp; &nbsp; &nbsp; &nbsp;getchar();
+
+ &nbsp; &nbsp; &nbsp; &nbsp;// Listener orientation is constant in this example (see initialization)
+
+ &nbsp; &nbsp; &nbsp; &nbsp;// Move forward, then backward, twice
+ &nbsp; &nbsp; &nbsp; &nbsp;CVector listenervel;
+ &nbsp; &nbsp; &nbsp; &nbsp;CVector listenerpos ( 0.0f, 0.0f, 0.0f );
+ &nbsp; &nbsp; &nbsp; &nbsp;for ( uint i=0; i!=2; i++ )
+ &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf( &quot;%u of 2\n&quot;, i+1 );
+
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Forward velocity
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;listenervel.set( 0.0f, 0.5f, 0.0f );
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AudioMixer-&gt;getListener()-&gt;setVelocity( listenervel );
+
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Move forward: set position every frame
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf( &quot;Moving forward, going past the sources...\n&quot; );
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for ( listenerpos.y=0.0f; listenerpos.y&lt;30.0f; listenerpos.y+=0.1f )
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;OnMove( listenerpos );
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}
+
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Backward velocity
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;listenervel.set( 0.0f, -0.5f, 0.0f );
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AudioMixer-&gt;getListener()-&gt;setVelocity( listenervel );
+
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Move backward: set position every frame
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf( &quot;Moving backward, going back to the start position...\n&quot; );
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for ( listenerpos.y=30.0f; listenerpos.y&gt;0.0f; listenerpos.y-=0.1f )
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;OnMove( listenerpos );
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}
+ &nbsp; &nbsp; &nbsp; &nbsp;}
+
+ &nbsp; &nbsp; &nbsp; &nbsp;// Finalization
+ &nbsp; &nbsp; &nbsp; &nbsp;printf( &quot;Press ENTER again to exit\n&quot; );
+ &nbsp; &nbsp; &nbsp; &nbsp;getchar();
+ &nbsp; &nbsp; &nbsp; &nbsp;delete AudioMixer;
+}</PRE> \ No newline at end of file