]> git.mxchange.org Git - simgear.git/commitdiff
Udates from Steve.
authorcurt <curt>
Fri, 2 Oct 1998 21:35:09 +0000 (21:35 +0000)
committercurt <curt>
Fri, 2 Oct 1998 21:35:09 +0000 (21:35 +0000)
Audio/CHANGES
example/example.cxx
src/sl.h
src/slDSP.cxx
src/slScheduler.cxx

index 849d2026126b88003fdd0c1ba6aea5fd49ad120d..c360107195cfac3cbf73fcbc43e63a4363229685 100644 (file)
@@ -9,12 +9,22 @@
 *                                              *
 \**********************************************/
 
+* 28th Sept 1889 -- Fixed a bug associated with exiting the
+                      program with sounds still playing.
+                    Fixed a bug associated with using the
+                      package in the absence of a sound card.
+                    Added a new member function "working"
+                      which is the opposite of "not_working",
+                      (as demanded by a bunch of rabid optimists)!
+                    Fixed a couple of typo's in the manual.
+
 * 23rd Sept 1998 -- The Good News: Finally got around to
                          getting the pitch envelope working. (Hooray) 
                     The Bad News: This costs quite a bit in
                          performance - and it was a MAJOR rewrite
                          of significant parts of the internals,
                          so we may need some bug fixes.
+                    This version is 0.5
 
 * 7th  July 1998 -- Fixed some error checking in slSample.cxx and
                     a missing declaration in sl.h
index f12ca2939089f7c3254c8be25f05eb695becd93c..ae519786d935f8e1440c9ab5e6d60c38d67de1ac 100644 (file)
@@ -55,39 +55,15 @@ int main ()
 
   int tim = 0 ;  /* My periodic event timer. */
 
-  slEnvelope pitch_envelope ( 3, SL_SAMPLE_LOOP ) ;
-  slEnvelope p_envelope ( 1, SL_SAMPLE_ONE_SHOT ) ;
-  slEnvelope volume_envelope ( 3, SL_SAMPLE_LOOP ) ;
-
   while ( SL_TRUE )
   {
-
-   tim++ ;  /* Time passes */
+    tim++ ;  /* Time passes */
 
     if ( tim % 200 == 0 ) sched.playSample ( s1 ) ;
     if ( tim % 180 == 0 ) sched.playSample ( s2 ) ;
     if ( tim % 150 == 0 ) sched.playSample ( s3 ) ;
     if ( tim % 120 == 0 ) sched.playSample ( s4 ) ;
 
-    if ( tim == 60 ) {
-       // introduce an envelope for our engine noise after 10 seconds
-
-       pitch_envelope.setStep ( 0,  0.0, 1.0 ) ;
-       pitch_envelope.setStep ( 1,  5.0, 2.0 ) ;
-       pitch_envelope.setStep ( 2, 10.0, 1.0 ) ;
-
-       p_envelope.setStep ( 0,  5.0, 2.0 ) ;
-
-       volume_envelope.setStep ( 0,  0.0, 1.0 ) ;
-       volume_envelope.setStep ( 1,  5.0, 2.0 ) ;
-       volume_envelope.setStep ( 2, 10.0, 1.0 ) ;
-
-       // scheduler -> playSample ( my_sample ) ;
-       sched.addSampleEnvelope( s, 0, 0, &p_envelope, SL_PITCH_ENVELOPE );
-       sched.addSampleEnvelope( s, 0, 1, &volume_envelope, SL_VOLUME_ENVELOPE);
-    }
-
-
     /*
       For the sake of realism, I'll delay for 1/30th second to
       simulate a graphics update process.
index dd026b7f074c3e57db6d8efa588827c72410878b..5cbbc2adfba1ea31b0e8b20d8ad1c39d6d5999bd 100644 (file)
--- a/src/sl.h
+++ b/src/sl.h
@@ -24,15 +24,14 @@ typedef unsigned short Ushort ;
 
 #define SL_DEFAULT_SAMPLING_RATE 11025
 
-/* Set if the next slScheduler::update will die */
-extern char *__slPendingError ;
-
 class slSample       ;
 class slSamplePlayer ;
 class slEnvelope     ;
 class slScheduler    ;
 class slDSP          ;
 
+extern char *__slPendingError ;
+
 class slDSP
 {
 private:
@@ -167,12 +166,9 @@ public:
 
  ~slSample ()
   {
-    if ( ref_count != 0 )
-    {
-    if ( __slPendingError == NULL )
+    if ( ref_count != 0 && __slPendingError == NULL )
       __slPendingError =
-            "slXXXX: FATAL ERROR - Application deleted a sample while it was playing.\n" ;
-    }
+        "slSample: FATAL ERROR - Application deleted a sample while it was playing.\n" ;
 
     delete buffer ;
   }
@@ -331,12 +327,9 @@ public:
  
  ~slEnvelope ()
   {
-    if ( ref_count != 0 )
-    {
-    if ( __slPendingError == NULL )
+    if ( ref_count != 0 && __slPendingError == NULL )
       __slPendingError =
-            "slXXXX: FATAL ERROR - Application deleted an envelope while it was playing.\n" ;
-    }
+      "slEnvelope: FATAL ERROR - Application deleted an envelope while it was playing.\n" ;
 
     delete time ;
     delete value ;
index fbb0da32b8200efa43068ee412532b5b598d6573..a8a96d4dadc96a80c23e46d8100c9457008d4db7 100644 (file)
@@ -336,6 +336,9 @@ void slDSP::sync ()
 
 void slDSP::stop ()
 {
+   if ( error )
+     return ;
+
    waveOutReset( hWaveOut );
 }
 
@@ -647,6 +650,9 @@ float slDSP::secondsUsed ()
 
 void slDSP::sync ()
 { 
+   if ( error )
+     return ;
+
   /* found this in the header file - but no description
    * or example for the long parameter.
    */
index dd29a789612aa9ece6a89071d6db6cb047b6b6f4..5fe4caa91d4589a74519b938c11e17baa8c6fb0e 100644 (file)
@@ -1,9 +1,10 @@
 
 #include "sl.h"
 
-slScheduler *slScheduler::current = NULL ;
 char *__slPendingError = NULL ;
 
+slScheduler *slScheduler::current = NULL ;
+
 void slScheduler::init ()
 {
   current = this ;
@@ -49,7 +50,8 @@ void slScheduler::init ()
 
 void slScheduler::initBuffers ()
 {
-  if ( not_working () ) return ;
+  if ( not_working () )
+    return ;
 
   delete mixer_buffer ;
   delete spare_buffer0 ;
@@ -118,17 +120,17 @@ void slScheduler::mixBuffer ( slSamplePlayer *spa, slSamplePlayer *spb,
 
 void slScheduler::realUpdate ( int dump_first )
 {
-  int i ;
-
   if ( not_working () )
     return ;
 
   if ( __slPendingError != NULL )
   {
-      fprintf ( stderr, __slPendingError ) ;
-      exit ( 1 ) ;
+    fprintf ( stderr, "%s", __slPendingError ) ;
+    exit ( 1 ) ;
   }
 
+  int i ;
+
   while ( secondsUsed() <= safety_margin )
   {
     slSamplePlayer *psp [ 3 ] ;
@@ -208,6 +210,9 @@ void slScheduler::realUpdate ( int dump_first )
 
 void slScheduler::addCallBack ( slCallBack c, slSample *s, slEvent e, int m )
 {
+  if ( not_working () )
+    return ;
+
   if ( num_pending_callbacks >= SL_MAX_CALLBACKS )
   {
     fprintf ( stderr, "slScheduler: Too many pending callback events!\n" ) ;
@@ -224,6 +229,9 @@ void slScheduler::addCallBack ( slCallBack c, slSample *s, slEvent e, int m )
 
 void slScheduler::flushCallBacks ()
 {
+  if ( not_working () )
+    return ;
+
   /*
     Execute all the callbacks that we accumulated
     in this iteration.