This is fromsnd.c in view mode; [Download] [Up]
#import <stdio.h>
#import <sound/sound.h>
#import <sys/file.h>
SNDSoundStruct *snd ;
main( argc, argv ) int argc ; char *argv[] ; {
int i, fd, chancount = 0, whichchan = 0,
beginsamp = 0, endsamp = -1, samp = 0, byterev = 0 ;
FILE *fp ;
short *sampframe, sample ;
if ( argc == 1 ) {
fprintf( stderr,
"fromsnd usage: fromsnd [-b X] [-d X] [-e X] [-c X] [-x] file > output\n" ) ;
fprintf( stderr,
" -b X begin at sample frame X [0 by default]\n" ) ;
fprintf( stderr,
" -d X duration is X sample frames [EOF by default]\n" ) ;
fprintf( stderr,
" -e X end at sample frame X [EOF by default]\n" ) ;
fprintf( stderr,
" -c X selects channel X [all channels by default]\n" ) ;
fprintf( stderr,
" -x specifies byte-wise reversal [not reversed]\n" ) ;
fprintf( stderr,
" (channels are numbered from 0)\n" ) ;
fprintf( stderr,
" output is 16-bit linear shorts\n" ) ;
exit( -1 ) ;
}
for ( i = 1 ; i < argc ; i++ ) {
if ( !strcmp( argv[i], "-c" ) ) {
chancount = 1 ;
whichchan = atoi( argv[++i] ) ;
}
if ( !strcmp( argv[i], "-b" ) )
beginsamp = atoi( argv[++i] ) ;
if ( !strcmp( argv[i], "-d" ) )
endsamp = beginsamp + atoi( argv[++i] ) ;
if ( !strcmp( argv[i], "-e" ) )
endsamp = atoi( argv[++i] ) ;
if ( !strcmp( argv[i], "-x" ) )
byterev++ ;
}
if ( ( fd = open( argv[argc-1], O_CREAT | O_RDONLY, 0644 ) ) < 0 ) {
fprintf( stderr, "fromsnd: Unable to open '%s'\n", argv[argc-1] ) ;
exit( -1 ) ;
}
snd = (SNDSoundStruct *) calloc( sizeof(SNDSoundStruct), 1 ) ;
SNDReadHeader( fd, &snd ) ;
if ( snd->magic != SND_MAGIC ) {
fprintf( stderr, "fromsnd: '%s' not a soundfile\n", argv[argc-1] ) ;
exit( -1 ) ;
}
if ( ( fp = fdopen( fd, "r" ) ) == NULL ) {
fprintf( stderr, "fromsnd: Unable to fdopen '%s'\n", argv[argc-1] ) ;
exit( -1 ) ;
}
sampframe = (short *) calloc( sizeof(short), snd->channelCount ) ;
rewind( fp ) ;
for ( i = 0 ; i < snd->dataLocation ; i++ )
fread( sampframe, 1, 1, fp ) ;
for ( i = 0 ; i < beginsamp ; i++ ) {
fread( sampframe, sizeof(short), snd->channelCount, fp ) ;
++samp ;
}
if ( chancount == 0 )
chancount = snd->channelCount ;
while ( fread( sampframe, sizeof(short), snd->channelCount, fp ) != 0 ) {
if ( byterev ) {
for ( i = 0 ; i < snd->channelCount ; i++ ) {
sample = *( sampframe + i ) ;
sample = ( sample << 8 ) | ( ( sample >> 8 ) & 0xff ) ;
*( sampframe + i ) = sample ;
}
}
fwrite( sampframe + whichchan, sizeof(short), chancount, stdout ) ;
if ( ++samp > endsamp && endsamp >= 0 )
break ;
}
fclose( fp ) ;
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.