home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Audio Plus 10-94
/
AUDIOPLUS.ISO
/
unix
/
playrs
/
soundinf
/
soundinf.c
< prev
Wrap
C/C++ Source or Header
|
1993-02-10
|
4KB
|
189 lines
**********************************************************************/
* */
* File: soundinfo.c */
* Author: Andrew W. Scherpbier */
* Version: 1.00 */
* Created: 18 Nov 1992 */
* */
* Copyright (c) 1991, 1992 Andrew Scherpbier */
* All Rights Reserved. */
* */
* */
*--------------------------------------------------------------------*/
* Description: Display or modify the info field of an audio */
* file header */
* */
**********************************************************************/
include <stdio.h>
include <fcntl.h>
include <multimedia/libaudio.h>
include <multimedia/audio_hdr.h>
define PUBLIC
define PRIVATE static
define TRUE (1)
define FALSE (0)
define OK (0)
define NOTOK (-1)
define when break;case
define orwhen case
define otherwise break;default
* Private routines
* ================
*/
RIVATE void set_info(char *soundfile, char *info);
RIVATE void sound_info(char *soundfile);
* Private variables
* =================
*/
* Public routines
* ===============
*/
* Public variables
* ================
*/
**************************************************************************
* PUBLIC main(int ac, char **av)
*/
UBLIC main(int ac, char **av)
int c;
int do_set_info = 0;
extern int optind;
extern char *optarg;
char infobuf[2048];
while ((c = getopt(ac, av, "i:")) != EOF)
{
switch (c)
{
when 'i':
do_set_info++;
strcpy(infobuf, optarg);
otherwise:
fprintf(stderr, "usage: soundinfo [-i info] soundfile ...\n");
exit(1);
}
}
if (do_set_info && optind < ac)
{
set_info(av[optind], infobuf);
exit(0);
}
for (; optind < ac; optind++)
{
printf("%24s -- ", av[optind]);
sound_info(av[optind]);
}
**************************************************************************
* PRIVATE void sound_info(char *soundfile)
* PURPOSE:
* Display the info field from the header of this soundfile
*/
RIVATE void sound_info(char *soundfile)
int fd;
char infop[2048];
Audio_hdr hp;
if (!audio_isaudiofile(soundfile))
{
printf("Not an audio file\n");
return;
}
fd = open(soundfile, O_RDONLY);
if (fd < 0)
{
printf("no such file\n");
return;
}
if (audio_read_filehdr(fd, &hp, infop, 2048) == AUDIO_SUCCESS)
{
printf("%s\n", infop);
}
else
{
printf("Invalid sound file header\n");
}
close(fd);
**************************************************************************
* PRIVATE void set_info(char *soundfile, char *info)
* PURPOSE:
* Set the info field of an audio file
*/
RIVATE void set_info(char *soundfile, char *info)
char *buf;
int fd;
char infop[2048];
Audio_hdr hp;
if (!audio_isaudiofile(soundfile))
{
fprintf(stderr, "%s is not an audio file\n", soundfile);
exit(1);
}
fd = open(soundfile, O_RDONLY);
if (fd < 0)
{
perror(soundfile);
exit(1);
}
if (audio_read_filehdr(fd, &hp, infop, 2048) != AUDIO_SUCCESS)
{
fprintf(stderr, "Invalid sound file header in %s\n", soundfile);
exit(1);
}
/*
* Read the whole file into memory
*/
buf = (char *)malloc(hp.data_size);
read(fd, buf, hp.data_size);
close(fd);
fd = open(soundfile, O_WRONLY | O_TRUNC);
if (fd < 0)
{
perror(soundfile);
exit(1);
}
if (audio_write_filehdr(fd, &hp, info, strlen(info) + 1) != AUDIO_SUCCESS)
{
fprintf(stderr, "Unable to write back the audio file\n");
exit(1);
}
write(fd, buf, hp.data_size);
close(fd);