home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume16 / soundmail / part01 next >
Internet Message Format  |  1991-01-05  |  11KB

  1. From: jal@cs.wayne.edu (Jason Leigh)
  2. Newsgroups: comp.sources.misc
  3. Subject: v16i021:  Sound mail, Part01/01
  4. Message-ID: <1991Jan5.054421.3239@sparky.IMD.Sterling.COM>
  5. Date: 5 Jan 91 05:44:21 GMT
  6. Approved: kent@sparky.imd.sterling.com
  7. X-Checksum-Snefru: a6130637 4bcca5a6 fb93462e e43fdd89
  8.  
  9. Submitted-by: Jason Leigh <jal@cs.wayne.edu> 
  10. Posting-number: Volume 16, Issue 21
  11. Archive-name: soundmail/part01
  12.  
  13. This is the first release of soundmail.  A program that attaches to
  14. your current unix mail command so that you can include digitized sounds
  15. in your email messages.  Unfortunately this only works on SPARC stations...
  16.  
  17. It's really simple so don't take it too seriously.  But if any one is
  18. interested in enhancing it, it should be easy. Have fun...
  19.  
  20. @@snd laughter
  21.  
  22. Of course the following is a shar file...
  23.  
  24. #!/bin/sh-----cut here-----cut here-----cut here-----cut here-----
  25. #    This is a shell archive.
  26. #    Run the following text with /bin/sh to extract.
  27.  
  28. cat - << \Funky!Stuff! > Sound
  29. Funky!Stuff!
  30. cat - << \Funky!Stuff! > install.p
  31. #!  /bin/csh -f
  32. # This is for personal installations of sound mail.
  33.  
  34. clear
  35. echo Installing Sound Mail...
  36. mkdir ~/.sm
  37. cc smore.c -o ~/.sm/smore -O
  38. cp mmore ~/.sm/mmore
  39. chmod u+x ~/.sm/mmore
  40. cp Sound ~/.sm/Sound
  41. chmod u+r ~/.sm/Sound
  42. cp ms ~/.sm/ms
  43. chmod u+x ~/.sm/ms
  44.  
  45. echo ""
  46. echo "Cool\!"
  47. echo ""
  48. echo You need to put the following in your .cshrc:
  49. echo ""
  50. echo set path = \(\$path ~/.sm\)
  51. echo setenv SNDPROMPT ~/.sm
  52. echo setenv SNDLIB ~/.sm
  53. echo ""
  54. echo The last setenv may be to whatever directory has SPARC sound files;
  55. echo but note, all sound files must be suffixed with .au.
  56. echo ""
  57. echo You must put the following in your .mailrc:
  58. echo set PAGER="mmore"
  59. echo set crt=1
  60. Funky!Stuff!
  61. cat - << \Funky!Stuff! > mmore
  62. #!  /bin/csh -f
  63.  
  64.  
  65. # This program first attempts to do an arch command.  The output
  66. # is captured to a file called /tmp/$user.arch.  This is done
  67. # using the set command so as not to produce an error in the script
  68. # if the arch command does not exist.
  69.  
  70. set dummy=`arch >& /tmp/$user.arch`
  71.  
  72. # Extract the 1st parameter in the arch file.
  73. set machine=`awk '{print $1}' /tmp/$user.arch`
  74.  
  75. /bin/rm -f /tmp/$user.arch
  76.  
  77. # If it is a sun4 then use my smore else use good old more.
  78. if ($machine == "sun4") then
  79.     smore
  80. else
  81.     more
  82. endif
  83. Funky!Stuff!
  84. cat - << \Funky!Stuff! > ms
  85.  
  86.  
  87. # uuencode a sound file into a file called mailsound
  88. # ready for inclusion in mail scripts with sound in them.
  89.  
  90. echo "@@addsnd" > $2
  91. uuencode $1 sod >> $2
  92.  
  93. Funky!Stuff!
  94. cat - << \Funky!Stuff! > sm.sh
  95. Funky!Stuff!
  96. cat - << \Funky!Stuff! > smore.c
  97. /*
  98.  * Sound More
  99.  * Version 1.0 12/3/90
  100.  *
  101.  * This program reads standard input and depending on whether
  102.  * it is text or sound information, displays or plays them.
  103.  * Read soundmail.doc for more details.
  104.  */
  105. #include <stdio.h>
  106.  
  107. #define BUFFERSIZE 500
  108.  
  109. /* Environment variables indicating the directory containing the
  110.  * sound files; the directory containing the sound prompt and
  111.  * the user's login id.
  112.  */
  113. char *soundLib, *soundPrompt, *user, *getenv();
  114.  
  115. main()
  116. {
  117.  
  118.  
  119.     char command[BUFFERSIZE];
  120.     char fileName[BUFFERSIZE];
  121.     char temp1[BUFFERSIZE], temp2[BUFFERSIZE];
  122.     char str[BUFFERSIZE], ch;
  123.     FILE *so, *in;
  124.  
  125.     /* Get environment variables */
  126.     user = getenv("USER");
  127.     soundLib = getenv("SNDLIB");
  128.     soundPrompt = getenv("SNDPROMPT");
  129.  
  130.     /*
  131.      * Open temp buffer and copy all of one
  132.      * mail message into it.
  133.      */
  134.     sprintf(fileName, "/tmp/%s.mess", user);
  135.     so = fopen(fileName, "w");
  136.     while (!feof(stdin)) {
  137.         if (gets(str) == NULL)
  138.             break;
  139.  
  140.         fprintf(so, "%s\n", str);
  141.     }
  142.     fclose(so);
  143.  
  144.     /*
  145.      * Re-open the temp file as input to be
  146.      * read.
  147.      */
  148.     in = fopen(fileName, "r");
  149.  
  150.     /*
  151.      * Open a temp file called 'so' to
  152.      * extract text information from sound
  153.      * information.
  154.      */
  155. start:    sprintf(fileName, "/tmp/%s.so", user);
  156.     so = fopen(fileName, "w");
  157.     while (!feof(in)) {
  158.  
  159.         /* Get a string. */
  160.         if (fgets(str, BUFFERSIZE, in) == NULL)
  161.             break;
  162.         temp1[0] = '\0';
  163.  
  164.         /*
  165.          * If string length is greater
  166.          * than 1 then check to see if
  167.          * it's a  @@snd command or a
  168.          * @@addsnd command.
  169.          */
  170.         if (strlen(str) > 1) {
  171.             sscanf(str, "%s", temp1);
  172.  
  173.             /*
  174.              * If it is a @@snd
  175.              * command then close
  176.              * output file extract
  177.              * the sound identifier
  178.              * from the input, print
  179.              * the output file and
  180.              * play the sound found
  181.              * in the sound library.
  182.              */
  183.             if (strcmp(temp1, "@@snd") == 0) {
  184.                 fclose(so);
  185.                 sscanf(str, "%s %s", temp1, temp2);
  186.  
  187.                 sprintf(command, "cat /tmp/%s.so | more ", user);
  188.                 system(command);
  189.                 sprintf(command, "more %s/Sound", soundPrompt);
  190.                 system(command);
  191.                 sprintf(command, "play %s/%s.au &", soundLib, temp2);
  192.                 system(command);
  193.                 str[0] = '\0';
  194.                 goto start;
  195.             }
  196.  
  197.             /*
  198.              * If it is a @@addsnd
  199.              * command then what
  200.              * follows is a uuencoded
  201.              * sound file created
  202.              * with 'ms'. If this is
  203.              * the case we must first
  204.              * close off the output
  205.              * file, rename it to
  206.              * something else. Read
  207.              * in all the uuencoded
  208.              * information and write
  209.              * it to a new output
  210.              * file. When this is
  211.              * done, the text output
  212.              * file is displayed and
  213.              * then the sound file is
  214.              * played.
  215.              */
  216.             if (strcmp(str, "@@addsnd\n") == 0) {
  217.                 fclose(so);
  218.  
  219.                 sprintf(command, "mv /tmp/%s.so /tmp/%s.sox", user, user);
  220.                 system(command);
  221.                 so = fopen(fileName, "w");
  222.                 while (!feof(in)) {
  223.                     fgets(str, BUFFERSIZE, in);
  224.                     fprintf(so, "%s", str);
  225.                     if (strcmp(str, "end\n") == 0) {
  226.                         goto out;
  227.                     }
  228.                 }
  229.         out:        fclose(so);
  230.  
  231.                 sprintf(command, "cat /tmp/%s.sox | more ", user);
  232.                 system(command);
  233.                 sprintf(command, "more %s/Sound", soundPrompt);
  234.                 system(command);
  235.                 sprintf(command, "cd /tmp ; uudecode /tmp/%s.so ; play /tmp/sod &", user);
  236.                 system(command);
  237.  
  238.                 goto start;
  239.             }
  240.             else
  241.                 fprintf(so, "%s", str);
  242.         }
  243.     }
  244.     fclose(so);
  245.  
  246.     /*
  247.      * If EOF reached print whatever text has
  248.      * been left accumulating in the text
  249.      * output file.
  250.      */
  251.     sprintf(command, "cat /tmp/%s.so | more", user);
  252.     system(command);
  253.  
  254.     /*
  255.      * Clean up by deleting all the temp
  256.      * files.
  257.      */
  258.     sprintf(command, "rm -f /tmp/%s.mess /tmp/%s.so /tmp/%s.sod /tmp/%s.sox", user, user, user, user);
  259.     system(command);
  260. }
  261. Funky!Stuff!
  262. cat - << \Funky!Stuff! > soundmail.doc
  263.               SOUND MAIL 1.0
  264.                 by
  265.             JASON LEIGH
  266.              jal@cs.wayne.edu
  267.  
  268.  
  269. Welcome to sound mail, my first attempt at incorporating sound into
  270. email!  No longer are we limited to the little character codes such as
  271. :^) to represent our "feelings" about a message, we can now truely
  272. express our emotions by using sound.
  273.  
  274. This first version of sound mail allows the inclusion of sounds from a
  275. library of sound files that are stored on a system or the inclusion of
  276. one's own sound files.  This is particularly easy in light of the fact
  277. that all SPARC's have an audio input port at the back of them.
  278.  
  279. Sound mail is particularly flexible because you are not limited to
  280. using it for mail.  Just about any application that requires the use
  281. of the 'more' command can take advantage of it.  In fact sound mail
  282. makes no changes to your current 'mail' program.  It simply provides a
  283. new version of 'more' that can display text as well as play sounds.
  284. So it is real possibility that you can now write programs that have
  285. sounds included to document the source code. Whether that's of any use
  286. is another issue.  Basically sound mail was designed for absolutely no
  287. purpose what so ever except that it's neat and fun! And who knows, it
  288. may be useful.
  289.  
  290. System Requirements:
  291. -------------------
  292. o Sun SPARC Station
  293. o Installation of the 'play' program by Sun in some accessible directory.
  294. o Installation of some library of SPARC audio files all suffixed with .au
  295. o Installation of uuencode and uudecode in some accesible directory.
  296.   (You should already have this on your system.)
  297.  
  298. The optional parts are for those who would like to incorporate their
  299. own personalized sounds in their mail messages.
  300.  
  301. o (optional) SPARC connector for microphone.
  302. o (optional) Installation of the 'record' program or soundtool by Sun.
  303.  
  304. Installation:
  305. ------------
  306. For a personalized copy of sound mail run the program: install.p
  307. It will give you more details.
  308.  
  309. To Write a Sound Mail Message:
  310. -----------------------------
  311. Send mail to yourself as a test first.  Basically there are no
  312. special instructions for this, just type the usual: mail <login id>.
  313. Then the subject line and the message.  Now if you wish to include
  314. a sound at a particular point in your message and the sound you want
  315. included is part of a sound library that you know the receiver has
  316. access to, type on a new line:
  317.  
  318. @@snd <sound name>
  319.  
  320. followed by a RETURN.  <sound name> is the name of the sound file
  321. without the .au suffix.  That's it.  Whenever you wish to include a
  322. sound just start a new line and type the above command.
  323.  
  324. Now to include your own sounds as part of the message, first run the
  325. 'ms' program on all the audio files you intend to send. For example
  326. if you wanted to send the audio files foo bar baz, type:
  327. ms foo foo.snd
  328. ms bar bar.snd
  329. ms baz baz.snd
  330.  
  331. With that done whenever you want to include a particular sound file
  332. into the document, simply use 'mail's ~r command to read in the .snd
  333. file.  For example:
  334.  
  335. ~r foo.snd
  336.  
  337.  
  338. Problems:
  339. --------
  340. Mail messages have a limited size so it isn't a good idea to
  341. include too many of your own personalized sound messages as it
  342. does take up a lot of memory for a few second of sound.
  343.  
  344. Now I realize that often times you will log in on some other machine
  345. that is not a SPARC or log in from home etc.. in which case 1. you
  346. won't be able to hear the sounds and 2. (if it is on some other
  347. machine that is not a SPARC) you'd expect my program to crash because
  348. you compiled it originally on a SPARC.  NEVER FEAR! There is an
  349. interfacing shell script that checks to make sure you are on a SPARC
  350. before it attempts to run the binaries for the sound mail.  So you can
  351. safely read your messages on a VAX as well as a SPARC; except you
  352. won't hear anything.
  353.  
  354. It won't work on Sun's 'mailtool' (obviously because it doesn't use more).
  355.  
  356. Final Notes:
  357. -----------
  358. Well that's about it. At this point I suppose I should disclaim all
  359. responsibility for possible damages that may result through the use,
  360. misuse or abuse of this program.  And if you like this program tell a
  361. friend and lets get some interesting email going.  If you'd like to
  362. make some cool improvements please feel free, just give me some credit
  363. for my part and let me know what you did.
  364.  
  365. If you have any questions, you can send me sound mail at:
  366. jal@cs.wayne.edu
  367.  
  368. I have access to all the demo sound files that came with the SPARC.
  369.  
  370. Have fun!
  371. Funky!Stuff!
  372. --
  373. :^) :^) :^) :^) :^) :^) :^) :^) ;^)   O^: (^: (^: (^: (^: (^: (^: (^:
  374. :^)  Where the telescope ends, the microscope begins.          (^:
  375. :v)  Which of the two has the grander view?    - Victor Hugo     (v:
  376. :v) :v) :v) :v) :v) :v) :v) :v) :v(   $v: (v: (v: (v: (v: (v: (v: (v:
  377.  
  378. exit 0 # Just in case...
  379. -- 
  380. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  381. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  382. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  383. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  384.