build system revision
[vg.git] / vg_depencies.c
diff --git a/vg_depencies.c b/vg_depencies.c
new file mode 100644 (file)
index 0000000..318bd9c
--- /dev/null
@@ -0,0 +1,83 @@
+#include "vg_vorbis.h"
+#include "vg_image.h"
+
+#undef STB_VORBIS_HEADER_ONLY
+#include "submodules/stb/stb_vorbis.c"
+#undef L
+#undef R
+#undef C
+
+#define STB_IMAGE_WRITE_IMPLEMENTATION
+#define STB_IMAGE_IMPLEMENTATION
+#include "vg/submodules/stb/stb_image.h"
+#include "vg/submodules/stb/stb_image_write.h"
+
+/* 
+ * adapted from stb_vorbis.h, since the original does not handle mono->stereo
+ */
+int 
+stb_vorbis_get_samples_float_interleaved_stereo( stb_vorbis *f, float *buffer, 
+                                                 int len )
+{
+   int n = 0, c = 1;
+   if( f->channels < 2 ) c = 0;
+
+   while( n < len ) {
+      int k = f->channel_buffer_end - f->channel_buffer_start;
+
+      if( n+k >= len ) 
+         k = len - n;
+
+      for( int j=0; j < k; ++j ) {
+         *buffer++ = f->channel_buffers[ 0 ][f->channel_buffer_start+j];
+         *buffer++ = f->channel_buffers[ c ][f->channel_buffer_start+j];
+      }
+
+      n += k;
+      f->channel_buffer_start += k;
+
+      if( n == len )
+         break;
+
+      if( !stb_vorbis_get_frame_float( f, NULL, NULL ))
+         break;
+   }
+
+   return n;
+}
+
+/* 
+ * ........ more wrecked code sorry!
+ */
+int 
+stb_vorbis_get_samples_i16_downmixed( stb_vorbis *f, i16 *buffer, int len )
+{
+   int n = 0, c = 1;
+   if( f->channels < 2 ) c = 0;
+
+   while( n < len ) {
+      int k = f->channel_buffer_end - f->channel_buffer_start;
+
+      if( n+k >= len ) 
+         k = len - n;
+
+      for( int j=0; j < k; ++j ) {
+         float sl = f->channel_buffers[ 0 ][f->channel_buffer_start+j],
+               sr = f->channel_buffers[ c ][f->channel_buffer_start+j];
+
+         *buffer++ = vg_clampf( 0.5f*(sl+sr), -1.0f, 1.0f ) * 32767.0f;
+         //*buffer++ = vg_clampf( sr, -1.0f, 1.0f ) * 32767.0f;
+      }
+
+      n += k;
+      f->channel_buffer_start += k;
+
+      if( n == len )
+         break;
+
+      if( !stb_vorbis_get_frame_float( f, NULL, NULL ))
+         break;
+   }
+
+   return n;
+}