{"id":862,"date":"2026-01-21T12:50:17","date_gmt":"2026-01-21T17:50:17","guid":{"rendered":"https:\/\/www.we8chz.org\/?p=862"},"modified":"2026-03-06T17:02:29","modified_gmt":"2026-03-06T22:02:29","slug":"how-to-create-stunning-allstarlink-custom-voice-announcements-right-now","status":"publish","type":"post","link":"https:\/\/www.we8chz.org\/?p=862","title":{"rendered":"How To  Create Stunning AllStarLink Custom Voice Announcements Right Now"},"content":{"rendered":"\n<p>You&#8217;ve just gotten your new AllStarLink 3 node up and running, either on your high-power simplex repeater, or on a long-range full duplex repeater setup. Awesome! But the thrill is gone once you realize it can only use CW to identify itself. No announcements, no voices, no time&#8230;&#8230; nothing. Let&#8217;s go over a few ways to spice up the ID and custom announcements so your users can have more information. It will attract attention.<\/p>\n\n\n\n<div class=\"wp-block-stackable-heading stk-block-heading stk-block-heading--v2 stk-block stk-16c449e\" id=\"create-a-custom-voice-recording\" data-block-id=\"16c449e\"><h2 class=\"stk-block-heading__text\">Create A Custom Voice Recording<\/h2><\/div>\n\n\n\n<div class=\"wp-block-stackable-heading stk-block-heading stk-block-heading--v2 stk-block stk-257e941\" id=\"requirements\" data-block-id=\"257e941\"><h3 class=\"stk-block-heading__text\">Requirements<\/h3><\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/audacity\/audacity\/releases\/\">Audacity 3.77 or later<\/a><\/li>\n\n\n\n<li>Any text-to-speech engine (<a href=\"https:\/\/elevenlabs.io\/app\/speech-synthesis\/text-to-speech\" target=\"_blank\" rel=\"noreferrer noopener\">like ElevenLabs AI-based<\/a>)<\/li>\n\n\n\n<li>Google Drive, MobaXTerm, or any place on the web accessible from your node to put files to download<\/li>\n\n\n\n<li>Completely configured ASL3 Node<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-stackable-heading stk-block-heading stk-block-heading--v2 stk-block stk-59d4450\" id=\"generate-the-audio-file\" data-block-id=\"59d4450\"><h3 class=\"stk-block-heading__text\">Generate the Audio File<\/h3><\/div>\n\n\n\n<p>Using an AI text-to-speech model is beyond the scope of this article.  ElevenLabs is wonderful, and mostly free except for edge use cases and high volume.  More traditional text-to-speech engines will also get you there.  You could also record your group or club&#8217;s live audio, which is a great way to provide extra personalization.  Either way, you should have some kind of standard audio format like an MP3, AAC, or FLAC file.<\/p>\n\n\n\n<p>Let&#8217;s convert this into the correct format for AllStar:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1755\" height=\"1065\" src=\"https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image.png\" alt=\"\" class=\"wp-image-863\" srcset=\"https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image.png 1755w, https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-300x182.png 300w, https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-1024x621.png 1024w, https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-768x466.png 768w, https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-1536x932.png 1536w\" sizes=\"auto, (max-width: 1755px) 100vw, 1755px\" \/><\/figure>\n\n\n\n<p>First, select the whole recording by pressing CTRL + A on the keyboard.<\/p>\n\n\n\n<p>Select the &#8220;Effect&#8221; menu, then &#8220;Volume and Compression&#8221;.  Select &#8220;Normalize&#8221;:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1748\" height=\"1062\" src=\"https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-1.png\" alt=\"\" class=\"wp-image-864\" srcset=\"https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-1.png 1748w, https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-1-300x182.png 300w, https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-1-1024x622.png 1024w, https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-1-768x467.png 768w, https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-1-1536x933.png 1536w\" sizes=\"auto, (max-width: 1748px) 100vw, 1748px\" \/><\/figure>\n\n\n\n<p>Ensure that &#8220;Remove DC offset&#8221; and &#8220;Normalize peak amplitude to&#8221; are checked, and input a value of &#8220;-6.0&#8221; dB.  Apply.<\/p>\n\n\n\n<p>Hit &#8220;File&#8221;, then &#8220;Export Audio&#8230;&#8221;:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1755\" height=\"1067\" src=\"https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-2.png\" alt=\"\" class=\"wp-image-865\" srcset=\"https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-2.png 1755w, https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-2-300x182.png 300w, https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-2-1024x623.png 1024w, https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-2-768x467.png 768w, https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-2-1536x934.png 1536w\" sizes=\"auto, (max-width: 1755px) 100vw, 1755px\" \/><\/figure>\n\n\n\n<p>Export to computer is the correct option here.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1757\" height=\"1065\" src=\"https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-3.png\" alt=\"\" class=\"wp-image-866\" srcset=\"https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-3.png 1757w, https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-3-300x182.png 300w, https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-3-1024x621.png 1024w, https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-3-768x466.png 768w, https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-3-1536x931.png 1536w\" sizes=\"auto, (max-width: 1757px) 100vw, 1757px\" \/><\/figure>\n\n\n\n<p>The options here need to be very specific.  <\/p>\n\n\n\n<p>Edit the File Name to be something short, simple, and change the suffix to be &#8220;.ulaw&#8221;.<\/p>\n\n\n\n<p>Select &#8220;Other uncompressed files&#8221; under Format.<\/p>\n\n\n\n<p>Channels &#8220;Mono&#8221;, Sample Rate &#8220;8000 Hz&#8221;, Header &#8220;RAW (header-less)&#8221;, Encoding &#8220;U-Law&#8221;.<\/p>\n\n\n\n<p>Be sure to export the Entire Project, and check &#8220;Trim blank space before first clip&#8221;.<\/p>\n\n\n\n<p>Hit &#8220;Export&#8221;.<\/p>\n\n\n\n<div class=\"wp-block-stackable-heading stk-block-heading stk-block-heading--v2 stk-block stk-6fd4233\" id=\"how-to-upload-to-all-star-link-server\" data-block-id=\"6fd4233\"><h3 class=\"stk-block-heading__text\">How To Upload To AllStarLink Server<\/h3><\/div>\n\n\n\n<p>Here&#8217;s the tricky part.  Most AllStar nodes are just a command line.  How do we get this file onto the server?<\/p>\n\n\n\n<p>Let&#8217;s utilize Google Drive.  Right-click the uploaded file, select &#8220;Share&#8221;, then &#8220;Share&#8221; again.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1509\" height=\"824\" src=\"https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-4.png\" alt=\"\" class=\"wp-image-867\" srcset=\"https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-4.png 1509w, https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-4-300x164.png 300w, https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-4-1024x559.png 1024w, https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-4-768x419.png 768w\" sizes=\"auto, (max-width: 1509px) 100vw, 1509px\" \/><\/figure>\n\n\n\n<p>Change the General Access to &#8220;Anyone with the link&#8221;.  Copy the link.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"795\" height=\"588\" src=\"https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-5.png\" alt=\"\" class=\"wp-image-868\" srcset=\"https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-5.png 795w, https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-5-300x222.png 300w, https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-5-768x568.png 768w\" sizes=\"auto, (max-width: 795px) 100vw, 795px\" \/><\/figure>\n\n\n\n<p>Paste the link into Notepad or Notepad++ or the like.  You&#8217;ll notice a format like the following:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>https:\/\/drive.google.com\/file\/d\/**THIS IS THE FILE ID**\/view?usp=sharing<\/code><\/pre>\n\n\n\n<p>The section above that says **THIS IS THE FILE ID** will be a bunch of random characters and numbers.  Let&#8217;s take this into the ASL node command line and download the file.  First, let&#8217;s make sure you have a directory to store the new audio:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># sudo mkdir \/var\/lib\/asterisk\/sounds\/myid\n# cd \/var\/lib\/asterisk\/sounds\/myid<\/code><\/pre>\n\n\n\n<p>And now let&#8217;s download from Google Drive:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># sudo wget https:\/\/drive.google.com\/uc?id=**THIS IS THE FILE ID**<\/code><\/pre>\n\n\n\n<p>This will download a completely garbled filename.  Let&#8217;s take a look by issuing an &#8220;ls&#8221; command:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"39\" src=\"https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-6-1024x39.png\" alt=\"\" class=\"wp-image-869\" srcset=\"https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-6-1024x39.png 1024w, https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-6-300x11.png 300w, https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-6-768x29.png 768w, https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-6-1536x59.png 1536w, https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-6.png 1569w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Change the name back to what it should be:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># sudo mv 'uc?id=WHATEVER THE REST OF IT IS' announcement.ulaw<\/code><\/pre>\n\n\n\n<p>And change the permissions so that ASL can see and use it:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># sudo chown asterisk:asterisk announcement.ulaw<\/code><\/pre>\n\n\n\n<p>Awesome.  Now the file is safe and sound on the node.  Let&#8217;s use it.<\/p>\n\n\n\n<div class=\"wp-block-stackable-heading stk-block-heading stk-block-heading--v2 stk-block stk-7f09e61\" id=\"alternative-using-moba-x-term-to-upload-audio-files\" data-block-id=\"7f09e61\"><h4 class=\"stk-block-heading__text\">Alternative: Using MobaXTerm To Upload Audio Files<\/h4><\/div>\n\n\n\n<p>Courtesy of Levi N8GMZ, you can also use MobaXTerm to connect with your ASL installation to both run commands and upload\/download files!  This requires some working knowledge of properly configuring SSH and connecting with a client, but with that out of the way it should be smooth:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"559\" src=\"https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-7-1024x559.png\" alt=\"\" class=\"wp-image-875\" srcset=\"https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-7-1024x559.png 1024w, https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-7-300x164.png 300w, https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-7-768x419.png 768w, https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-7-1536x839.png 1536w, https:\/\/www.we8chz.org\/wp-content\/uploads\/2026\/01\/image-7.png 1699w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><a href=\"https:\/\/mobaxterm.mobatek.net\/download-home-edition.html\" target=\"_blank\" rel=\"noreferrer noopener\">See the MobaXTerm website for downloads and additional details.<\/a><\/p>\n\n\n\n<div class=\"wp-block-stackable-heading stk-block-heading stk-block-heading--v2 stk-block stk-cfd1824\" id=\"enable-your-new-voice-id\" data-block-id=\"cfd1824\"><h3 class=\"stk-block-heading__text\">Enable Your New Voice ID<\/h3><\/div>\n\n\n\n<p>Assuming your node is already otherwise configured, there should be a definition for your node in rpt.conf:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># sudo asl-menu<\/code><\/pre>\n\n\n\n<p>Go to the Expert Configuration Menu, then Edit rpt.conf file&#8230;<\/p>\n\n\n\n<p>In the new style rpt.conf for ASL3, your node definition should be all the way at the bottom.  Add the following line:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>idrecording = \/var\/lib\/asterisk\/sounds\/myid\/**YOUR FILE HERE WITHOUT SUFFIX** ; Winter Field Day ID<\/code><\/pre>\n\n\n\n<p><strong>&#8220;idrecording&#8221;<\/strong> specifies a voice recording to identify with.<br><strong>&#8220;**YOUR FILE HERE WITHOUT SUFFIX**&#8221;<\/strong> needs to be replaced with your file name.  <strong>OMIT THE SUFFIX<\/strong>.  If your file was named &#8220;w8msu.ulaw&#8221;, you should only enter &#8220;w8msu&#8221;.<br><strong>The semi-colon specifies a comment.<\/strong>  Anything after this point in the line is ignored by ASL and only serves to jog your memory of what the line does.<\/p>\n\n\n\n<p>Save the file with &#8220;CTRL + O&#8221; and exit with &#8220;CTRL + X&#8221;.<\/p>\n\n\n\n<p>Reboot the node to hear your results!<\/p>\n\n\n\n<div class=\"wp-block-stackable-heading stk-block-heading stk-block-heading--v2 stk-block stk-8e03284\" id=\"periodic-time-based-announcements\" data-block-id=\"8e03284\"><h2 class=\"stk-block-heading__text\">Periodic Time-Based Announcements<\/h2><\/div>\n\n\n\n<p>Your announcement might be better suited to be based on a schedule, like a field day announcement, or the next club meeting. If your announcement doesn&#8217;t identify the repeater, it&#8217;s probably better off being time-based. We&#8217;ll use define the playback function, make it a macro, then schedule it.<\/p>\n\n\n\n<p>First, let&#8217;s define playing the audio file as a new function.  In rpt.conf, you&#8217;ll see the following:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;functions-main](!)\n;;;;;;;;;;;;;;;;;;; functions stanza ;;;;;;;;;;;;;;;;;;;\n; Prefix    Functions\n; *1        Disconnect Link\n; *2        Monitor Link\n; *3        Connect Link\n; *4        Command Mode\n; *5        Macros\n; *6        User Functions\n; *7        Connection Status\/Functions\n; *8        User Functions\n; *9        User Functions\n; *0        User Functions\n; *A        User Functions\n; *B        User Functions\n; *C        User Functions\n; *D        User Functions<\/code><\/pre>\n\n\n\n<div class=\"wp-block-stackable-text stk-block-text stk-block stk-d29ba47\" data-block-id=\"d29ba47\"><p class=\"stk-block-text__text\">We&#8217;ll plop our new function right under there.  Notice it defines 8 &#8211; D as user functions.  Let&#8217;s define a new function under 0:<\/p><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>01 = playback,\/var\/lib\/asterisk\/sounds\/myid\/**YOUR FILE HERE** ; Comment here about what this does<\/code><\/pre>\n\n\n\n<div class=\"wp-block-stackable-text stk-block-text stk-block stk-90e3973\" data-block-id=\"90e3973\"><p class=\"stk-block-text__text\"><strong>&#8220;01&#8221;<\/strong> is the number of the function.  This means you can call it from DTMF tones, or you can use it in macros.<br><strong>&#8220;playback&#8221;<\/strong> specifies that the file will play over all channels for which telemetry is enabled. This can also be &#8220;localplay&#8221; to only play on the direct wired connection to the repeater.<br><strong>**YOUR FILE HERE**<\/strong> is your audio file you&#8217;d like played.  No file extension, earlier in the how to.<\/p><\/div>\n\n\n\n<p>Further down, let&#8217;s find the [macro] section:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>;;;;;  Macro commands ;;;;;\n;1 = *712\n;2 = *822000\n;3 = *832000\n;4 = *31998*32000<\/code><\/pre>\n\n\n\n<p>Remove the semi-colon from macro 1 and edit to read like:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>1 = *01 ; Comment here about what this does (play an audio file)<\/code><\/pre>\n\n\n\n<p>Now let&#8217;s schedule it under the [schedule] section.  You&#8217;ll see this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>;;;;; Scheduler - execute a macro at a given time ;;;;;\n;dtmf_function =  m h dom mon dow   ; ala cron, star is implied\n;2 = 00 00 * * *                    ; at midnight, execute macro 2.\n1 = 30 * * * *                      ; comment here about what this does (play audio file once an hour at the 30 min mark)<\/code><\/pre>\n\n\n\n<p>Here, I edited the scheduler to execute macro 1, and I formatted it to play the announcement every hour. The schedule only appears to be in &#8220;cron&#8221; format, for us Linux geeks.  It&#8217;s similar, but it&#8217;s own format which is notated as follows:<\/p>\n\n\n\n<p><strong>(MM) (HH) (DayOfMonth) (MonthOfYear) (DayOfWeek)<\/strong><\/p>\n\n\n\n<p>And each field is a little different too:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>There&nbsp;<strong>must<\/strong>&nbsp;be 5 time\/day entries,&nbsp;<code>*<\/code>&nbsp;included<\/li>\n\n\n\n<li>The five time fields&nbsp;<strong>must<\/strong>&nbsp;each be separated by a single space<\/li>\n\n\n\n<li>(m) Minutes after the hour are&nbsp;<code>0-59<\/code><\/li>\n\n\n\n<li>(h) Hours since midnight are&nbsp;<code>0-23<\/code><\/li>\n\n\n\n<li>(dom) Day of month are&nbsp;<code>1-31<\/code><\/li>\n\n\n\n<li>(mon) Month of year is&nbsp;<code>1-12<\/code><\/li>\n\n\n\n<li>(dow) Day of week (days since Sunday) is&nbsp;<code>0-6<\/code>&nbsp;(Sunday starts as&nbsp;<code>0<\/code>, ending with Saturday as&nbsp;<code>6<\/code>)<\/li>\n\n\n\n<li>Any item that is all inclusive or &#8220;doesn&#8217;t matter\/every&#8221; can be set with a star&nbsp;<code>*<\/code>&nbsp;as a wildcard<\/li>\n<\/ul>\n\n\n\n<p>For example, if I want a macro to play at 17:45 on a tuesday, I would put:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>1 = 45 17 * * 2<\/code><\/pre>\n\n\n\n<div class=\"wp-block-stackable-text stk-block-text stk-block stk-af524d5\" data-block-id=\"af524d5\"><p class=\"stk-block-text__text\">which reads: Execute macro number 1 at 17:45, every Tuesday.  Don&#8217;t set a day of the month, or a particular month.<\/p><\/div>\n\n\n\n<p><strong>IMPORTANT:<\/strong>  It seems like you should be able to skip right to defining the audio file in the macro itself.  You cannot, I tried.  It must be first defined as a function, then as a macro, then scheduled, or it doesn&#8217;t work at all.<\/p>\n\n\n\n<p>Save rpt.conf and restart Asterisk.<\/p>\n\n\n\n<div class=\"wp-block-stackable-heading stk-block-heading stk-block-heading--v2 stk-block stk-5b68343\" id=\"test-your-macro\" data-block-id=\"5b68343\"><h4 class=\"stk-block-heading__text\">Test Your Macro<\/h4><\/div>\n\n\n\n<p>To be sure your audio file plays when you asked it to, let&#8217;s run a test.  Edit rpt.conf to the following:<\/p>\n\n\n\n<p>Change your desired time on the schedule to 10 minutes from your current time.  In my case I&#8217;m changing the schedule from:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>1 = 30 * * * *                      ; comment here about what this does (play audio file once an hour at the 30 min mark)<\/code><\/pre>\n\n\n\n<div class=\"wp-block-stackable-text stk-block-text stk-block stk-aab74f0\" data-block-id=\"aab74f0\"><p class=\"stk-block-text__text\">to this:<\/p><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>1 = 25 09 22 01 *                   ; test today only at 9:25<\/code><\/pre>\n\n\n\n<div class=\"wp-block-stackable-text stk-block-text stk-block stk-9300d1a\" data-block-id=\"9300d1a\"><p class=\"stk-block-text__text\">Save and restart Asterisk.<\/p><\/div>\n\n\n\n<p>When the repeater comes back up, send DTMF tones from your radio to trigger the macro.  All commands begin with a *, and all macros begin with a &#8220;5&#8221;.  So to trigger our macro #1, we send &#8220;*51&#8221;.  If we set it up correctly, your audio should play immediately.  This means both the function and the macro are working.  If it doesn&#8217;t work, you can test just the function by sending &#8220;*01&#8221; and troubleshoot your way back from there.<\/p>\n\n\n\n<p>Last, we can wait for our schedule to trigger.  If you hear it, you&#8217;re all set!  Remember to set your schedule back!<\/p>\n\n\n\n<div class=\"wp-block-stackable-heading stk-block-heading stk-block-heading--v2 stk-block stk-7c44d13\" id=\"alternative-tail-messages\" data-block-id=\"7c44d13\"><h2 class=\"stk-block-heading__text\">Alternative: Tail Messages<\/h2><\/div>\n\n\n\n<p>Tail messages are audio files that are periodically played at the end of a user transmission.  Unlike using the scheduler, these are only played with users activating the repeater or node, so they&#8217;re sure to hear them and they shouldn&#8217;t interrupt any active transmissions.<\/p>\n\n\n\n<p>To define tail messages, add the following line to your node definition at the bottom of rpt.conf:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tailmessagelist = \/var\/lib\/asterisk\/sounds\/myid\/audiofile1,\/var\/lib\/asterisk\/sounds\/myid\/audiofile2<\/code><\/pre>\n\n\n\n<div class=\"wp-block-stackable-text stk-block-text stk-block stk-ed1f565\" data-block-id=\"ed1f565\"><p class=\"stk-block-text__text\">This indicates to enable tail messages, and to rotate them in the order you just specified.  Add the following line to control how often they play:<\/p><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>tailmessagetime = 900000            ; 15 minutes between tail messages (time in ms)<\/code><\/pre>\n\n\n\n<div class=\"wp-block-stackable-text stk-block-text stk-block stk-d49f935\" data-block-id=\"d49f935\"><p class=\"stk-block-text__text\">And add this line to define how soon to try playing the message again if a user keys up over it and &#8220;squashes&#8221; it:<\/p><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>tailsquashedtime = 300000           ; 5 minutes (time in ms)<\/code><\/pre>\n\n\n\n<div class=\"wp-block-stackable-heading stk-block-heading stk-block-heading--v2 stk-block stk-7645612\" id=\"references\" data-block-id=\"7645612\"><h2 class=\"stk-block-heading__text\">References<\/h2><\/div>\n\n\n\n<p><a href=\"https:\/\/wiki.allstarlink.org\/images\/d\/dd\/RecordingSoundFiles.pdf\">https:\/\/wiki.allstarlink.org\/images\/d\/dd\/RecordingSoundFiles.pdf<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/wiki.allstarlink.org\/wiki\/Rpt.conf\">https:\/\/wiki.allstarlink.org\/wiki\/Rpt.conf<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/community.allstarlink.org\/t\/how-do-i-play-a-sound-file-in-asl-3\/22424\/5\">https:\/\/community.allstarlink.org\/t\/how-do-i-play-a-sound-file-in-asl-3\/22424\/5<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/mobaxterm.mobatek.net\/download-home-edition.html\">https:\/\/mobaxterm.mobatek.net\/download-home-edition.html<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/allstarlink.github.io\/adv-topics\/scheduler\/#setting-up-the-system-scheduler\">https:\/\/allstarlink.github.io\/adv-topics\/scheduler\/#setting-up-the-system-scheduler<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/allstarlink.github.io\/adv-topics\/tailmessage\/#tailmessagetime\">https:\/\/allstarlink.github.io\/adv-topics\/tailmessage\/#tailmessagetime<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>You&#8217;ve just gotten your new AllStarLink 3 node up and running, either on your high-power simplex repeater, or on a long-range full duplex repeater setup. Awesome! But the thrill is gone once you realize it can only use CW to identify itself. No announcements, no voices, no time&#8230;&#8230; nothing. Let&#8217;s go over a few ways [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":640,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[6],"tags":[],"class_list":["post-862","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technical-articles"],"blocksy_meta":[],"rttpg_featured_image_url":{"full":["https:\/\/www.we8chz.org\/wp-content\/uploads\/2025\/03\/allstarlinklogo.png",500,232,false],"landscape":["https:\/\/www.we8chz.org\/wp-content\/uploads\/2025\/03\/allstarlinklogo.png",500,232,false],"portraits":["https:\/\/www.we8chz.org\/wp-content\/uploads\/2025\/03\/allstarlinklogo.png",500,232,false],"thumbnail":["https:\/\/www.we8chz.org\/wp-content\/uploads\/2025\/03\/allstarlinklogo-150x150.png",150,150,true],"medium":["https:\/\/www.we8chz.org\/wp-content\/uploads\/2025\/03\/allstarlinklogo-300x139.png",300,139,true],"large":["https:\/\/www.we8chz.org\/wp-content\/uploads\/2025\/03\/allstarlinklogo.png",500,232,false],"1536x1536":["https:\/\/www.we8chz.org\/wp-content\/uploads\/2025\/03\/allstarlinklogo.png",500,232,false],"2048x2048":["https:\/\/www.we8chz.org\/wp-content\/uploads\/2025\/03\/allstarlinklogo.png",500,232,false]},"rttpg_author":{"display_name":"Jay NT0Y","author_link":"https:\/\/www.we8chz.org\/?author=4"},"rttpg_comment":0,"rttpg_category":"<a href=\"https:\/\/www.we8chz.org\/?cat=6\" rel=\"category\">Technical Articles<\/a>","rttpg_excerpt":"You&#8217;ve just gotten your new AllStarLink 3 node up and running, either on your high-power simplex repeater, or on a long-range full duplex repeater setup. Awesome! But the thrill is gone once you realize it can only use CW to identify itself. No announcements, no voices, no time&#8230;&#8230; nothing. Let&#8217;s go over a few ways&hellip;","_links":{"self":[{"href":"https:\/\/www.we8chz.org\/index.php?rest_route=\/wp\/v2\/posts\/862","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.we8chz.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.we8chz.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.we8chz.org\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.we8chz.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=862"}],"version-history":[{"count":12,"href":"https:\/\/www.we8chz.org\/index.php?rest_route=\/wp\/v2\/posts\/862\/revisions"}],"predecessor-version":[{"id":889,"href":"https:\/\/www.we8chz.org\/index.php?rest_route=\/wp\/v2\/posts\/862\/revisions\/889"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.we8chz.org\/index.php?rest_route=\/wp\/v2\/media\/640"}],"wp:attachment":[{"href":"https:\/\/www.we8chz.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=862"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.we8chz.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=862"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.we8chz.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=862"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}