Update of /cvsroot/fink/dists/10.4/unstable/main/finkinfo/sound
In directory sc8-pr-cvs17:/tmp/cvs-serv7205

Added Files:
        vmo2wav.info vmo2wav.patch 
Log Message:
New from tracker

http://sourceforge.net/tracker/index.php?func=detail&aid=1757176&group_id=17203&atid=414256

--- NEW FILE: vmo2wav.patch ---
--- siefs-0.5/converter/vmconvert.c-orig        2005-08-03 13:14:36.000000000 
+0200
+++ siefs-0.5/converter/vmconvert.c     2005-08-03 13:05:14.000000000 +0200
@@ -1,3 +1,5 @@
+/* vmconvert.c - adapted by Peter Fokker <[EMAIL PROTECTED]> ; deal with 
endianness  2005-08-03 */
+
 #include <stdlib.h>
 #include <string.h>
 
@@ -48,6 +50,17 @@
        rh->filesize = sizeof(struct riff_header) + wav_data_size - 8;
        rh->datasize = wav_data_size;
 
+       /* take care of endian anomaly; make it little endian */
+       rh->filesize    = endian_l(rh->filesize);
+       rh->fmthsize    = endian_l(rh->fmthsize);
+       rh->format      = endian_s(rh->format);
+       rh->channels    = endian_s(rh->channels);
+       rh->rate        = endian_l(rh->rate);
+       rh->bsec        = endian_l(rh->bsec);
+       rh->align       = endian_s(rh->align);
+       rh->bits        = endian_s(rh->bits);
+       rh->datasize    = endian_l(rh->datasize);
+
        return sizeof(struct riff_header);
 }
 
@@ -68,6 +81,7 @@
 
        gsm_frame s;
        gsm_byte *p;
+       gsm_signal *w;  /* used to step through output for endianness */
        int i;
 
        p = (gsm_byte *)vmo_frame;
@@ -84,7 +98,12 @@
                /* invalid frame */
                bzero(buffer, 160 * sizeof(gsm_signal));
        }
-       
+       else {
+               /* valid frame, but how about endianness? */
+               for (w = (gsm_signal *) buffer, i=160; (i-- > 0); ++w) {
+                       *w = endian_s(*w);
+               }
+       }
        return;
 }
 
@@ -94,3 +113,45 @@
 
 }
 
+/* These two routines convert shorts (16 bits) and
+ * longs (32 bits) to little endian format. Trick is to let the
+ * compiler store a multibyte number in endian_test. On a little
+ * endian machine, this will result in the LSB being 1 whereas
+ * on a big endian machine it will be 0. By casting a pointer
+ * to unsigned char, we can determine the endianness automagically.
+ * If we discover we are running on a big endian, we swap, otherwise
+ * we do nothing.
+ */
+
+short endian_s(short i) {
+  static short endian_test = 0x0001;
+  unsigned char *little_endian = (unsigned char *) &endian_test;
+  unsigned char b0,b1;
+
+  if (*little_endian) {
+    return i;
+  }
+  else {
+    b0 = (i & 0x00FF);
+    b1 = ((i & 0xFF00) >> 8);
+    return (b0 << 8) |  b1;
+  }
+}
+
+long endian_l(long i) {
+  static short endian_test = 0x0001;
+  unsigned char *little_endian = (unsigned char *) &endian_test;
+  unsigned char b0,b1,b2,b3;
+
+  if (*little_endian) {
+    return i;
+  }
+  else {
+    b0 = (i & 0x000000FF);
+    b1 = ((i & 0x0000FF00) >> 8);
+    b2 = ((i & 0x00FF0000) >> 16);
+    b3 = ((i & 0xFF000000) >> 24);
+    return (b0 << 24) | (b1 << 16) | (b2 << 8) | b3;
+  }
+}
+
--- siefs-0.5/converter/vmconvert.h-orig        2005-08-03 13:14:36.000000000 
+0200
+++ siefs-0.5/converter/vmconvert.h     2005-08-03 09:40:04.000000000 +0200
@@ -1,3 +1,5 @@
+/* vmconvert.h - adapted by Peter Fokker <[EMAIL PROTECTED]> ; deal with 
endianness  2005-08-03 */
+
 #ifndef VMCONVERT_H
 #define VMCONVERT_H
 
@@ -5,6 +7,8 @@
 int vmo_start();
 void vmo_decode(void *vmo_frame, void *buffer);
 void vmo_end();
+short endian_s(short i);
+long endian_l(long i);
 
 #endif

--- NEW FILE: vmo2wav.info ---
Package: vmo2wav
Version: 1
Revision: 3
Source: http://chaos.allsiemens.com/download/siefs-0.5.tar.gz
Source-MD5: 974328fc20b99e975d03a312a2814ed8
DocFiles: README AUTHORS COPYING
Description: Converts Siemens Voice Memo files to wav
License: GPL
Maintainer: Carl van Denzen <[EMAIL PROTECTED]>
Homepage: http://chaos.allsiemens.com
Patch: %n.patch
CompileScript: <<
#!/bin/sh -ev
mkdir include
mkdir include/fuse
echo '(*release)' >include/fuse/fuse.h
./configure --with-fuse=$(pwd)
cd converter
make
<<
InstallScript: <<
#!/bin/sh -ev
mkdir -p %i/bin
cp converter/vmo2wav %i/bin
<<
DescPort: <<
The utility vmo2wav is hidden in the SieFS (Siemens File System) project, which 
attempts to allow mounting of a mobile phone under Linux. Project home page: 
http://chaos.allsiemens.com/download/siefs-0.5.tar.gz
It didn't compile out of the box because SieFS depends on FUSE, which was not 
installed and does not HAVE to be installed for the conversion utility as such. 
However, ./configure did not want to continue without FUSE.
The solution: we simply fake the existence of the necessary file. The 
configure-script looks for a file .../include/fuse/fuse.h which is to contain 
at least the text "(*release)". Well, let's provide that than.
There is also a section on Endian-ness; it appeared that the converted files 
were not converted correctly on a Mac.
Peter Fokker / <peter (at) berestijn (dot) nl> / 2005-08-03
<<


-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
Fink-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/fink-commits

Reply via email to