From 195377284d5eec3624724a8e6faad4b4fd6e4fee Mon Sep 17 00:00:00 2001 From: Mason10198 <31994327+Mason10198@users.noreply.github.com> Date: Tue, 25 Jul 2023 18:24:07 -0500 Subject: [PATCH 1/8] TimeType error catching --- SkywarnPlus.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/SkywarnPlus.py b/SkywarnPlus.py index c635b85..b2ca2b8 100644 --- a/SkywarnPlus.py +++ b/SkywarnPlus.py @@ -375,10 +375,16 @@ def get_alerts(countyCodes): LOGGER.debug("getAlerts: Using effective time for alerting") time_type_start = "effective" time_type_end = "expires" - else: + elif timetype_mode == "onset": LOGGER.debug("getAlerts: Using onset time for alerting") time_type_start = "onset" time_type_end = "ends" + else: + LOGGER.error( + "getAlerts: Invalid TimeType specified in config.yaml. Using onset time instead." + ) + time_type_start = "onset" + time_type_end = "ends" for countyCode in countyCodes: url = "https://api.weather.gov/alerts/active?zone={}".format(countyCode) From 56b51019ef28d2e7e25576e2f5ca633084108c82 Mon Sep 17 00:00:00 2001 From: Mason10198 <31994327+Mason10198@users.noreply.github.com> Date: Tue, 25 Jul 2023 18:30:30 -0500 Subject: [PATCH 2/8] Add more get_alerts comments --- SkywarnPlus.py | 91 ++++++++++++++++++++++---------------------------- 1 file changed, 40 insertions(+), 51 deletions(-) diff --git a/SkywarnPlus.py b/SkywarnPlus.py index b2ca2b8..ef8a6e3 100644 --- a/SkywarnPlus.py +++ b/SkywarnPlus.py @@ -330,9 +330,11 @@ def save_state(state): def get_alerts(countyCodes): """ - Retrieve severe weather alerts for specified county codes. + This function retrieves severe weather alerts for specified county codes. """ - # Mapping for severity for API response and the 'words' severity + + # Mapping dictionaries are defined for converting the severity level from the + # API's terminology to a numeric scale and from common alert language to the same numeric scale. severity_mapping_api = { "Extreme": 4, "Severe": 3, @@ -342,12 +344,17 @@ def get_alerts(countyCodes): } severity_mapping_words = {"Warning": 4, "Watch": 3, "Advisory": 2, "Statement": 1} + # 'alerts' will store the alert data we retrieve. + # 'seen_alerts' is used to keep track of the alerts we've already processed. alerts = OrderedDict() - seen_alerts = set() # Store seen alerts + seen_alerts = set() + + # We retrieve the current time and log it for debugging purposes. current_time = datetime.now(timezone.utc) LOGGER.debug("getAlerts: Current time: %s", current_time) - # Check if injection is enabled + # The script allows for alert injection for testing purposes. + # If injection is enabled in the configuration, we process these injected alerts first. if config.get("DEV", {}).get("INJECT", False): LOGGER.debug("getAlerts: DEV Alert Injection Enabled") injected_alerts = config["DEV"].get("INJECTALERTS", []) @@ -365,11 +372,14 @@ def get_alerts(countyCodes): end_time_utc.strftime("%Y-%m-%dT%H:%M:%S.%fZ"), ) + # We limit the number of alerts to the maximum defined constant. alerts = OrderedDict(list(alerts.items())[:MAX_ALERTS]) + # If injected alerts are used, we return them here and don't proceed with the function. return alerts - # Determine whether to use 'effective' or 'onset' time + # Configuration specifies whether to use 'effective' or 'onset' time for alerts. + # Depending on the configuration, we set the appropriate keys for start and end time. timetype_mode = config.get("Alerting", {}).get("TimeType", "onset") if timetype_mode == "effective": LOGGER.debug("getAlerts: Using effective time for alerting") @@ -386,20 +396,21 @@ def get_alerts(countyCodes): time_type_start = "onset" time_type_end = "ends" + # Loop over each county code and retrieve alerts from the API. for countyCode in countyCodes: url = "https://api.weather.gov/alerts/active?zone={}".format(countyCode) try: + # If we can get a successful response from the API, we process the alerts from the response. response = requests.get(url) - response.raise_for_status() # will raise an exception if the status code is not 200 - + response.raise_for_status() LOGGER.debug( "getAlerts: Checking for alerts in %s at URL: %s", countyCode, url ) alert_data = response.json() for feature in alert_data["features"]: + # Extract start and end times. If end time is missing, use 'expires' time. start = feature["properties"].get(time_type_start) end = feature["properties"].get(time_type_end) - # if end is null, use effective time if not end: end = feature["properties"].get("expires") LOGGER.debug( @@ -409,20 +420,26 @@ def get_alerts(countyCodes): end, ) if start and end: + # If both start and end times are available, convert them to datetime objects. start_time = parser.isoparse(start) end_time = parser.isoparse(end) - # Convert alert times to UTC + + # Convert alert times to UTC. start_time_utc = start_time.astimezone(timezone.utc) end_time_utc = end_time.astimezone(timezone.utc) event = feature["properties"]["event"] + + # If the current time is within the alert's active period, we process it further. if start_time_utc <= current_time < end_time_utc: description = feature["properties"].get("description", "") severity = feature["properties"].get("severity", None) - # Check if alert has already been seen + + # If the alert has already been processed, we skip it. if event in seen_alerts: continue - # Initialize a flag to check if the event is globally blocked + # We check if the event is in a list of globally blocked events. + # If it is, we skip it. is_blocked = False for global_blocked_event in GLOBAL_BLOCKED_EVENTS: if fnmatch.fnmatch(event, global_blocked_event): @@ -432,22 +449,25 @@ def get_alerts(countyCodes): ) is_blocked = True break - - # Skip to the next feature if the event is globally blocked if is_blocked: continue + # Determine severity from event name or API's severity value. if severity is None: last_word = event.split()[-1] severity = severity_mapping_words.get(last_word, 0) else: severity = severity_mapping_api.get(severity, 0) + + # Add the alert to the 'alerts' dictionary and add the event name to 'seen_alerts'. alerts[(event)] = ( severity, description, end_time_utc.strftime("%Y-%m-%dT%H:%M:%S.%fZ"), ) seen_alerts.add(event) + + # If the current time is not within the alert's active period, we skip it. else: time_difference = time_until(start_time_utc, current_time) LOGGER.debug( @@ -462,52 +482,21 @@ def get_alerts(countyCodes): end_time_utc, ) + # If we cannot get a successful response from the API, we load stored alert data instead. except requests.exceptions.RequestException as e: LOGGER.error("Failed to retrieve alerts for %s. Reason: %s", countyCode, e) LOGGER.info("API unreachable. Using stored data instead.") - - # Load alerts from data.json if os.path.isfile(DATA_FILE): with open(DATA_FILE) as f: data = json.load(f) - stored_alerts = data.get("last_alerts", []) + alerts = data.get("alerts", {}) - # Filter alerts by end_time_utc - current_time_str = datetime.now(timezone.utc).strftime( - "%Y-%m-%dT%H:%M:%S.%fZ" - ) - LOGGER.debug("Current time: %s", current_time_str) - alerts = {} - for event, alert in stored_alerts: - end_time_str = alert[2] - if parser.parse(end_time_str) >= parser.parse(current_time_str): - LOGGER.debug( - "getAlerts: Keeping %s because it does not expire until %s", - event, - end_time_str, - ) - alerts[event] = alert - else: - LOGGER.debug( - "getAlerts: Removing %s because it expired at %s", - event, - end_time_str, - ) - else: - LOGGER.error("No stored data available.") - - alerts = OrderedDict( - sorted( - alerts.items(), - key=lambda item: ( - item[1][0], # Severity - severity_mapping_words.get(item[0].split()[-1], 0), # Words severity - ), - reverse=True, - ) - ) + # If the number of alerts exceeds the maximum defined constant, we truncate the alerts. + alerts = OrderedDict(list(alerts.items())[:MAX_ALERTS]) - alerts = OrderedDict(list(alerts.items())[:MAX_ALERTS]) + # We store the alerts in a file for future use if the API is unreachable. + with open(DATA_FILE, 'w') as f: + json.dump({"alerts": dict(alerts)}, f) return alerts From 1f8ced0499438daf0c783921660096f72b623332 Mon Sep 17 00:00:00 2001 From: Mason10198 <31994327+Mason10198@users.noreply.github.com> Date: Tue, 25 Jul 2023 18:31:26 -0500 Subject: [PATCH 3/8] Visual formatting --- SkywarnPlus.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SkywarnPlus.py b/SkywarnPlus.py index ef8a6e3..77943d3 100644 --- a/SkywarnPlus.py +++ b/SkywarnPlus.py @@ -333,7 +333,7 @@ def get_alerts(countyCodes): This function retrieves severe weather alerts for specified county codes. """ - # Mapping dictionaries are defined for converting the severity level from the + # Mapping dictionaries are defined for converting the severity level from the # API's terminology to a numeric scale and from common alert language to the same numeric scale. severity_mapping_api = { "Extreme": 4, @@ -495,7 +495,7 @@ def get_alerts(countyCodes): alerts = OrderedDict(list(alerts.items())[:MAX_ALERTS]) # We store the alerts in a file for future use if the API is unreachable. - with open(DATA_FILE, 'w') as f: + with open(DATA_FILE, "w") as f: json.dump({"alerts": dict(alerts)}, f) return alerts From 5eb6bd68b7f28ed65c2abd9db507cc8bbef9fe08 Mon Sep 17 00:00:00 2001 From: Mason10198 <31994327+Mason10198@users.noreply.github.com> Date: Thu, 27 Jul 2023 00:41:21 -0500 Subject: [PATCH 4/8] Init v0.4.0 --- README.md | 75 +++++++++--- SkyControl.py | 2 +- SkyDescribe.py | 126 ++++++++++---------- SkywarnPlus.py | 306 +++++++++++++++++++++++++++++++++++++++---------- UpdateSWP.py | 2 +- config.yaml | 32 +++++- 6 files changed, 396 insertions(+), 147 deletions(-) diff --git a/README.md b/README.md index a5bed42..edb6a51 100644 --- a/README.md +++ b/README.md @@ -7,21 +7,23 @@ ![Total Downloads](https://img.shields.io/github/downloads/Mason10198/SkywarnPlus/total?label=Downloads&color=f15d24) ![GitHub Repo Size](https://img.shields.io/github/repo-size/Mason10198/SkywarnPlus?label=Size&color=f15d24) -**SkywarnPlus** is an advanced software solution tailored for Asterisk/app_rpt nodes. It is designed to provide important information about local government-issued alerts, thereby broadening the scope and functionality of your node. By intelligently integrating local alert data, SkywarnPlus brings a new layer of relevance and utility to your existing system. **SkywarnPlus** works with all major distributions, including AllstarLink, HAMVOIP, myGMRS, and more. +**SkywarnPlus** is an advanced software solution tailored for Asterisk/app_rpt nodes. It is designed to provide important information about local government-issued alerts in the United States, thereby broadening the scope and functionality of your node. By intelligently integrating local alert data, SkywarnPlus brings a new layer of relevance and utility to your existing system. **SkywarnPlus** works with all major distributions, including AllstarLink, HAMVOIP, myGMRS, and more. ## Key Features -- **Real-Time Weather Alerts:** The software checks the NWS CAP v1.2 API for live weather alerts for user-defined areas. +- **Real-Time Alerts:** The software watches the new NWS v1.2 API for real-time alerts for user-defined areas. -- **Unlimited Area & Node Numbers:** Users can define as many areas and local node numbers as desired. +- **Automatic Announcements:** Alerts, including when all warnings have been cleared, are announced automatically on the node. -- **Automatic Announcements:** Weather alerts, including when all warnings have been cleared, are announced automatically on the node. +- **Human Speech:** Announcements are delivered in a natural, human speech for easier understanding. + +- **Unlimited Area & Node Numbers:** Users can define as many areas and local node numbers as desired. - **Tailmessage Creation:** The software generates tailmessages for the node to continuously inform listeners about active alerts after the initial broadcast. - **Dynamic Changes to Node:** Courtesy tones and node CW / voice ID automatically change according to user-defined alerts, optimizing communication during severe weather. -- **Human Speech:** Announcements are delivered in a natural, human speech for easier understanding. +- **County Identification:** Dynamically and automatically inform listeners which county or counties an alert is affecting - **Efficiency & Speed:** SkywarnPlus is optimized for speed and efficiency to provide real-time information without delay. @@ -31,7 +33,7 @@ - **Detailed Alert Descriptions:** In addition to standard alert announcements, SkywarnPlus includes SkyDescribe, a feature for announcing detailed NWS provided descriptions of alert details. -- **Highly Customizable:** SkywarnPlus is extremely customizable, offering advanced filtering parameters to block certain alerts or types of alerts from different functions. Users can even map DTMF macros or shell commands to specified weather alerts, expanding the software's capabilities according to user needs. +- **Highly Customizable:** SkywarnPlus is extremely customizable, offering advanced filtering parameters to block certain alerts or types of alerts from different functions. Users can easily modify the sound effects and audio files used in SkywarnPlus. Users can even map DTMF macros or shell commands to specified weather alerts, infinitely expanding the software's capabilities according to user needs. - **Pushover Integration:** With Pushover integration, SkywarnPlus can send weather alert notifications directly to your phone or other devices. @@ -194,7 +196,7 @@ tailmessagelist = /tmp/SkywarnPlus/wx-tail SkywarnPlus has the ability to automatically change the node courtesy tone depending on the state of certain weather alerts. This feature can be configured via the `config.yaml` and `rpt.conf` files. -## Configuration +## Configuration Here's an explanation of how it works using the default values in the `config.yaml` file: @@ -211,7 +213,6 @@ CourtesyTones: # Define the sound files for courtesy tones. Tones: - # Audio file to feed Asterisk as ct1 in "normal" mode CT1: Boop.ulaw @@ -249,13 +250,15 @@ With this setup, Asterisk will always use `CT1.ulaw` for "local" traffic, and `C Please note the filenames are case-sensitive, so be sure they match exactly between `rpt.conf` and `config.yaml`. +After initially setting up automatic courtesy tones, the audio files will not refresh until the next time the alert status changes. To refresh immediately, run `/usr/local/bin/SkywarnPlys/SkyControl.py changect normal` to force the CTs to "normal" mode. + # CW / Voice IDs SkywarnPlus has a feature that allows it to automatically change the node ID based on the status of certain weather alerts. This requires the creation of custom audio files for the `NORMAL` and `WX` ID modes. The configuration for this is in the `config.yaml` file, with additional setup needed in the `rpt.conf` file. Let's take a look at how it's done. -## Configuration +## Configuration Here's an example of how the `config.yaml` file should be configured: @@ -272,7 +275,6 @@ IDChange: # Define the sound files for IDs. IDs: - # Audio file to feed Asterisk as ID in "normal" mode NormalID: NORMALID.ulaw @@ -283,7 +285,7 @@ IDChange: RptID: RPTID.ulaw ``` -In this setup, if none of the alerts specified in the IDAlerts list are active, SkywarnPlus replaces the file `RPTID.ulaw` with a duplicate of `NORMALID.ulaw`. +In this setup, if none of the alerts specified in the IDAlerts list are active, SkywarnPlus replaces the file `RPTID.ulaw` with a duplicate of `NORMALID.ulaw`. However, if any of the alerts in the IDAlerts list are currently active, SkywarnPlus will replace `RPTID.ulaw` with a duplicate of `WXID.ulaw`. @@ -294,11 +296,11 @@ To enable these changes, the following setup is required in your `rpt.conf` file idrecording = /usr/local/bin/SkywarnPlus/SOUNDS/ID/RPTID ``` -In this case, Asterisk will always use `RPTID.ulaw` as the node ID. SkywarnPlus effectively changes the contents of the `RPTID.ulaw` file depending on the weather alert status while Asterisk "isn't looking". +In this case, Asterisk will always use `RPTID.ulaw` as the node ID. SkywarnPlus effectively changes the contents of the `RPTID.ulaw` file depending on the weather alert status while Asterisk "isn't looking". Note that filenames are case-sensitive, so be sure they match exactly between `rpt.conf` and `config.yaml`. -This is how you can configure SkywarnPlus to automatically change the node ID depending on weather alert conditions. Please don't hesitate to raise a query if you encounter any issues. +After initially setting up automatic IDs, the audio files will not refresh until the next time the alert status changes. To refresh immediately, run `/usr/local/bin/SkywarnPlys/SkyControl.py changeid normal` to force the ID to "normal" mode. # Pushover Integration @@ -549,9 +551,48 @@ In _most_ cases, any multiple counties that SkywarnPlus is set up to monitor wil # Customizing the Audio Files -SkywarnPlus comes with a library of audio files that can be replaced with any 8kHz mono PCM16 WAV files you want. These are found in the `SOUNDS/` directory by default, along with `DICTIONARY.txt` which explains audio file assignments. +SkywarnPlus comes with a library of audio files that can be replaced with any 8kHz mono PCM16 WAV files you want. These are found in the `SOUNDS/` directory by default, along with `DICTIONARY.txt` which explains audio file assignments. Several customizations can be easily made in `config.yaml`, but the sound files are always available for you to modify directly as well. + +If you'd like to use IDChange or add county identifiers, you must create your own audio files. Follow **[this guide](https://wiki.allstarlink.org/images/d/dd/RecordingSoundFiles.pdf)** on how to record/convert audio files for use with Asterisk/app_rpt. -If you'd like to enable IDChange, you must create your own ID audio files. Follow **[this guide](https://wiki.allstarlink.org/images/d/dd/RecordingSoundFiles.pdf)** on how to create audio files for use with Asterisk/app_rpt. +>**For users wishing to maintain vocal continuity in their SkywarnPlus installation, the original creator of SkywarnPlus (N5LSN) and the woman behind the voice of it's included library of audio recordings (N5LSN XYL) will, for a small fee, record custom audio files for your SkywarnPlus installation. Contact information is readily available via QRZ.** + +## County Identifiers + +SkywarnPlus features the capability to play county-specific audio files to reference the affected area of alerts. It enhances the user's awareness of the geographic area affected by an event, making the system more informative and valuable to users monitoring systems that provide coverage for multiple counties. By assigning unique audio tags to each county, users can immediately recognize which county is affected by an event as soon as it is detected by SkywarnPlus. + +### How to use it? + +To use the county-specific audio tags, you need to specify the audio files to use for each county in your `config.yaml` file. You must create or otherwise aquire these audio files yourself. The audio files must be located in the root of the `SkywarnPlus/SOUNDS/` directory. + +The `config.yaml` explains how to use the free VoiceRSS API to generate these files using a computer synthesized voice. + +Here is an example of how to configure the `config.yaml` to utilize this feature: + +```yaml +Alerting: + # Specify the county codes for which you want to pull weather data. + # Find your county codes at https://alerts.weather.gov/. + # Make sure to use county codes ONLY, NOT zone codes, otherwise you might miss out on alerts. + # + # SkywarnPlus allows adding county-specific audio indicators to each alert in the message. + # To enable this feature, specify an audio file containing a recording of the county name in the + # ROOT of the SOUNDS/ directory as shown in the below example. You must create these files yourself. + # You can use the same VoiceRSS API used for SkyDescribe (see below) to generate these files with a synthetic voice: + # http://api.voicerss.org/?key=[YOUR_API_KEY_HERE]=en-us&f=8khz_16bit_mono&v=John&src=[YOUR COUNTY NAME HERE] + # http://api.voicerss.org/?key=1234567890QWERTY&hl=en-us&f=8khz_16bit_mono&v=John&src=Saline County + CountyCodes: + - DCC001: "County1.wav" + - MDC031: "County2.wav" + - MDC033: "County3.wav" + - VAC013: "County4.wav" + - VAC059: "County5.wav" + - VAC510: "County6.wav" + - VAC107: "County7.wav" + - VAC047: "County8.wav" + - MDC510: "County9.wav" + - VAC683: "County10.wav" +``` # Testing @@ -624,7 +665,7 @@ SkywarnPlus is open-sourced software licensed under the [GPL-3.0 license](LICENS Created by Mason Nelson (N5LSN/WRKF394) -Audio Library voiced by Rachel Nelson +Audio Library voiced by Rachel Nelson (N5LSN/WRKF394 XYL) Skywarn® and the Skywarn® logo are registered trademarks of the National -Oceanic and Atmospheric Administration, used with permission. \ No newline at end of file +Oceanic and Atmospheric Administration, used with permission. diff --git a/SkyControl.py b/SkyControl.py index ae7d0bf..5c8b37f 100644 --- a/SkyControl.py +++ b/SkyControl.py @@ -1,7 +1,7 @@ #!/usr/bin/python3 """ -SkyControl v0.3.5 by Mason Nelson +SkyControl v0.4.0 by Mason Nelson ================================== A Control Script for SkywarnPlus diff --git a/SkyDescribe.py b/SkyDescribe.py index 003063a..f1b41ae 100644 --- a/SkyDescribe.py +++ b/SkyDescribe.py @@ -1,7 +1,7 @@ #!/usr/bin/python3 """ -SkyDescribe v0.3.5 by Mason Nelson +SkyDescribe v0.4.0 by Mason Nelson ================================================== Text to Speech conversion for Weather Descriptions @@ -37,75 +37,71 @@ from ruamel.yaml import YAML from collections import OrderedDict # Use ruamel.yaml instead of PyYAML -yaml = YAML() +YAML = YAML() # Directories and Paths -baseDir = os.path.dirname(os.path.realpath(__file__)) -configPath = os.path.join(baseDir, "config.yaml") +BASE_DIR = os.path.dirname(os.path.realpath(__file__)) +CONFIG_PATH = os.path.join(BASE_DIR, "config.yaml") # Open and read configuration file -with open(configPath, "r") as config_file: - config = yaml.load(config_file) +with open(CONFIG_PATH, "r") as config_file: + config = YAML.load(config_file) # Define tmp_dir -tmp_dir = config.get("DEV", []).get("TmpDir", "/tmp/SkywarnPlus") +TMP_DIR = config.get("DEV", []).get("TmpDir", "/tmp/SkywarnPlus") # Define VoiceRSS settings # get api key, fellback 150 -api_key = config.get("SkyDescribe", []).get("APIKey", "") -language = config.get("SkyDescribe", []).get("Language", "en-us") -speed = config.get("SkyDescribe", []).get("Speed", 0) -voice = config.get("SkyDescribe", []).get("Voice", "John") -max_words = config.get("SkyDescribe", []).get("MaxWords", 150) +API_KEY = config.get("SkyDescribe", []).get("APIKey", "") +LANGUAGE = config.get("SkyDescribe", []).get("Language", "en-us") +SPEED = config.get("SkyDescribe", []).get("Speed", 0) +VOICE = config.get("SkyDescribe", []).get("Voice", "John") +MAX_WORDS = config.get("SkyDescribe", []).get("MaxWords", 150) # Path to the data file -data_file = os.path.join(tmp_dir, "data.json") +DATA_FILE = os.path.join(TMP_DIR, "data.json") # Define logger -logger = logging.getLogger(__name__) +LOGGER = logging.getLogger(__name__) if config.get("Logging", []).get("Debug", False): - logger.setLevel(logging.DEBUG) + LOGGER.setLevel(logging.DEBUG) else: - logger.setLevel(logging.INFO) + LOGGER.setLevel(logging.INFO) # Define formatter -formatter = logging.Formatter("%(asctime)s %(levelname)s %(message)s") +FORMATTER = logging.Formatter("%(asctime)s %(levelname)s %(message)s") # Define and attach console handler -ch = logging.StreamHandler() -ch.setLevel(logging.DEBUG) -ch.setFormatter(formatter) -logger.addHandler(ch) +CH = logging.StreamHandler() +CH.setLevel(logging.DEBUG) +CH.setFormatter(FORMATTER) +LOGGER.addHandler(CH) # Define and attach file handler -log_path = os.path.join(tmp_dir, "SkyDescribe.log") -fh = logging.FileHandler(log_path) -fh.setLevel(logging.DEBUG) -fh.setFormatter(formatter) -logger.addHandler(fh) - -if not api_key: - logger.error("SkyDescribe: No VoiceRSS API key found in config.yaml") +LOG_PATH = os.path.join(TMP_DIR, "SkyDescribe.log") +FH = logging.FileHandler(LOG_PATH) +FH.setLevel(logging.DEBUG) +FH.setFormatter(FORMATTER) +LOGGER.addHandler(FH) + +if not API_KEY: + LOGGER.error("SkyDescribe: No VoiceRSS API key found in config.yaml") sys.exit(1) def load_state(): """ Load the state from the state file if it exists, else return an initial state. - - Returns: - OrderedDict: A dictionary containing data. """ - if os.path.exists(data_file): - with open(data_file, "r") as file: + if os.path.exists(DATA_FILE): + with open(DATA_FILE, "r") as file: state = json.load(file) state["alertscript_alerts"] = state.get("alertscript_alerts", []) + + # Process 'last_alerts' and maintain the order of alerts last_alerts = state.get("last_alerts", []) - last_alerts = [ - (tuple(x[0]), x[1]) if isinstance(x[0], list) else x - for x in last_alerts - ] - state["last_alerts"] = OrderedDict(last_alerts) + state["last_alerts"] = OrderedDict((x[0], x[1]) for x in last_alerts) + state["last_sayalert"] = state.get("last_sayalert", []) state["active_alerts"] = state.get("active_alerts", []) return state @@ -222,10 +218,10 @@ def modify_description(description): # Limit the description to a maximum number of words words = description.split() - logger.debug("SkyDescribe: Description has %d words.", len(words)) - if len(words) > max_words: - description = " ".join(words[:max_words]) - logger.info("SkyDescribe: Description has been limited to %d words.", max_words) + LOGGER.debug("SkyDescribe: Description has %d words.", len(words)) + if len(words) > MAX_WORDS: + description = " ".join(words[:MAX_WORDS]) + LOGGER.info("SkyDescribe: Description has been limited to %d words.", MAX_WORDS) return description @@ -244,23 +240,28 @@ def convert_to_audio(api_key, text): base_url = "http://api.voicerss.org/" params = { "key": api_key, - "hl": str(language), + "hl": str(LANGUAGE), "src": text, "c": "WAV", "f": "8khz_16bit_mono", - "r": str(speed), - "v": str(voice), + "r": str(SPEED), + "v": str(VOICE), } - logger.debug( + LOGGER.debug( "SkyDescribe: Voice RSS API URL: %s", base_url + "?" + urllib.parse.urlencode(params), ) response = requests.get(base_url, params=params) response.raise_for_status() + # if responce text contains "ERROR" then log it and exit + if "ERROR" in response.text: + LOGGER.error("SkyDescribe: %s", response.text) + sys.exit(1) - audio_file_path = os.path.join(tmp_dir, "describe.wav") + audio_file_path = os.path.join(TMP_DIR, "describe.wav") + LOGGER.debug("SkyDescribe: Saving audio file to %s", audio_file_path) with open(audio_file_path, "wb") as file: file.write(response.content) return audio_file_path @@ -270,65 +271,70 @@ def main(index_or_title): state = load_state() alerts = list(state["last_alerts"].items()) + # list the alerts in order as a numbered list + LOGGER.debug("SkyDescribe: List of alerts:") + for i, alert in enumerate(alerts): + LOGGER.debug("SkyDescribe: %d. %s", i + 1, alert[0]) + # Determine if the argument is an index or a title if str(index_or_title).isdigit(): index = int(index_or_title) - 1 if index >= len(alerts): - logger.error("SkyDescribe: No alert found at index %d.", index + 1) + LOGGER.error("SkyDescribe: No alert found at index %d.", index + 1) description = "Sky Describe error, no alert found at index {}.".format( index + 1 ) else: alert, alert_data = alerts[index] - (_, description, _) = alert_data + description = alert_data[0]["description"] else: # Argument is not an index, assume it's a title title = index_or_title for alert, alert_data in alerts: if alert == title: # Assuming alert is a title - _, description, _ = alert_data + description = alert_data[0]["description"] break else: - logger.error("SkyDescribe: No alert with title %s found.", title) + LOGGER.error("SkyDescribe: No alert with title %s found.", title) description = "Sky Describe error, no alert found with title {}.".format( title ) - logger.debug("\n\nSkyDescribe: Original description: %s", description) + LOGGER.debug("\n\nSkyDescribe: Original description: %s", description) # If the description is not an error message, extract the alert title if not "Sky Describe error" in description: alert_title = alert # As alert itself is the title now - logger.info("SkyDescribe: Generating description for alert: %s", alert_title) + LOGGER.info("SkyDescribe: Generating description for alert: %s", alert_title) # Add the alert title at the beginning description = "Detailed alert information for {}. {}".format( alert_title, description ) description = modify_description(description) - logger.debug("\n\nSkyDescribe: Modified description: %s\n\n", description) + LOGGER.debug("\n\nSkyDescribe: Modified description: %s\n\n", description) - audio_file = convert_to_audio(api_key, description) + audio_file = convert_to_audio(API_KEY, description) with contextlib.closing(wave.open(audio_file, "r")) as f: frames = f.getnframes() rate = f.getframerate() duration = frames / float(rate) - logger.debug("SkyDescribe: Length of the audio file in seconds: %s", duration) + LOGGER.debug("SkyDescribe: Length of the audio file in seconds: %s", duration) nodes = config["Asterisk"]["Nodes"] for node in nodes: - logger.info("SkyDescribe: Broadcasting description on node %s.", node) + LOGGER.info("SkyDescribe: Broadcasting description on node %s.", node) command = "/usr/sbin/asterisk -rx 'rpt localplay {} {}'".format( node, audio_file.rsplit(".", 1)[0] ) - logger.debug("SkyDescribe: Running command: %s", command) + LOGGER.debug("SkyDescribe: Running command: %s", command) subprocess.run(command, shell=True) # Script entry point if __name__ == "__main__": if len(sys.argv) != 2: - logger.error("Usage: SkyDescribe.py ") + LOGGER.error("Usage: SkyDescribe.py ") sys.exit(1) main(sys.argv[1]) diff --git a/SkywarnPlus.py b/SkywarnPlus.py index 77943d3..e59c2e4 100644 --- a/SkywarnPlus.py +++ b/SkywarnPlus.py @@ -1,7 +1,7 @@ #!/usr/bin/python3 """ -SkywarnPlus v0.3.5 by Mason Nelson +SkywarnPlus v0.4.0 by Mason Nelson =============================================================================== SkywarnPlus is a utility that retrieves severe weather alerts from the National Weather Service and integrates these alerts with an Asterisk/app_rpt based @@ -70,9 +70,6 @@ SOUNDS_PATH = config.get("Alerting", {}).get( "SoundsPath", os.path.join(BASE_DIR, "SOUNDS") ) -# Define countyCodes -COUNTY_CODES = config.get("Alerting", {}).get("CountyCodes", []) - # Create tmp_dir if it doesn't exist if TMP_DIR: os.makedirs(TMP_DIR, exist_ok=True) @@ -278,6 +275,42 @@ F_HANDLER = logging.FileHandler(LOG_FILE) F_HANDLER.setFormatter(LOG_FORMATTER) LOGGER.addHandler(F_HANDLER) +# Get the "CountyCodes" from the config +COUNTY_CODES_CONFIG = config.get("Alerting", {}).get("CountyCodes", []) + +# Log the obtained COUNTY_CODES_CONFIG for debugging +LOGGER.debug(f"COUNTY_CODES_CONFIG: {COUNTY_CODES_CONFIG}") + +# Initialize COUNTY_CODES and COUNTY_WAVS +COUNTY_CODES = [] +COUNTY_WAVS = [] + +# Check the type of "CountyCodes" config to handle both list and dictionary +if isinstance(COUNTY_CODES_CONFIG, list): + # If it's a list, check if it's a list of strings or dictionaries + if all(isinstance(i, str) for i in COUNTY_CODES_CONFIG): + # It's the old format and we can use it directly + COUNTY_CODES = COUNTY_CODES_CONFIG + elif all(isinstance(i, dict) for i in COUNTY_CODES_CONFIG): + # It's a list of dictionaries with WAV files + # We need to separate the county codes and the WAVs + for dic in COUNTY_CODES_CONFIG: + for key, value in dic.items(): + COUNTY_CODES.append(key) + COUNTY_WAVS.append(value) +elif isinstance(COUNTY_CODES_CONFIG, dict): + # If it's a dictionary, it's got WAV files + # We need to separate the county codes and the WAVs + COUNTY_CODES = list(COUNTY_CODES_CONFIG.keys()) + COUNTY_WAVS = list(COUNTY_CODES_CONFIG.values()) +else: + # Invalid format, set it to an empty list + COUNTY_CODES = [] + COUNTY_WAVS = [] + +# Log the final COUNTY_CODES and COUNTY_WAVS for debugging +LOGGER.debug(f"COUNTY_CODES: {COUNTY_CODES}, COUNTY_WAVS: {COUNTY_WAVS}") + # Log some debugging information LOGGER.debug("Base directory: %s", BASE_DIR) LOGGER.debug("Temporary directory: %s", TMP_DIR) @@ -296,12 +329,11 @@ def load_state(): with open(DATA_FILE, "r") as file: state = json.load(file) state["alertscript_alerts"] = state.get("alertscript_alerts", []) + + # Process 'last_alerts' and maintain the order of alerts last_alerts = state.get("last_alerts", []) - last_alerts = [ - (tuple(x[0]), x[1]) if isinstance(x[0], list) else x - for x in last_alerts - ] - state["last_alerts"] = OrderedDict(last_alerts) + state["last_alerts"] = OrderedDict((x[0], x[1]) for x in last_alerts) + state["last_sayalert"] = state.get("last_sayalert", []) state["active_alerts"] = state.get("active_alerts", []) return state @@ -366,11 +398,16 @@ def get_alerts(countyCodes): severity = severity_mapping_words.get(last_word, 0) description = "This alert was manually injected as a test." end_time_utc = current_time + timedelta(hours=1) - alerts[(event)] = ( - severity, - description, - end_time_utc.strftime("%Y-%m-%dT%H:%M:%S.%fZ"), - ) + county_data = [ + { + "county_code": county_code, + "severity": severity, + "description": description, + "end_time_utc": end_time_utc.strftime("%Y-%m-%dT%H:%M:%S.%fZ"), + } + for county_code in ["DCC001", "MDC033"] + ] # Create a list of dictionaries + alerts[event] = county_data # Add the list of dictionaries to the alert # We limit the number of alerts to the maximum defined constant. alerts = OrderedDict(list(alerts.items())[:MAX_ALERTS]) @@ -399,6 +436,10 @@ def get_alerts(countyCodes): # Loop over each county code and retrieve alerts from the API. for countyCode in countyCodes: url = "https://api.weather.gov/alerts/active?zone={}".format(countyCode) + # + # WARNING: ONLY USE THIS FOR DEVELOPMENT PURPOSES + # THIS URL WILL RETURN ALL ACTIVE ALERTS IN THE UNITED STATES + # url = "https://api.weather.gov/alerts/active" try: # If we can get a successful response from the API, we process the alerts from the response. response = requests.get(url) @@ -434,12 +475,7 @@ def get_alerts(countyCodes): description = feature["properties"].get("description", "") severity = feature["properties"].get("severity", None) - # If the alert has already been processed, we skip it. - if event in seen_alerts: - continue - - # We check if the event is in a list of globally blocked events. - # If it is, we skip it. + # Check if the event is globally blocked as per the configuration. If it is, skip this event. is_blocked = False for global_blocked_event in GLOBAL_BLOCKED_EVENTS: if fnmatch.fnmatch(event, global_blocked_event): @@ -449,6 +485,7 @@ def get_alerts(countyCodes): ) is_blocked = True break + # If the event is globally blocked, we skip the remaining code in this loop iteration and move to the next one. if is_blocked: continue @@ -459,13 +496,41 @@ def get_alerts(countyCodes): else: severity = severity_mapping_api.get(severity, 0) - # Add the alert to the 'alerts' dictionary and add the event name to 'seen_alerts'. - alerts[(event)] = ( + # Log the alerts and their severity level for debugging purposes. + LOGGER.debug( + "getAlerts: %s - %s - Severity: %s", + countyCode, + event, severity, - description, - end_time_utc.strftime("%Y-%m-%dT%H:%M:%S.%fZ"), ) - seen_alerts.add(event) + + # Check if the event has already been processed (seen). + # If it has been seen, we add a new dictionary to its list of alerts. This dictionary contains details about the alert. + if event in seen_alerts: + alerts[event].append( + { + "county_code": countyCode, # the county code the alert is for + "severity": severity, # the severity level of the alert + "description": description, # a description of the alert + "end_time_utc": end_time_utc.strftime( + "%Y-%m-%dT%H:%M:%S.%fZ" + ), # the time the alert ends in UTC + } + ) + # If the event hasn't been seen before, we create a new list entry in the 'alerts' dictionary for this event. + else: + alerts[event] = [ + { + "county_code": countyCode, # the county code the alert is for + "severity": severity, # the severity level of the alert + "description": description, # a description of the alert + "end_time_utc": end_time_utc.strftime( + "%Y-%m-%dT%H:%M:%S.%fZ" + ), # the time the alert ends in UTC + } + ] + # Add the event to the set of seen alerts. + seen_alerts.add(event) # If the current time is not within the alert's active period, we skip it. else: @@ -481,22 +546,66 @@ def get_alerts(countyCodes): start_time_utc, end_time_utc, ) + else: + LOGGER.debug( + "getAlerts: Skipping %s, missing start or end time.", + feature["properties"]["event"], + ) - # If we cannot get a successful response from the API, we load stored alert data instead. except requests.exceptions.RequestException as e: - LOGGER.error("Failed to retrieve alerts for %s. Reason: %s", countyCode, e) - LOGGER.info("API unreachable. Using stored data instead.") + LOGGER.debug("Failed to retrieve alerts for %s. Reason: %s", countyCode, e) + LOGGER.debug("API unreachable. Using stored data instead.") + + # Load alerts from data.json if os.path.isfile(DATA_FILE): with open(DATA_FILE) as f: data = json.load(f) - alerts = data.get("alerts", {}) + stored_alerts = data.get("last_alerts", []) - # If the number of alerts exceeds the maximum defined constant, we truncate the alerts. - alerts = OrderedDict(list(alerts.items())[:MAX_ALERTS]) + # Filter alerts by end_time_utc + current_time_str = datetime.now(timezone.utc).strftime( + "%Y-%m-%dT%H:%M:%S.%fZ" + ) + LOGGER.debug("Current time: %s", current_time_str) + alerts = {} + for stored_alert in stored_alerts: + event = stored_alert[0] + alert_list = stored_alert[1] + alerts[event] = [] + for alert in alert_list: + end_time_str = alert["end_time_utc"] + if parser.parse(end_time_str) >= parser.parse( + current_time_str + ): + LOGGER.debug( + "getAlerts: Keeping %s because it does not expire until %s", + event, + end_time_str, + ) + alerts[event].append(alert) + else: + LOGGER.debug( + "getAlerts: Removing %s because it expired at %s", + event, + end_time_str, + ) + else: + LOGGER.error("No stored data available.") + break + + alerts = OrderedDict( + sorted( + alerts.items(), + key=lambda item: ( + max([x["severity"] for x in item[1]]), # Max Severity + severity_mapping_words.get(item[0].split()[-1], 0), # Words severity + ), + reverse=True, + ) + ) - # We store the alerts in a file for future use if the API is unreachable. - with open(DATA_FILE, "w") as f: - json.dump({"alerts": dict(alerts)}, f) + # If the number of alerts exceeds the maximum defined constant, we truncate the alerts. + alerts = OrderedDict(list(alerts.items())[:MAX_ALERTS]) return alerts @@ -538,9 +647,7 @@ def say_alerts(alerts): # Check if the filtered alerts are the same as the last run if filtered_alerts == state["last_sayalert"]: - LOGGER.debug( - "sayAlert: The filtered alerts are the same as the last run. Not broadcasting." - ) + LOGGER.debug("sayAlert: alerts are the same as the last broadcast - skipping.") return state["last_sayalert"] = filtered_alerts @@ -564,7 +671,7 @@ def say_alerts(alerts): SOUNDS_PATH, "ALERTS", "EFFECTS", - config.get("Alerting", {}).get("AlertSound", "StartrekWhistle.wav"), + config.get("Alerting", {}).get("AlertSound", "Duncecap.wav.wav"), ) ) @@ -575,29 +682,58 @@ def say_alerts(alerts): ) alert_count = 0 - for alert in filtered_alerts: - try: - index = ALERT_STRINGS.index(alert) - audio_file = AudioSegment.from_wav( - os.path.join( - SOUNDS_PATH, "ALERTS", "SWP_{}.wav".format(ALERT_INDEXES[index]) + for ( + alert, + counties, + ) in alerts.items(): # Now we loop over both alert name and its associated counties + if alert in filtered_alerts: + try: + index = ALERT_STRINGS.index(alert) + audio_file = AudioSegment.from_wav( + os.path.join( + SOUNDS_PATH, "ALERTS", "SWP_{}.wav".format(ALERT_INDEXES[index]) + ) + ) + combined_sound += sound_effect + audio_file + LOGGER.debug( + "sayAlert: Added %s (SWP_%s.wav) to alert sound", + alert, + ALERT_INDEXES[index], + ) + alert_count += 1 + + # Add county names if they exist + for county in counties: + # if its the first county, word_space is 600ms of silence. else it is 400ms + if counties.index(county) == 0: + word_space = AudioSegment.silent(duration=600) + else: + word_space = AudioSegment.silent(duration=400) + county_code = county["county_code"] + if COUNTY_WAVS and county_code in COUNTY_CODES: + index = COUNTY_CODES.index(county_code) + county_name_file = COUNTY_WAVS[index] + LOGGER.debug( + "sayAlert: Adding %s ID %s to %s", + county_code, + county_name_file, + alert, + ) + combined_sound += word_space + AudioSegment.from_wav( + os.path.join(SOUNDS_PATH, "ALERTS", county_name_file) + ) + # if this is the last county name, add 600ms of silence after the county name + if counties.index(county) == len(counties) - 1: + combined_sound += AudioSegment.silent(duration=600) + + except ValueError: + LOGGER.error("sayAlert: Alert not found: %s", alert) + except FileNotFoundError: + LOGGER.error( + "sayAlert: Audio file not found: %s/ALERTS/SWP_%s.wav", + SOUNDS_PATH, + ALERT_INDEXES[index], ) - ) - combined_sound += sound_effect + audio_file - LOGGER.debug( - "sayAlert: Added %s (SWP_%s.wav) to alert sound", - alert, - ALERT_INDEXES[index], - ) - alert_count += 1 - except ValueError: - LOGGER.error("sayAlert: Alert not found: %s", alert) - except FileNotFoundError: - LOGGER.error( - "sayAlert: Audio file not found: %s/ALERTS/SWP_%s.wav", - SOUNDS_PATH, - ALERT_INDEXES[index], - ) if alert_count == 0: LOGGER.debug("sayAlert: All alerts were blocked, not broadcasting any alerts.") @@ -605,7 +741,7 @@ def say_alerts(alerts): alert_suffix = config.get("Alerting", {}).get("SayAlertSuffix", None) if alert_suffix is not None: - suffix_silence = AudioSegment.silent(duration=1000) + suffix_silence = AudioSegment.silent(duration=600) LOGGER.debug("sayAlert: Adding alert suffix %s", alert_suffix) suffix_file = os.path.join(SOUNDS_PATH, alert_suffix) suffix_sound = AudioSegment.from_wav(suffix_file) @@ -685,6 +821,15 @@ def say_allclear(): converted_combined_sound = convert_audio(combined_sound) converted_combined_sound.export(all_clear_file, format="wav") + if config.get("Alerting", {}).get("SayAllClearSuffix", None) is not None: + suffix_file = os.path.join( + SOUNDS_PATH, config.get("Alerting", {}).get("SayAllClearSuffix") + ) + LOGGER.debug("sayAllClear: Adding all clear suffix %s", suffix_file) + suffix_sound = AudioSegment.from_wav(suffix_file) + converted_suffix_sound = convert_audio(suffix_sound) + converted_suffix_sound.export(all_clear_file, format="wav") + node_numbers = config.get("Asterisk", {}).get("Nodes", []) for node_number in node_numbers: LOGGER.info("Broadcasting all clear message on node %s", node_number) @@ -700,6 +845,9 @@ def build_tailmessage(alerts): transmission to update on the weather conditions. """ + # Determine whether the user has enabled county identifiers + county_identifiers = config.get("Tailmessage", {}).get("TailmessageCounties", False) + # Extract only the alert names from the OrderedDict keys alert_names = [alert for alert in alerts.keys()] @@ -723,7 +871,10 @@ def build_tailmessage(alerts): ) ) - for alert in alert_names: + for ( + alert, + counties, + ) in alerts.items(): # Now we loop over both alert name and its associated counties if any( fnmatch.fnmatch(alert, blocked_event) for blocked_event in TAILMESSAGE_BLOCKED_EVENTS @@ -746,6 +897,32 @@ def build_tailmessage(alerts): alert, ALERT_INDEXES[index], ) + + # Add county names if they exist + if county_identifiers: + for county in counties: + # if its the first county, word_space is 600ms of silence. else it is 400ms + if counties.index(county) == 0: + word_space = AudioSegment.silent(duration=600) + else: + word_space = AudioSegment.silent(duration=400) + county_code = county["county_code"] + if COUNTY_WAVS and county_code in COUNTY_CODES: + index = COUNTY_CODES.index(county_code) + county_name_file = COUNTY_WAVS[index] + LOGGER.debug( + "buildTailMessage: Adding %s ID %s to %s", + county_code, + county_name_file, + alert, + ) + combined_sound += word_space + AudioSegment.from_wav( + os.path.join(SOUNDS_PATH, "ALERTS", county_name_file) + ) + # if this is the last county name, add 600ms of silence after the county name + if counties.index(county) == len(counties) - 1: + combined_sound += AudioSegment.silent(duration=600) + except ValueError: LOGGER.error("Alert not found: %s", alert) except FileNotFoundError: @@ -1188,7 +1365,10 @@ def main(): say_allclear() else: if say_alert_enabled: - say_alerts(alerts) + if config["Alerting"].get("SayAlertAll", False): + say_alerts(alerts) + else: + say_alerts({alert: alerts[alert] for alert in added_alerts}) # Check if tailmessage needs to be built enable_tailmessage = config.get("Tailmessage", {}).get("Enable", False) diff --git a/UpdateSWP.py b/UpdateSWP.py index 58ab3d4..b6f511f 100644 --- a/UpdateSWP.py +++ b/UpdateSWP.py @@ -1,7 +1,7 @@ #!/usr/bin/python3 """ -SkywarnPlus Updater v0.3.5 by Mason Nelson +SkywarnPlus Updater v0.4.0 by Mason Nelson =============================================================================== Script to update SkywarnPlus to the latest version. This script will download the latest version of SkywarnPlus from GitHub, and then merge the existing diff --git a/config.yaml b/config.yaml index 15f96ff..94d93e1 100644 --- a/config.yaml +++ b/config.yaml @@ -1,4 +1,4 @@ -# SkywarnPlus v0.3.5 Configuration File +# SkywarnPlus v0.4.0 Configuration File # Author: Mason Nelson (N5LSN/WRKF394) # Please edit this file according to your specific requirements. @@ -35,14 +35,28 @@ Alerting: # Make sure to use county codes ONLY, NOT zone codes, otherwise you might miss out on alerts. # Example: # CountyCodes: - # - ARC121 - # - ARC021 + # - ARC125 + # - ARC119 + # + # SkywarnPlus allows adding county-specific audio indicators to each alert in the message. + # To enable this feature, specify an audio file containing a recording of the county name in the + # ROOT of the SOUNDS/ directory as shown in the below example. You must create these files yourself. + # You can use the same VoiceRSS API used for SkyDescribe (see below) to generate these files with a synthetic voice: + # http://api.voicerss.org/?key=[YOUR_API_KEY_HERE]=en-us&f=8khz_16bit_mono&v=John&src=[YOUR COUNTY NAME HERE] + # http://api.voicerss.org/?key=1234567890QWERTY&hl=en-us&f=8khz_16bit_mono&v=John&src=Saline County + # Example: + # CountyCodes: + # - ARC125: "Saline.wav" + # - ARC119: "Pulaski.wav" CountyCodes: - YOUR_COUNTY_CODE # Enable instant voice announcement when new weather alerts are issued. SayAlert: true + # When a change is detected, make SayAlert say ALL of the currently active alerts, not just newly detected one(s) + SayAlertAll: false + # Specify the WAV file in the SOUNDS/ALERTS directory to use as the alert sound effect AlertSound: Duncecap.wav @@ -54,6 +68,9 @@ Alerting: # Specify the WAV file in the SOUNDS/ALERTS directory to use as the all clear sound effect. AllClearSound: Triangles.wav + + # Specify a WAV file in the root of the SOUNDS directory to be appended to the end of the all clear message. + SayAllClearSuffix: # Specify the WAV file in the SOUNDS/ALERTS directory to use as the alert seperator sound effect AlertSeperator: Woodblock.wav @@ -109,11 +126,16 @@ Tailmessage: # Configuration for the tail message functionality. Requires initial setup in RPT.CONF. # Enable/disable automatic tail message. - Enable: false + Enable: true # Specify a WAV file in the root of the SOUNDS directory to be appended to the end of the tail message. TailmessageSuffix: + # Enable to add county indicators to the tail message + # County indicators must FIRST be configured in the Alerting section where county codes are defined. + # NOTE: This can make your tail message quite long depending on how many counties you have configured. + TailmessageCounties: false + # Specify an alternative path and filename for saving the tail message. # Default is /tmp/SkywarnPlus/wx-tail.wav. TailmessagePath: /tmp/SkywarnPlus/wx-tail.wav @@ -392,4 +414,4 @@ DEV: INJECTALERTS: - Tornado Warning - Tornado Watch - - Severe Thunderstorm Warning + - Severe Thunderstorm Warning \ No newline at end of file From b815572738f301ec7f9fe9d9c7b724dbb26494d4 Mon Sep 17 00:00:00 2001 From: Mason10198 <31994327+Mason10198@users.noreply.github.com> Date: Thu, 27 Jul 2023 00:43:40 -0500 Subject: [PATCH 5/8] Better injection --- SkywarnPlus.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/SkywarnPlus.py b/SkywarnPlus.py index e59c2e4..fe727b7 100644 --- a/SkywarnPlus.py +++ b/SkywarnPlus.py @@ -40,6 +40,7 @@ import wave import contextlib import math import sys +import itertools from datetime import datetime, timezone, timedelta from dateutil import parser from pydub import AudioSegment @@ -393,19 +394,26 @@ def get_alerts(countyCodes): LOGGER.debug("getAlerts: Injecting alerts: %s", injected_alerts) if injected_alerts is None: injected_alerts = [] - for event in injected_alerts: + + county_codes_cycle = itertools.cycle( + countyCodes + ) # Create an iterator that returns elements from the iterable in a cyclic manner + + for i, event in enumerate(injected_alerts): last_word = event.split()[-1] severity = severity_mapping_words.get(last_word, 0) description = "This alert was manually injected as a test." end_time_utc = current_time + timedelta(hours=1) county_data = [ { - "county_code": county_code, + "county_code": next(county_codes_cycle), "severity": severity, "description": description, "end_time_utc": end_time_utc.strftime("%Y-%m-%dT%H:%M:%S.%fZ"), } - for county_code in ["DCC001", "MDC033"] + for _ in range( + i + 1 + ) # Here we increase the number of county codes for each alert ] # Create a list of dictionaries alerts[event] = county_data # Add the list of dictionaries to the alert @@ -720,7 +728,7 @@ def say_alerts(alerts): alert, ) combined_sound += word_space + AudioSegment.from_wav( - os.path.join(SOUNDS_PATH, "ALERTS", county_name_file) + os.path.join(SOUNDS_PATH, county_name_file) ) # if this is the last county name, add 600ms of silence after the county name if counties.index(county) == len(counties) - 1: @@ -917,7 +925,7 @@ def build_tailmessage(alerts): alert, ) combined_sound += word_space + AudioSegment.from_wav( - os.path.join(SOUNDS_PATH, "ALERTS", county_name_file) + os.path.join(SOUNDS_PATH, county_name_file) ) # if this is the last county name, add 600ms of silence after the county name if counties.index(county) == len(counties) - 1: From 1c85371c8c332b5ee6a9cf08783c6cd21d1c331b Mon Sep 17 00:00:00 2001 From: Mason10198 <31994327+Mason10198@users.noreply.github.com> Date: Thu, 27 Jul 2023 13:43:52 -0500 Subject: [PATCH 6/8] Identify alert multiples --- SOUNDS/ALERTS/DICTIONARY.txt | 3 +- SkywarnPlus.py | 61 +++++++++++++++++++++++++----------- 2 files changed, 45 insertions(+), 19 deletions(-) diff --git a/SOUNDS/ALERTS/DICTIONARY.txt b/SOUNDS/ALERTS/DICTIONARY.txt index 742091a..a8e2a1b 100644 --- a/SOUNDS/ALERTS/DICTIONARY.txt +++ b/SOUNDS/ALERTS/DICTIONARY.txt @@ -153,4 +153,5 @@ SWP_144.wav: Tailmessage Disabled SWP_145.wav: CourtesyTone Enabled SWP_146.wav: CourtesyTone Disabled SWP_147.wav: All Clear Message -SWP_148.wav: Updated Weather Information Message \ No newline at end of file +SWP_148.wav: Updated Weather Information Message +SWP_149.wav: With Multiples \ No newline at end of file diff --git a/SkywarnPlus.py b/SkywarnPlus.py index fe727b7..27227e6 100644 --- a/SkywarnPlus.py +++ b/SkywarnPlus.py @@ -41,6 +41,7 @@ import contextlib import math import sys import itertools +import random from datetime import datetime, timezone, timedelta from dateutil import parser from pydub import AudioSegment @@ -279,9 +280,6 @@ LOGGER.addHandler(F_HANDLER) # Get the "CountyCodes" from the config COUNTY_CODES_CONFIG = config.get("Alerting", {}).get("CountyCodes", []) -# Log the obtained COUNTY_CODES_CONFIG for debugging -LOGGER.debug(f"COUNTY_CODES_CONFIG: {COUNTY_CODES_CONFIG}") - # Initialize COUNTY_CODES and COUNTY_WAVS COUNTY_CODES = [] COUNTY_WAVS = [] @@ -309,9 +307,6 @@ else: COUNTY_CODES = [] COUNTY_WAVS = [] -# Log the final COUNTY_CODES and COUNTY_WAVS for debugging -LOGGER.debug(f"COUNTY_CODES: {COUNTY_CODES}, COUNTY_WAVS: {COUNTY_WAVS}") - # Log some debugging information LOGGER.debug("Base directory: %s", BASE_DIR) LOGGER.debug("Temporary directory: %s", TMP_DIR) @@ -399,22 +394,27 @@ def get_alerts(countyCodes): countyCodes ) # Create an iterator that returns elements from the iterable in a cyclic manner + counter = 0 for i, event in enumerate(injected_alerts): last_word = event.split()[-1] severity = severity_mapping_words.get(last_word, 0) description = "This alert was manually injected as a test." - end_time_utc = current_time + timedelta(hours=1) - county_data = [ - { - "county_code": next(county_codes_cycle), - "severity": severity, - "description": description, - "end_time_utc": end_time_utc.strftime("%Y-%m-%dT%H:%M:%S.%fZ"), - } - for _ in range( - i + 1 - ) # Here we increase the number of county codes for each alert - ] # Create a list of dictionaries + + county_data = [] + for j in range( + i + 1 + ): # Here we increase the number of county codes for each alert + end_time_utc = current_time + timedelta(hours=counter + 1) + county_data.append( + { + "county_code": next(county_codes_cycle), + "severity": severity, + "description": description, + "end_time_utc": end_time_utc.strftime("%Y-%m-%dT%H:%M:%S.%fZ"), + } + ) + counter += 1 # Increase counter here + alerts[event] = county_data # Add the list of dictionaries to the alert # We limit the number of alerts to the maximum defined constant. @@ -696,6 +696,8 @@ def say_alerts(alerts): ) in alerts.items(): # Now we loop over both alert name and its associated counties if alert in filtered_alerts: try: + descriptions = [county["description"] for county in counties] + end_times = [county["end_time_utc"] for county in counties] index = ALERT_STRINGS.index(alert) audio_file = AudioSegment.from_wav( os.path.join( @@ -708,6 +710,17 @@ def say_alerts(alerts): alert, ALERT_INDEXES[index], ) + if len(set(descriptions)) > 1 or len(set(end_times)) > 1: + LOGGER.debug( + "sayAlert: Found multiple unique instances of the alert %s", + alert, + ) + multiples_sound = AudioSegment.from_wav( + os.path.join(SOUNDS_PATH, "ALERTS", "SWP_149.wav") + ) + combined_sound += ( + AudioSegment.silent(duration=200) + multiples_sound + ) alert_count += 1 # Add county names if they exist @@ -906,6 +919,18 @@ def build_tailmessage(alerts): ALERT_INDEXES[index], ) + descriptions = [county["description"] for county in counties] + end_times = [county["end_time_utc"] for county in counties] + if len(set(descriptions)) > 1 or len(set(end_times)) > 1: + LOGGER.debug( + "buildTailMessage: Found multiple unique instances of the alert %s", + alert, + ) + multiples_sound = AudioSegment.from_wav( + os.path.join(SOUNDS_PATH, "ALERTS", "SWP_149.wav") + ) + combined_sound += AudioSegment.silent(duration=200) + multiples_sound + # Add county names if they exist if county_identifiers: for county in counties: From ddd815a0540f37655a95e8babe0a9898f6d1e8da Mon Sep 17 00:00:00 2001 From: Mason10198 <31994327+Mason10198@users.noreply.github.com> Date: Thu, 27 Jul 2023 17:16:17 -0500 Subject: [PATCH 7/8] Slightly quieter & normalized ULAW tones --- SOUNDS/TONES/3down.ulaw | 2 +- SOUNDS/TONES/3up.ulaw | 2 +- SOUNDS/TONES/4down.ulaw | 2 +- SOUNDS/TONES/4up.ulaw | 2 +- SOUNDS/TONES/Apollo.ulaw | 2 +- SOUNDS/TONES/BeeBoo.ulaw | 2 +- SOUNDS/TONES/Beep.ulaw | 2 +- SOUNDS/TONES/BlastOff.ulaw | 2 +- SOUNDS/TONES/Boop.ulaw | 2 +- SOUNDS/TONES/BumbleBee.ulaw | 2 +- SOUNDS/TONES/Chord3up.ulaw | 2 +- SOUNDS/TONES/Comet.ulaw | 2 +- SOUNDS/TONES/Duncecap.ulaw | 2 +- SOUNDS/TONES/Moonbounce.ulaw | 2 +- SOUNDS/TONES/NBC.ulaw | 2 +- SOUNDS/TONES/NBCmed.ulaw | 2 +- SOUNDS/TONES/NBCquick.ulaw | 2 +- SOUNDS/TONES/Nextel.ulaw | 2 +- SOUNDS/TONES/OverHere.ulaw | 2 +- SOUNDS/TONES/PianoChord.ulaw | 2 +- SOUNDS/TONES/RC210#1.ulaw | 2 +- SOUNDS/TONES/RC210#10.ulaw | 2 +- SOUNDS/TONES/RC210#2.ulaw | 2 +- SOUNDS/TONES/RC210#3.ulaw | 2 +- SOUNDS/TONES/RC210#4.ulaw | 2 +- SOUNDS/TONES/RC210#5.ulaw | 2 +- SOUNDS/TONES/RC210#6.ulaw | 2 +- SOUNDS/TONES/RC210#7.ulaw | 2 +- SOUNDS/TONES/RC210#8.ulaw | 2 +- SOUNDS/TONES/RC210#9.ulaw | 2 +- SOUNDS/TONES/SatPass.ulaw | 2 +- SOUNDS/TONES/ShootingStar.ulaw | 2 +- SOUNDS/TONES/Stardust.ulaw | 2 +- SOUNDS/TONES/Target.ulaw | 2 +- SOUNDS/TONES/TelRing.ulaw | 2 +- SOUNDS/TONES/Tumbleweed.ulaw | 2 +- SOUNDS/TONES/Waterdrop.ulaw | 2 +- SOUNDS/TONES/Whippoorwhill.ulaw | 2 +- SOUNDS/TONES/XPError.ulaw | 2 +- SOUNDS/TONES/XPok.ulaw | 2 +- SOUNDS/TONES/YellowJacket.ulaw | 2 +- 41 files changed, 41 insertions(+), 41 deletions(-) diff --git a/SOUNDS/TONES/3down.ulaw b/SOUNDS/TONES/3down.ulaw index e1f601b..67de4d3 100644 --- a/SOUNDS/TONES/3down.ulaw +++ b/SOUNDS/TONES/3down.ulaw @@ -1 +1 @@ -û=-).HVKg[3&"+"31,ƨqIT<)"&?/$V#ULLJ.$#0OO(6XI`d5'"*_%.7*ϩJQ>*#&;4! !INKN/$#.ɡqA*2]I\t7'")O(*=(ߪJOA+#%7:Ϝ"@PJoT0%#-գ9-.eIX:("'F+'F%mKME,#$4B%;TJg[3&"+"31,ƨqIT<)"&?/$V#TLLJ.$#0OO(6XI_e5'"*_%.7*ϩJQ>*#&;4! !INKN/$#.ɡpA*2]I\t7'")O(*=(ߪJOA+#%7:Ϝ"@PJoS0%#-ԣ9-.eIX:("(F+'F%mKNJ2+->Ȯ\=;C\ȻC0*(,6MMAHߵ*:?%) 'ע.#/LKAJ׳(?;$*>TCDk1.[)&5^gGAPȮE"$0 ".HLAHߵ*:?%) 'ע.#/LKAJ׳(?;$*>TCDk1.[)&5^gHEUͶX;44;H`;D.#);ִTJJPg[?3+&#"%+97"3ȧ1! ,DƯqOIKUwP%.ݪ7$*=ϲQJJQkW>1*%#"&,;޲4!!6/ !-I®jNIKVN;/)$"#'.Bɭq-%AL*$2^]LIM\tG7-'$"$)2OH(*]=&(9ߵVJIOc^A4+&#"%+7p:$/ϩ4"+@ʰ}PIJSoT=0*%"#&-=կ1"9e-".NeMILXL:.($"#(/FĬ[+'HF)%4mZKIN^kE6,'#"$)4VN7-++.4>Mg \ No newline at end of file +O@7)%,GE.*.?ؼy[dN=7:R¯C,%)8̭f4+,8e]]\B88EӴ`1'&/`<,*1Iʹg[mpI;7=m9*%+BJ/*.=༷\bQ=8:MƯH-%(6Ԯ5+,6[¸_\_C88B۶y2'&.T=-*/Fκk[k{J;7=`<*%*=«O/*-<[`T>89JɱM.&'4௦7++4SŸ`\xdE98@帬4(%-L@.*/BҺqZhM<7;X>+%*;ǬX2*-9v\^W?88HβU.&'19,+2Mȸd[rjG:7>7)%,GE.*.?ؼy[dN=7:R¯C,%)8̭f4+,8e]]\B88EӴ_1'&/_<,*1Iʹg[mpI;7=m9*%+BJ/*.=ཷ[bP=8:NƯH-%(6Ԯ5+,6[¸_\_C88B۶y2'&.T=-*/FκlZkzJ;7=_<*%*=«O1*-<[`T>89JɱM.&'4߯7++4SŸa[ycE98@丬4(%-L@.*/BҺp[gM<7+%*;ǬX2*-9w\_[F>@P¼kONVkVE=Ҵ>2/19GfxZT_ø^8,'&+7gH6//6@V_TYʻ?.(&)1IůW:1/4Ҵ>2/19GfxZT_ø^8,'&+7gH6//6@V_TYʻ?.(&)1IůW:1/4:879>LȹJ7-)&%(,4GڻE6.+*+.5?Wüy`[\e|aNC=978:@R·C4,(%&).8O̷f?4-+*,/8Edm][]i\KB<878:879>JyɺM8.)&%'+4C཯H7.+*+.4>Sļ~a[[dxdOD=978:@OøE4,(%%(-7Lϸp@4.+*,/7B_o^[]g]MB<8781+'%&*.;ZǴX<2-**-19Hv̾i\[_luWI?;878=Hfν_J@>>BHP^r \ No newline at end of file diff --git a/SOUNDS/TONES/3up.ulaw b/SOUNDS/TONES/3up.ulaw index 7817e9b..253888d 100644 --- a/SOUNDS/TONES/3up.ulaw +++ b/SOUNDS/TONES/3up.ulaw @@ -1 +1 @@ -绬;,%!!%,;;,%!!%,;~;,%!!%,;;,%!!%,;;,%!!%,;~;,%!!%,;~;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;~;,%!!%,;~;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;~;,%!!%,;;,%!!%,;~;,%!!%,;~;,%!!%,;~;,%!!%,;~;,%!!%,;~;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;~;,%!!%,;;,%!!%,;~;,%!!%,;;,%!!%,;~;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;~};,%!!&,@i0% !)<Ƭ9( &3鰥F,"#-Mi0%!)<Ƭ9( &3鰥F,"#-Mi0%!)=Ƭ9( &3鰥F,"#-Mi0%!)<Ƭ9( &3鰥F,"#-Mi0%!)<Ƭ9( &3鰥F,"#-Mi0%!)<Ƭ9( &3鰥F,"#-Mi0%!)<Ƭ9( &3鰥F,"#-Mi0%!)<Ƭ9( &3鰥F,"#-Mi0%!)=Ƭ9( &3鰥F,"#-Mi0%!)<Ƭ9( &3鰥F,"#-Mi0%!)<Ƭ9( &3鰥F,"#-Mi0%!)<Ƭ9( &3鰥F,"#-Mi0%!)<Ƭ9(! &3鰥F,"#-Mi0%!)<Ƭ9( &3鰥F,"#-Mi0%!)<Ƭ9(! &3鰥F,"#-Mi0%!)<Ƭ9( &3鰥F,"#-Mi0%!)<Ƭ9( &3鰥F,"#-Mi0%!)<Ƭ9( &3鰥F,"#-Mi0%!)<Ƭ9( &3鰥F,"#-Mi0%!)=Ƭ9(! &3鰥F,"#-M3# (H2# (H3# (H2# (H3# (H2# (H2# (H2# (H3# (H3# (H2# (H3# (H3# (H2# (H2# (H2# (H3# (H2# (H3# (H2# (H3# (H2# (H3# (G2# (H2# (H3# (H3# (H2# (H3# (H2# (H2#(H3# (H2# (H3# (H2# (H3# (H2# (H3# (H3# (H2# (H2# (H2# (H3# (H2#(H2# (H2# (H2# (H2# (H3# (H2# (H3# (H2# (H3# (H2# (H2# (H3# (H3# (H2# (H3# (H3# (H3# (H2# (H2# (H3# (H3# (H2# (H2# (H3# (H3# (H2# (H2# (H2# (H3# (H2# (H3# (H2# (H3# (H3# (H2# (G2#)? \ No newline at end of file +꿱?1+'%'+1??1+'%'+1?~~?1+'%'+1??1+'%'+1?~?1+'%'+1??1+'%'+1?~?1+'%'+1??1+'%'+1??1+'%'+1??1+'%'+1??1+'%'+1??1+'%'+1??1+'%'+1?~?1+'%'+1?~?1+'%'+1??1+'%'+1?~?1+'%'+1?~?1+'%'+1?~?1+'%'+1??1+'%'+1?~?1+'%'+1?~?1+'%'+1??1+'%'+1?~?1+'%'+1?~~?1+'%'+1??1+'%'+1??1+'%'+1??1+'%'+1?~?1+'%'+1?~?1+'%'+1?~~?1+'%'+1??1+'%'+1?}?1+'%'+1?~?1+'%'+1??1+'%'+1??1+'%'+1?~?1+'%'+1?~?1+'%'+1??1+'%'+1?}?1+'%'+1Fl7+''.@˱>-''+9췫K1(%)2Ql7+%'.@˱>-''+9췫K1(%)2Ql7+%'.B˱>-''+9췫K1(%)2Ql7+%'.@˱>-''+9춫K1(%)2Ql7+%'.@˱>-''+9췫K1(%)2Rl7+%'.@˱>-''+9췫K1(%)2Ql7+%'.@˱>-''+9췫K1(%)2Ql7+%'.@˱>-''+9췫K1(%)2Rl7+%'.B˱>-''+9췫K1(%)2Ql7+%'.@˱>-''+9췫K1(%)2Rl7+%'.@˱>-''+9췫K1(%)2Ql7+%'.@˱>-''+9췫K1(%)2Ql7+%'.@˱>-''+9췫K1(%)2Ql7+%'.@˱>-''+9췫K1(%)2Rl6+%'.@˱>-''+9췫K1(%)2Ql7+%'.@˱>-''+9췫K1(%)2Rl7+%'.@˱>-''+9췫K1(%)2Rl7+%'.@˱>-''+9췫K1(%)2Rl7+%'.@˱>-''+9췫K1(%)2Ql7+%'.B˱>-''+9췫K1(%)2Q9)'-M8)'-M9)'-M8)'-M9)'-M8)'-M8)'-M8)'-M9)'-M9)'-M8)'-M9)'-M9)'-M8)'-L8)'-M8)'-M9)'-M8)'-M9)'-M8)'-M9)'-M8)'-M9)'-L8)'-M8)'-M9)'-M9)'-M8)'-M9)'-L8)'-M8)%-M9)'-M8)'-M9)'-M8)'-M9)'-M8)'-M9)'-M9)'-M8)'-M8)'-M8)'-M9)'-M8)%-M8)'-M8)'-M8)'-M8)'-M9)'-M8)'-M9)'-M8)'-M9)'-M8)'-M8)'-M9)'-M9)'-M8)'-M9)'-M9)'-M9)'-M8)'-M8)'-M9)'-M9)'-M8)'-M8)'-M9)'-M9)'-M8)'-M8)'-M8)'-M9)'-M8)'-M9)'-M8)'-M9)'-M9)'-M8)'-L8)%.E \ No newline at end of file diff --git a/SOUNDS/TONES/4down.ulaw b/SOUNDS/TONES/4down.ulaw index 5f8e807..171ded2 100644 --- a/SOUNDS/TONES/4down.ulaw +++ b/SOUNDS/TONES/4down.ulaw @@ -1 +1 @@ -<++=> &ܤ/',Hølf:.1^-->d(6ޝ%7F..=xѽ>+(7H\!(7뚑.;*ܫ<6?^pOSԷW+"([(*;o*7۟+%?TCLkxN==e2 /@_(6ᛓ#2?'&3᷵]K60>éL#![$(8,9%ۦ3+0M̾_4*.]+,=h)6ݝ':J35FXnƵ:'%4E\ (7蚑 /LolL@JͰR(&[&):w*7!ۡ-#)C]SwnA57`/.?a(6ߜ$5B+*8彽C/,:J ["(8-:'ۨ7/7Td޿[.&+\*+<k)6ܞ)"$"/ޱLNmW>8CȬN&$[. #8X>AYû=-).HVKg[3&"+"31,ƧqIU<)"&?/$V#ULLJ.$#0OO(6XI_d5'"*_%.7*ϩJQ>*#&;4! !INKN/$#.ɡpA*2]I\t7'")O(*=(ߪJOA+#%7:Ϝ"@PJoT0%#-գ9-.eIX:("(F+'F%mKNE,#$4B%;TJg[3&"+"31,ƧqIU<)"&?/$V#ULLJ.$#0OO(6XI_e5'"*_%.7*ϩJQ>*#&;4! !INK~N/$#.ɡpA*2]I\t7'")O(*=(ߪJOA+#%7:Ϝ"@PJoS0%#-գ9-.eIX:("(F+'F%mKMJ2+->Ȯ\=;C\ȻC0*(,6MMAH޵*:?%) 'ע.#/LKAJ׳(?;$*>TCDk1.[)&5^gGAPȮE"$0 ".HLAH޵*:?%) 'ע.#/LKAJ׳(?;$*>TCDk1.[)&5_gHEUͶX;44;H`;D.#);ִTJJPg[?3+&#"%+97"3ȧ1! ,DƯqOIKUwP%.ݪ7$*=ϲRJJQkW>1*%#"&,;ݲ4!!6/ !-I®jNIKVN;/)$"#'.Bɭp-%AL*$2]]LIM\tG7-'$"$)2OH(*]=&(9ߵVJIOc^A4+&#"%+7p:$/ϩ4"+@ʰ}PIJSoT=0*%"#&-=կ1"9e-".MeMILXL:.($"#'/FĬ[+'HF)%4mZKIN^kE6,'#"$)4VN6-++.4>Mf \ No newline at end of file +O??P̹R60;빲D<@[vrMCFmŸA00AƮR.(/p5')=J,(2첫:.4KƷYCCP|R?=Kϸ[4-4k7)*=K+'.5*,CN52>뿻OJSmz`eg?8=k=-->N,'.x4')>K.+5뵮?5:SeW^v|_PPq̾G65EʰT/*0n5')=J+'/9-/GòS<;Hl]JFR׽^9/7k9**=L+%.5(+@M2.:뻵H?F_nI>Cl?/.@ŭP-'.s4')=J-)4첬<05Mɺ\HIYhxM<:I͵X2,2l6()=K+'.󮧭6+-DO75@þVR^yv^U\ƿd=5;j;,,=N,'.|4'*>K.,7뷯A9=Wld|xUJKnȻD42CȯS.)/o5')=J,(09.0JĵV?>LWD@MӺ\6.5j8)*=L+%.5)+AM40<뽸KDKepkC;?k>..?ìO-'.u4')=J.*4봭=48O˽`MPbu^ZtJ97G˴W0+2l5')=J+'/𯨮7+.FR98E^_xgRLW_;29jC69LоhRUiPA=C[g]skH;8?8*'-HF/+/@ټx\eO=8;SðE-'*9ͮg5,-9f^^\C99Fյa2('0a=-+2J˺h[npJ<8>n:+',CK0+.>ὸ\cR>9;NǰI.')7ծ6,-7[ù_]_E99C۷y4('.U>.+0Gλl[k{K<8=a=+'+>ìP0+.=\aU?9:KʲM.'(5ᰧ8,,5Tƹb\yeF:9A湭5)'.MA.+0Cӻq[hM=8=Y?,'+<ȭY4+.:v]_X@99IδV/'(2:-,4Nɹe\sjH;8?8*'-HF/+/@ټz[fO=8;SðE-'*9ͮf5,-9f^^\C99Fյa2('0a=-+2J˺h\mqJ<8>m:+',CK0+.>ὸ\cR>9;NǰI.')7ծ6,-7[ù_]~_D99Cܷy4('.U>.+1Gλl[k{K<8=a=+'+>ìP2+.=\aU?9:KʲM.'(5ᰧ8,,5Tƹb\xdF:9A湭5)'.MA.+0Cӻq[hM=8=Y?,'*<ȭY4+.:w]^\G?ARýkPNWl~WF>=@J__U[ʻ>.)'+4MïS:205=OhWWnҾJ4+'(.?ӵ?402:Hgy[U_Ĺ_9-(',8hI7007AX_VZ˼@/)'*2JǰY;205=NkWViN5+'(.=۶@5029Gb[U]ǹk;.('+6[K8006@TbVXνC0*')0Fʲ^=404ReWXuϽF2*')/Cʹj=404;JmrZUbøX8,'',9F6028C[^UZʻ>.)'+4NïS:215=OhWWnҾJ4+'(.?ӵ~?402:Hgx[U_Ź_9-(',8gI7007AX_VZ˼@/)'*2JǰY;205=MjXVjM5+'(.=۶@5029Fb~\U^ƹk;.('+6[K8016@TbVX~ͽC0*')0Gʲ^=404RfVXtϽF2*')/Cʹj=404;Jmr[XfhNIIN[nÿXC92../4=Nɽe\\brkSH?;98:?MɺK8.*'')-5HۼF7/,+,/6@Xļz`\]f{bOE=:89;ASøE5-)''*.9P͸f@5.,+-09Dfn^\^j\LC=9892+(''*1=aĵT=2-++.2;J˿h]\_nqWJ@<989>JmͼR:/+''(,4C쾰K90-+,.5>Pǽd\\cugRF>:98;@NǹI7.)'').7JպE6.,+-/7A[üu_[]f_ND=9894.++-09Gll^[_kzZKA<989=Gaо[=0+'''+0>lôP;0-+,.4=Mʾg\[aolUI?;98:?KyʻM9.*''(,5DὰI8/,+,.5?Tƽ~b[\dxePF>:89;APŹF5-)'').8MйqA5.,+-08C^q^\^h^MC=989%.ݪ7$*=ϲQJJQkW>1*%#"&,;ݲ4!!6/ !-I®jNIKVN;/)$"#'.Bɭq-%AL*$2]]LIM\tH7-'$"$)2OI(*]=&(9ߵVJIOc_A4+&#"%+7p:$/ϩ4"+@ʰ}PIJSoS=0*%"#&-=կ1"9e-".NeMILXL:.($"#(/FĬ[+'HF)%4mZKIN^kE6,'#"$)4WN7-++.4>MgȻC0*(,6MLAH޵*:?%) 'ע.#/LKAJ׳(?;$*>TCDk1.[)&5^gGAPȮE"$0 ".HLAH޵*:?%) 'ע.#/LKAJ׳(?;$*>TCDk1.[)&5^gHEUͶX;44;H`û=-).HVKg[3&"+"31,ƨqIU<)"&?/$V#TLLJ.$#0OO(6XI_d5'"*_%.7*ϩJQ>*#&;4! !INKN/$#.ɡpA*2]I\t7'")O(*=(ߪJOA+#%7:Ϝ"@PJoT0%#-ԣ9-.eIX:("(F+'F%mKME,#$4B%;TJg[3&"+"31,ƨqIU<)"&?/$V#ULLJ.$#0OO(6XI_d5'"*_%.7*ϩJQ>*#&;4! !INKN/$#.ɡpA*2]I\u7'")O(*=(ߪJOA+#%7:Ϝ"@PJoS0%#-գ9-.eIX:("(F+'F%mKMJ2+->Ȯ\=;C\<+*=> &ܤ/',Hølf:.1^-->d(6ݝ%7F..=xѽ>+(7H\!(7뚑.;*ܫ<6?^pOSԷW+"([(*;o*7۟+%?TCLkyN==d2 /@_(6ᛓ#3?'&3᷵]K60>éL#![$(8,9%ۦ3+0M̾_4*.]+,=h)6ܝ':J35FXnƵ:'%4E\ (7蚑 /LolL@JͰR(&[&):w*7!ۡ-#)C]SwmA57a/.?a(6ߜ$5B+*8佽C/,:J ["(8-:'ۨ7/7Td޿[.&+\*+<l)6ܞ)"$"/ޱLNmV>8CȬN&$\. #8X>AY \ No newline at end of file +ÿWC92../4=Nɽd\\brkSH?;98:?MɺK8.*'')-5HۼF7/,+,/6@XĽz`\]e|bOD=:89;ASøE5-)''*.9P͸g@5.,+-09Den^\^i\LC=989=F\Կa>2+(''+0=`ĵT=2-++.2;J˿h][_nqWJ@<989>JmͽR:/+''(,4C쾰K90-+,.5>Pǽc\\cugRF>:98;@NǹI7.)'')-7JպE6.,+-/7A\üu_[]g`NE=9894.++-09Gll^[_k{[KA<989=Gaо[=0+'''+0>lôP;0-+,.4:89;APŹF5-)'').8MйqA5.,+-08C_q^\^h^MC=989=DYj?2,(''+/<[ȵY=4.++.2:IvͿj][_muXJ@<989=Ihν_KA??CIR_rWF>=@J_^U[ʻ>.)'+4MïS:205=OhWWnҾJ4+'(.?ӵ?402:Hgy[U_Ĺ^9-(',8gI7007AW_VY˼@/)'*2JưY;205=MjWViN5+'(.=۶@5029Fb~\U^ƹj;.('+6[K8006@TbVX~ͽC0*')0Fʲ_=404ReWXuϽF2*')/Cδj=404;JmsZUbøX8,(',9F6028C[^U[ʻ>.)'+4MïS:205=OhWWnҾJ4+'(.?ӵ?402:Hhy[U_Ź_9-(',8gI7007AW_UZ˼@/)'*2JưX;205=MjXVjM5+'(.=ܶ@5029Fb[U^ǹj;.('+6\K8006@TbVXͽC0*')0Fʲ^=404ReWXuϽG2*')/Cʹk=404;Jlr[XfhNIIN[n~PA=C[g]rjH;8?8*'-HF/+/@ٽy[fO=8;SðE-'*9ͮg5,-9e^^\C99FԵ`2('0`=-+2J˺h[mpJ<8>m:*',CK0+.>ὸ\bR>9;NǰI.')7ծ6,-7\ù_]~_D99C۷y4('.U>.+0Gλl\kzK<8=a=+'+>ìP0+.=\aU?9:KʲM.'(5ᰧ8,,5Uƹb\yeF:9A幭5)'.MA.+0Cӻp[hM=8=Y?,'+<ȭY4+.:w]_X@99IδV/'(2:-,4Nɹe\sjH;8?8*'-HF/+/@ٽy[fO=8;SðE-'*9ͮf5,-9f^^\C99FԵ`2('0a=-+2J˺h[npJ<8>n:*',CK0+.>ὸ\cR>9;NǰI.')7ծ6,-7[ù_]_E99C۷x4('.U>.+0Gλl[k{K<8=a<+'+>ìP0+.=\aU?9:KʲM.'(5ᰧ8,,5Tƹb\ydF:9A湭5)'.MA.+0Cӻq[hM=8=Y?,'+<ȭY4+.:w]_\G?ARýkPNWkO?>P̹R60;빲E<@[vrMCFmŸA00AƮQ.(/p5')=J,(2첫:.4KƷYCCP|R?=Kϸ[4-4k7)*=K+'.5*,CN52>뿻OJSmyadg?8=j<-->N,'.x4')>K.+5굮?5:SfW^u|_PPq̾G65EʰT/*0m5')=J+'/ﯩ9-/HòS<;Hl]JFR׽^9/7k9**=L+%.5(*@M2.:뻵H?F^mI>Cl?/.@ĭP-'.s4')=J-)4벬<05Mɺ\HJYhxM<:I͵X2,2k6()K.,7귯A9=Wld|wUJKoȻD42CȯS.)/o5')=J,(09.0JĵV?>LWD@MӺ\6.5j8)*=L+%.5)+AM40<꽸KEKepkC;?k>..?ìO-'.w4')=J.*4봭=48O˽_MPcv^ZtJ97F˴W0+2l5')=J+'/𯨮7+.FR98D^_wfRLW_;29kC69LоhRUi \ No newline at end of file diff --git a/SOUNDS/TONES/Apollo.ulaw b/SOUNDS/TONES/Apollo.ulaw index 568e937..7c0d054 100644 --- a/SOUNDS/TONES/Apollo.ulaw +++ b/SOUNDS/TONES/Apollo.ulaw @@ -1 +1 @@ -*1;' ͣ&;4)!$G.,N#"c*0>% ӣ'86(! %B/+X""W+/B%!ܢ(68' Ť%>1*c"#N,.G$!)4;& ʤ&<3)!$I--L#"m*2=& Σ':5)!$E.,R#"\+/@% !آ(77(! ¥%@/+\"#R,.E$!)5:' Ǥ&=2*m"#L--J$!)3<& ̣&;4)!$G.,O#"c*0>% ӣ'86(! %B/+W""W+/B%!ܢ(68' Ť%>1*c"#N,.G$!)4;& ʤ&<3)!$I--L#"m*2=& ϣ':5)!$E.,S#"\+/@% !آ(77(! ¥%@/+\"#R,.E$!)5:' Ǥ&=2*m"#L--J$!~)3<& ̣&;4)!$G.,O#"c*0>% ӣ'86(! %B/+W""W+/B%!ݢ(68' Ť%>1*c"#N,.G$!)4;& ʤ&<3)!$I--L#"m*2=& Σ':5)!$E.,S#"\+/@% !ע(77(! ¥%@/+\"#R,.E$!)5:' Ǥ&=2*m"#L--J$!)3<& ̣&;4)!$G.,O#"c*0>% ӣ'86(! %B/+W""W+/B%!ܢ(68' Ť%>1*c"#N,.G$!)4;& ʤ&<3)!$I--L#"m*2=& ϣ':5(!$E.,S#"\+/@% !آ(77(! ¥%@/+]"#R,.E$!(5:' Ǥ&=2*m"#L--J$!~)3<& ̣&;4)!$G.,O#"c*0>% ң'86(!%B/+W""W+/B%!ݢ(68' Ť%>1*c"#N,.G$!)4;& ʤ&<3)!$I--L#"m*2=& Σ':5)!$E.,R#"\+/@% !ע(77(! ¥%@/+]"#R,.E$!)5:' Ǥ&=2*n"#M--H$# \ No newline at end of file +ũ/7?,''ѩ+?:.'%«*L41S)%(g.7D+''ة,=;-''ƫ+H5/\(%([/5H+%'ߨ-;=,''ʪ+D7.g(%)S14L*%'.:?+''Ϊ+@9.'%*M22P)%(o.8B+''ө,>:.'%ī*J41W)%(_/5F+''ܨ-<<-''ȫ+F5/_(%)W14J*%'.:>,''̪+B8.o(%)P22N*%'~.9@+''Щ+?:.'%«*L41U)%(g.7D+''ة,=;-''ƫ+H5/[(%([/5H+%'ߨ-;=,''ʪ+D7/h(%)S14L*%'.:?+''Ϊ+@9.'%*M22P)%(o/8B+''թ,>:.'%ī*J41X)%(_/5F+''ܨ-<<-''ȫ+F5/_(%)W14J*%'.:>,''̪+B8.o(%)P22N*%'~.9@+''Щ+?:.'%«*L41U)%(g/6C+''ة,=;-''ƫ+H5/[(%([/5H+%'-;=,''ʪ+D7/g(%)S14L*%'.:?+''Ϊ+@9.'%*N22P)%(o.8B+''ө,>:.'%ë*J41X)%(_/5F+''ۨ-<<-''ȫ+F5/_(%)W14J*%'.:>,''̪+B8/o(%)P22N*%'.9@+''Щ+?:.'%«*L41U)%(g.7D+''ة,=;-''ƫ+H5/\(%([/5H+%'ߨ-;=,''ʪ+D7.g(%)S14L*%'.:?+''Ϊ+@9.'%*M22P)%(o.8B+''թ,>:-'%ī*J41X)%(_/5F+''ܨ-<<-''ȫ+F5/a(%)X14J*%'-:>,''̪+B8.o(%)P22N*%'~.9@+''Щ+?:.'%«*L41U)%(g.7D+''ש,=;-'%ƫ+H5/[(%([/5H+%'-;=,''ʪ+D7/g(%)S14L*%'.:?+''Ϊ+@9.'%*M22P)%(o.8B+''ө,>:.'%ī*J41W)%(_/5F+''ۨ-<<-''ȫ+F5/`(%)W14J*%'.:>,''̪+B8/q(%)R22M*%) \ No newline at end of file diff --git a/SOUNDS/TONES/BeeBoo.ulaw b/SOUNDS/TONES/BeeBoo.ulaw index dfe7801..980bd4c 100644 --- a/SOUNDS/TONES/BeeBoo.ulaw +++ b/SOUNDS/TONES/BeeBoo.ulaw @@ -1 +1 @@ -E74<~."!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,~,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,~,!!,,!!,,!!,,!!,,!!,,!!,~,!!,,!!,,!!,,!!,,!!,,!!,,!!,~,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,~,!!,~,!!,,!!,,!!,~,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,~,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,~,!!,,!!,,!!,,!!,~~,!!,,!!,,!!,~,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,~,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,~,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,,!!,~1)+8MIPgýE6,(%$',;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;~;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;~;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;~;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;~;,%!!%,;;,%!!%,;;,%!!%,;~;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;~;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;;,%!!%,;~J>::=CL[o \ No newline at end of file +~J<:@~~4('11''11''11''11''11''11''11''11''11''11''11''11''11''11''1~1''1~1''11''11''1~1''11''1~1''11''11''11''11''11''1~1''11''11''1~1''1~1''1~1''1~1''1~1''11''11''11''11''1~~1''11''11''1~1''11''11''11''1~1''11''11''1~1''11''1~~1''11''11''11''1~1''11''11''11''1~1''11''11''11''1~1''11''11''11''11''11''1~1''11''11''11''1~1''11''11''11''1~~1''11''11''1~1''11''1~1''11''11''11''11''11''11''11''11''11''1~1''11''1~1''1~1''11''11''1~~1''11''11''11''1~1''1~1''11''1~1''1~1''1~1''11''11''11''11''1~1''1~1''11''11''11''11''11''1~1''1~1''11''11''1~1''1~1''11''1~1''11''1~~1''1~1''1~1''11''11''11''11''11''11''11''11''1~1''1~1''11''11''11''11''11''11''1~1''1~1''1~1''1~1''1~1''11''11''1~1''11''11''1~~7./=QMVk¾J;1-+*,1?~?1+'%'+1??1+'%'+1??1+'%'+1?~?1+'%'+1??1+'%'+1?~?1+'%'+1?~~?1+'%'+1??1+'%'+1??1+'%'+1??1+'%'+1??1+'%'+1??1+'%'+1??1+'%'+1?~~?1+'%'+1??1+'%'+1??1+'%'+1??1+'%'+1?~?1+'%'+1?~?1+'%'+1??1+'%'+1?~?1+'%'+1??1+'%'+1?~?1+'%'+1?~~?1+'%'+1?~?1+'%'+1??1+'%'+1?~?1+'%'+1??1+'%'+1??1+'%'+1?~?1+'%'+1??1+'%'+1??1+'%'+1??1+'%'+1?~?1+'%'+1??1+'%'+1??1+'%'+1??1+'%'+1?~?1+'%'+1??1+'%'+1??1+'%'+1?~?1+'%'+1??1+'%'+1?~?1+'%'+1?~?1+'%'+1??1+'%'+1??1+'%'+1??1+'%'+1??1+'%'+1??1+'%'+1??1+'%'+1??1+'%'+1??1+'%'+1??1+'%'+1??1+'%'+1??1+'%'+1??1+'%'+1??1+'%'+1??1+'%'+1?~?1+'%'+1??1+'%'+1?~?1+'%'+1??1+'%'+1??1+'%'+1?~?1+'%'+1?~?1+'%'+1??1+'%'+1??1+'%'+1??1+'%'+1??1+'%'+1??1+'%'+1??1+'%'+1?~?1+'%'+1??1+'%'+1?~?1+'%'+1??1+'%'+1??1+'%'+1?~?1+'%'+1??1+'%'+1?~ND>>BIP^r \ No newline at end of file diff --git a/SOUNDS/TONES/Beep.ulaw b/SOUNDS/TONES/Beep.ulaw index fb24079..622e502 100644 --- a/SOUNDS/TONES/Beep.ulaw +++ b/SOUNDS/TONES/Beep.ulaw @@ -1 +1 @@ -V=6;gE*#)NE&&EM(%?[)$;+ #7, "3.!!0Ŧ0!!.ͨ3" ,۩7# +;$)[?%(ME&&EM(%?[)$;+ #7, "3.!!0Ŧ0!!.ͨ3" ,۩7# +;$)[?%(ME&&EM(%?[)$;+ #7, "3.!!0Ŧ0!!.ͨ3" ,۩7# +;$)[?%(ME&&EM(%?[)$;+ #7, "3.!!0Ŧ0!!.ͨ3" ,۩7# +;$)[?%(ME&&EM(%?[)$;+ #7, "3.!!0Ŧ0!!.ͨ3" ,۩7# +;$)[?%(ME&&EM(%?[)$;+ #7, "3.!!0Ŧ0!!.ͨ3" ,۩7# +;$)[?%(ME&&EM(%?[)$;+ #7, "3.!!0Ŧ0!!.ͨ3" ,۩7# +;$)[?%(ME&&EM(%?[)$;+ #7, "3.!!0Ŧ0!!.Ω;,,:绶WKPe \ No newline at end of file +[B;?jJ/).SJ+%+JQ-%+E_.%*?/')<1'(9ū4''6ʫ7''4ѭ9('1ޮ<)'/?*%._E+%-QJ+%+JR-%+E^.%*?/')<1'(9ū4''7ʫ7''4ҭ9('1߮<)'/?*%.^E+%-RJ+%+JQ-%+E_.%*?/')<1'(9ū4''7ʫ6''4ѭ9('1ޮ<)'/?*%._E+%-RJ+%+JR-%+E_.%*?/')<1'(9ū4''7ʫ7''4ѭ9('1߮<)'/?*%.^E+%-RJ+%+JQ-%+E_.%*?/')<1'(9ū4''7ʫ6''4ѭ9('1ޮ<)'/?*%._E+%-RJ+%+JQ-%+E_.%*?~/')<1'(9ū4''7ʫ7''4ҭ9('1߮<)'/?*%._E+%-RJ+%+JR-%+E_.%*?~/')<1'(9ū4''6ʫ7''4ѭ9('1߮<)'/?*%.^E+%-RJ+%+JQ-%+E^.%*?/')<1'(9ū4''7ʫ7''4Ӯ?11>꿻[OVi \ No newline at end of file diff --git a/SOUNDS/TONES/BlastOff.ulaw b/SOUNDS/TONES/BlastOff.ulaw index d6eba74..7f80766 100644 --- a/SOUNDS/TONES/BlastOff.ulaw +++ b/SOUNDS/TONES/BlastOff.ulaw @@ -1 +1 @@ -E6-**.:6(!!(66(!!(6~6(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!)8K?>AJWm[AP~16.'~66!((!66!((!66!((!66!((!66!((!66!((!66!((!66!((!66!((!66!((!66!((!66~!((!66~!((!66!((!66!((!66!((!66!((!66!((!66!((!66!((!66!((!66!((!66!()#=*@8?W_X[P@1*'~)66(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!~(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(~!#.=@6~8A_~E5-**.:~6(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!(6~6(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!(6~6(!!(66(!!(66(!!(66(!!(66(!!(66(!!(66(!!)8K@>AJWl \ No newline at end of file +J;2./4>;-'%'-;~;-'%'-;~;-'%'-;;-'%'-;;-'%'-;~;-'%'-;;-'%'-;;-'%'-;;-'%'-;~;-'%'-;;-'%'-;;-'%'-;~;-'%'-;;-'%'-;;-'%'-;;-'%'-;~;-'%'-;;-'%'-;;-'%'-;;-'%'-;;-'%'-;~;-'%'-;;-'%'.=OEDGN[p~_GVƽ~7;Ʈ4,;%;'--';%;'--';%;'--';%;'--';%;'--';%;'--';%;~'--';%;~'--';%;'--'~;%;'--'~;%;'--';%;'--';%;'--';%;'--';%;~'--';%;'--';%;'--';%;'--';%;'--';%;'--';%;'--';%;'--';%;'-.)B.F=E[d\_VF7.´,~.;;-'%'-;;-~'%'~-;;-'%'~-;;-'%'~-;;-'%'-;;-'%'-;;-'%'~-;;-~'%'~-;;-'%'-;;-'%'-;;-'%'-;;-'%'-;;-'%'~-;;-'%'-;;-'%'-;;-~'%'-;;-'%'~-;;-'%'-;;-'%'-;;-'%'-;;-'%'-;;-'%'-;;-'%)4BF;=Gd~J:2./4>~;-'%'-;;-'%'-;;-'%'-;~;-'%'-;;-'%'-;~;-'%'-;;-'%'-;~;-'%'-;;-'%'-;}~;-'%'-;;-'%'-;;-'%'-;;-'%'-;;-'%'-;;-'%'-;;-'%'-;}~;-'%'-;;-'%'-;;-'%'-;;-'%'-;;-'%'-;;-'%'-;;-'%'.=~OFDGN[n \ No newline at end of file diff --git a/SOUNDS/TONES/Boop.ulaw b/SOUNDS/TONES/Boop.ulaw index 2e03c0c..75b8028 100644 --- a/SOUNDS/TONES/Boop.ulaw +++ b/SOUNDS/TONES/Boop.ulaw @@ -1 +1 @@ -½H7-)&',7\?-% "(1M®E/&!!&/EɰM1(" %-?ӳ[5)" $+;緪9+# #*7g=,% "(3SB.&!!'0IůI0'!!&.BͱS3(" %,=۵g7*# #+9;+$ ")5[?-% "(1M®E/&!!&/EɰM1(" %-?ӳ[5)" $+;緪9+# #*7g=,% "(3SB.&!!'0IůI0'!!&.BͱS3(" %,=۵g7*# #+9;+$ ")5[?-% "(1ME/&!!&/EɰM1(" %-?ӳ[5)" $+;緪9+# #*7g=,% "(3SB.&!!'0IůI0'!!&.AͱS3(" %,=۵g7*# #+9;+$ ")5[?-% "(1M®E/&!!&/EɰM1(" %-?ӳ[5)" $+;緪9+# #*7g=,% "(3SB.&!!'0IůI0'!!&.BͱS3(" %,=۷oI><=BKYn \ No newline at end of file +M<2.+,1<_±E2+'%(-7RȴJ5+'%'+5JͷR7-(%'+2Eع^:.(%'*/?뼮>/)'%)/~?/*'%(.:^±E2+'%(-7RȴJ5+'%'+5JͷQ7-(%'+2Eع_:.(%'*/?뼯~>/)'%)/?/*'%(.:^±E2+'%(-7RǴJ5+'%'+5JͷR7-(%'+2Eع^:.(%'*/?꼮>/)'%)/?/*'%(.:^±E2+'%(-7RȴJ5+'%'+5JͷR7-(%'+2Eع^:.(%'*/?꼮>/)'%)/C(#6˪W, /ﮟ1!+O8$'?A($7ɪS, 0讟0 ,S7$(A?'$8ǩO+ 0߭/ ,W6#(C>'%9ũM+!1ۭ/-[5#)E=&%:èK*!2׬o.-_5")G<&%;I*"3Ӭh..g4"*I;&&(6,/1+9'B$ʝT 韓 R$A'8+0/,7(?$ƝN!ܟZ#E':*2.-5)=%œJ"Ԟie"I&<)4-.3*;&F#Ξ\{!M%>(6,/1+9', \ No newline at end of file +ĵF7.*'%'),4?_ʹM:/+'%'(+02,)'%'*.7GxC5.*'%')-5AmƷJ8.+'%'(,2=Z̹O;0+(%%(+/:Nս[>2,('%'*.8HsC5-)'%')-5CrƶI8.*'%'(,2>\˹N;/+(%%(+0;OӼZ=2,('%'+.8IῴnA5-)'%'*.5CxĶH7.*'%'),2>]ʹM:/+'%%(+1;PҼX=2,('%'+.9J߿kA5-)'%'*.5C;.(%(.;;.(%(.;;.(%(.;;.(%(.;;.(%(.;;.(%(.;~;.(%(.;~~;.(%(.;~;.(%(.;;.(%(.;;.(%(.;~;.(%(.;~;.(%(.;~;.(%(.;;.(%(.;;.(%(.;~;.(%(.;~;.(%(.;;.(%(.;;.(%(.;~;.(%(.;;.(%(.;;.(%(.;;.(%(.;;.(%(.;~;.(%(.;~;.(%(.;~;.(%(.;;.(%(.;~;.(%(.;;.(%(.;~;.(%(.;;.(%(.;~;.(%(.;~;.(%(.;;.(%(.;;.(%(.;;.(%(.;;.(%(.;~;.(%(.;;.(%(.;;.(%(.;~;.(%(.;;.(%(.;;.(%(.;;.(%(.;;.(%(.;~~<.(%(.;;.(%(.;;.(%(-ᯨT2(%+9ݲe4)%*6󵩥6*%)4d9+%(0U<+''/L?-''.FE.''-@ȮK.''+=ίS0(%+9ٲ_4)%*7쵩5*%)4j9+%(2X<+%'/N>,''.GC.''-AƮI.'',=ͯP0(%+:ְ\2(%*8崩s5)%)5q8*%(2[;+%(0O=,''.IA-''.CĮH.'',>ˮN/'%+;ӰY2(%+9ߴk5)%*5~7*%)4_:+%(0R=,''.J@-''.DîF.'',?ʮM/''+<аV0(%+9ܲe4)%*6󵩥6*%)4d9+%(0U<+''/L?-''.FD.''-@ȮK.''+=ίS0(%+9ٲ_4)%*7뵩5*%)4j9*%(2X<+%'/N>,''.GC.''-AƮJ.'',=ͯP1(%+:ְ\2(%*8崩t5)%)5q8*%(2[;+%(0O=,''.IA-''.CĮH.'',>ˮN/'%+;ӰY2(%+9ߴl5)%*5}7*%)4_:+%(0R=,''.J@-''.EîF.''-?ɮM/''+<@ \ No newline at end of file diff --git a/SOUNDS/TONES/Chord3up.ulaw b/SOUNDS/TONES/Chord3up.ulaw index 04d358e..9fdf5d5 100644 --- a/SOUNDS/TONES/Chord3up.ulaw +++ b/SOUNDS/TONES/Chord3up.ulaw @@ -1 +1 @@ -;D.#);ִTJJPg[?3+&#"%+97"3ȧ1! ,DƯqOIKUwP%.ݪ7$*=ϲQJJQkW>1*%#"&,;ݲ4!!6/ !-I®jNIKVN;/)$"#'.Bɭq-%AL*$2]]LIM\tH7-'$"$)2OH(*]=&(9ߵVJIOc_A4+&#"%+7p:$/ϩ4"+@ʰ}PIJSoT=0*%"#&-=կ1"9e-".NdMILXL:.($"#'/FĬ[+'HF)%4mZKIN^kE6,'#"$)4VN7-++.4>MgȻC0*(,6MLAH޵*:?%) 'ע.#/LKAJ׳(?;$*>TCDk1.[)&5^gGAPȮE"$0 ".HLAH޵*:?%) 'ע.#/LKAJ׳(?;$*>TCDk1.[)&5^hHEUͶX;44;Haû=-).HVKg[3&"+"31,ƨqIU<)"&?/$V#ULLJ.$#0OO(6XI_e5'"*_%.7*ϩJQ>*#&;4! !INKN/$#.ɡpA*2]I\t7'")O(*=(ߪJOA+#%7:Ϝ"@PJoS0%#-գ9-.eIX:("(F+'F%mKNE,#$4B%;TJg[3&"+"31,ƧqIU<)"&?/$V#ULLJ.$#0OO(6XI_e5'"*_%.7*ϩJQ>*#&;4! !INKN/$#.ɡpA*2]I\t7'")O(*=(ߪJOA+#%7:Ϝ"@PJoS0%#-ԣ9-.dIX:("(F+'F%mKMJ2+->Ȯ\=;C\ \ No newline at end of file +¾WB81...2:879>LȹJ7-)&%(,4GڻE6.+*+.5?Wüy_[\e{aNC<978:@R·C4,(%&).8O̷f?4-+*,/8Cdm][]i[KB<878:879>JyɺM8.)&%'+4C߽H7.+*+.4>Sż`[[dxdOD=978:@OøE4,(%%(-7Lϸp@4.+*,/7B_o^[]h]MB<878;CX׿j>1+'%&*.;ZǴX=2-**-19Hw̾i\[_ltXI?;878>BHP^rVD=Ҵ>2/19GgxZT_ø^8,'&+7fH6//6@W_TYʻ?.(&)1IůX:1/4Ҵ>2/19GfxZT_ø^8,'&+7gH6//6@V_UYʻ?.(&)1IůW:1/47)%,GE.*.?ؼz[eN=7:R¯C,%)8̭f4+,8e]]\B88EӴ`1'&/_<,*1Iʹg[moI;7=m9*%+BJ/*.=༷[bP=8:NƯH-%(6Ԯ5+,6Z¸_\_C88B۶x2'&.T=-*/Fκk[j{J;7=`<*%*=«O1*-<[`T>89JɱM.&'4௦7++4Sĸa[ycE98@帬4(%-L@.*/BҺp[gM<7+%*;ǬX2*-9v\_W?88HͲU.&'19,+2Nȸd[rjG:7>7)%,GE.*.?ػy[eN=7:R¯C,%)8̭f4+,8e]]\B88EӴ_1'&/_<,*1Iʹg[mpI;7=m9*%+BJ/*.=༷[bP=8:MƯH-%(6Ԯ5+,6[¸_\_C98B۶x2'&.T=-*/FκlZk{J;7=_<*%*=«O/*-<\_T>89JɱM.&'4߯7++4TŸa\xcE98@丬4(%-L@.*/BҺpZhM<7+%*;ǬX2*-9w\^\F>@Q¼jONVk \ No newline at end of file diff --git a/SOUNDS/TONES/Comet.ulaw b/SOUNDS/TONES/Comet.ulaw index f84d2dd..e06bb6b 100644 --- a/SOUNDS/TONES/Comet.ulaw +++ b/SOUNDS/TONES/Comet.ulaw @@ -1 +1 @@ -֧&&&&}&&~&&~&&~&&~&&~&&~&&~&&~&&&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&~&&➒'&55}&&55~&&56~&&56~&&55~&&55~&&55~&&55~&&55&&55~&&56~&&55~&&56~&&55&&55~&&55~&&55&&55~&&55~&&55~&&55~&&55~&&55~&&55&&~66 \ No newline at end of file +缭;.(%(.;~;.(%(.;~;.(%(.;;.(%(.;;.(%(.;;.(%(.;;.(%(.;;.(%(.;~;.(%(.;~~;.(%(.;~;.(%(.;;.(%(.;~;.(%(.;;.(%(.;~;.(%(.;~;.(%(.;~;.(%(.;~;.(%(.;;.(%(.;;.(%(.;~;.(%(.;;.(%(.;~;.(%(.;;.(%(.;;.(%(.;~;.(%(.;~;.(%(.;;.(%(.;;.(%(.;~;.(%(.;~;.(%(.;;.(%(.;;.(%(.;~;.(%(.;;.(%(.;;.(%(.;;.(%(.;;.(%(.;;.(%(.;~;.(%(.;;.(%(.;~;.(%(.;;.(%(.;~;.(%(.;};.(%(.;;.(%(.;;.(%(.;;.(%(.;~;.(%(.;~;.(%(.;;.(%(.;~;.(%(.;;.(%(.;;.(%(.;~;.(%(.;;.(%(.;~;.(%(.;;.(%(.;~;.(%(.;~;.(%(.;;.(%(.;;.(%(.;~;.(%(.;;.(%(.;~;.(%(.;~;.(%(.;;.(%(.;;.(%(.;;.(%(.;;.(%(.;;.(%(.;;.(%(.;;.(%(.;;.(%(.;;.(%(.;~;.(%(.;~;.(%(.;;.(%(.;;.(%(.;~;.(%(.;~;.(%(.;;.(%(.;;.(%(.;;.(%(.;;.(%(.;;.(%(.;~;.(%(.;~;.(%(.;~;.(%(.;~;.(%(.;;.(%(.;~;.(%(.;~;.(%(.;;.(%(.;;.(%(.;;.(%(.;;.(%(.;~;.(%(.;;.(%(.;~;.(%(.;ﴨ<+%+;ʮ2('.JJ.'(2;+%+;ʮ2('.IJ.'(2~;+%+;ʮ2('.JJ.'(2;+%+;ʮ2('.JJ.'(2;+%+;ʮ2('.JJ.'(2~;+%+;ʮ2('.JJ.'(2;+%+;ʮ2('.IJ.'(2~;+%+;ʮ2('.JJ.'(2;+%+;ʮ2('.JJ.'(2~;+%+;ʮ2('.JJ.'(2;+%+;ʮ2('.JJ.'(2;+%+;ʮ2('.JJ.'(2~;+%+;ʮ2('.JJ.'(2~;+%+;ʮ2('.JJ.'(2~;+%+;ʮ2('.IJ.'(2;+%+;ʮ2('.JJ.'(2;+%+;ʮ2('.JJ.'(2;+%+;ʮ2('.JJ.'(2;+%+;ʮ2('.JJ.'(2;+%+;ɮ2('.JJ.'(2;+%+;ʮ2('.JJ.'(2;+%+;ʮ~2('.JJ.'(2;+%+;ʮ2('.JJ.'(2;+%+;ʮ2('.JJ.'(2;+%+;ʮ2('.JJ-''4 \ No newline at end of file diff --git a/SOUNDS/TONES/Duncecap.ulaw b/SOUNDS/TONES/Duncecap.ulaw index 8375fa4..745b11e 100644 --- a/SOUNDS/TONES/Duncecap.ulaw +++ b/SOUNDS/TONES/Duncecap.ulaw @@ -1 +1 @@ -ʼG-!,p<$.lG.&""&-Ȭ0  5,0,0.!4Ȩ7'"+>ҴI;547=H[aZ[nȽ^Y¼|yXA70..4@A+!#0쮟:"*𩛔7(8)p<$.lG.&""&-Ȭ0  5,0,0.!4Ǩ7'"+>ӴI;547=H[aZ[nȽ^Y¼}yXA70..4@A+!#0쮟:"*𩛔7(8)p<$.lG.&""&-Ȭ0  5,0,0.!4Ǩ7'"+>ӴJ;547=H[aZ[nȽ^Y¼}yXA70..4@MA+!#0쮟:"*𩛔7(8)p<$.lG.&""&-Ȭ0  5,0,0.!4Ǩ7'"+>ӴJ;547=H[aZ[nȽ^Y¼}yXA70..4@MA+!#0쮟:"+񬞚I5..2;;?M῰c3%!.q/&H:%+BƮZ@968@) +?ϳgI@?BJYxzTC91-,-2>q6%(G8!"9J, ",=ܹxTMOZN=2,)()-9\9%%>=$!5ǨW/$$-=񾲭de¿L9.(%#%)3O<&"8G&1ԫo4(! &.=mŹüK6+%  &.F«A'3ȦT).񮡛:+%!!$)0?aͿutL4)""+>ǫJ(.թw,-]?/)&&(-5B^iYXdǺO3''9άY*+/,NG4-**,1:G_dOIFJXµV3&$3ݭ,)U5"+GO:2//29AOfgQF>;;?M῰d3%!.q/&H:%+BƮZ@968@) +?ϳgI@?BJXyzTC91-,-2>q6%(G8!"9J, ",=ܹxTMOZN=2,)()-9\9%%>=$!5ǨW/$$-=񾲭de¿L9.($#%)3O<&"8F&1ԫo4(!!&.=mŹüK6+%  &.F«A'3ȦT).򮡛:+%!!$)0?aͿutL4)""+>ǫJ(.թx,-]?/)&&(-5B^iYXdǺO3''9άb:.++.4>Mf \ No newline at end of file +ZA70..4@yO9/,,.5CwƹZC;88;AOxn^[[^ivqcYSOOVeO@9558?RF6.++.6JԹ@0*''+2Fӷ@/*''+2FԸC4-*+.7I۽K<5248?Rɾ[NJIKP[jnjjxmOE=;;>IdҿcA5.-.2=[ɷ_;.*')-8TƲ_9-(%',7SƲc;.*(*.9Tʶj@5/./6@[ҿsMC>>@GRi~|hUKFCCITU?70/29FõN8.*)+0>K5+'').=L5,('*/=yO9/,,.5CvƹZC;88;AOym^Z[_iwocYSOOVeO@9558?RF6.++.6JԹ@0*''+2Fӷ@/*''+2FոC4-*+.7IڽK<5248?Rɾ\NJIKP[joikxmOD=;;>Idҿc@5.-.2=[ɷ^;.*')-8TƲ_9-(%',7SƲc;.*(*.9Tʶj@5/./6@[ҿrMC>>@GRi|hUKFCCITU?70/29FõM8.*)+0>K5+'').=L5,('*/=yO9/,,.5CvƹZC;88;AOxm^Z[^ivqcYSOOVdO@9558?RF6.++.6JԹ@0*''+2Fӷ@/*''+2FԸC4-*+.7IڽK<5248?Qɾ\NIIKP[k~oikwmOE=;;>IdѿcA5.-.2=[ɷ^;.*')-8UƲ_9-(%',7SƲc;.*(*.9Tʶj@5/./6@[ҿqMC>>@GRi~}hUKFCCITU?70/29FõM8.*)+0>K5+'').=L5,('*/=yO9/,,.5CvƹZC;88;AOyn^Z[_ivqbYSOOVdO@9558?RF6.++.6Jչ@1*''*2Fӷ@/*''+2FԸC4-*+.7IڽK<5248?Rɾ\NJIKP[jojjxmOD=;;>Idҿc@5.-.2=Zɷ_;.*')-8UƲ_9-(%',7SƲc;.*(*.9Tʶj@5/./6@[ҿrMC>>@GRi}}hUKFCCITU?70/29FõM8.*)+1?[JCCGO\pÿN>5/--.5@_ͼZIA>>@FMZnoa[Y\hfH;4/..29H@2+'%'+0=fôJ8/,++.5?ZҿaNGEDGMUarrcYRNNS_ƽoH:2.,-/7CzõE4,(%'*/;[ȵN:1-,,.5?VûiTMJLOW_n}~n_UMJGHMXûI:0-++.4?eǵH5,(%'*.9Q̸T=4.-.16?SȽs[TSV\i|}eWMGA@AGRyJ:0,++,2=ZʷL7-)'').8MҺ\@60./28@P|e_ai_PG@===AMkM:/+*)+/:R͸P9.*'').7JڽgD940049APpq^MC=:9:=HaӿO;/+)(*.8LҹZ;/+'')-5F忴yI=7446;CPw]J?:656;CYֿU<0+(')-5Hۻe=0+((*-5C÷M?:779=FSn{z^I=84248?Rڿ\=1+''(,4C潰|@4,*)*-5AlȹSD=;;=AJVmtihp`H<50/050+'''+2?D5.+*+.5@_ͼZIA>>@GMZmpa\Y\hfH;4/..29Hµ@2+'%'+0=fôJ8/,++.5?ZҿaNGEDGMU`sqcYRNNS_ƽpH:2.,-/7CyõD4,(%'*/;ZȵM:0-,,.5?VûjTMJLOW_n~}o_UMJGHMXûI:0-++.4?eƵH5,(%'*.9R̸T=4.-.06?SȽr[TSV\h|}eWMFA@BGRx¹J:0,++,2=ZʷL7-)'').8MҺ\@60./28@P|e_`j_PG@===AMkM:/+*)+/:R͸P9.*'').7JڽgE940049APpq^MC=99:=HaӿO;/+)(*.8LҹY;/+'')-5F忴xI<7447;CPw]J?:656;CYֿU<1+(')-5Hۻe=1+((*-5C÷M?:779=FSo{{^I=84248?Rڿ\=0+''(,4C潰|@4,*)*-5AlȹSE=;;=AJVmtihpaH<50/05404LL>٬=)!-;),.,Y~˾Y,.,);-!)=>LL>٬=)!-;),.,Y̾Y,.,);-!)=>LL>٬<)!-;),.,Y̾Y,.,);-!)<>LK>٬<)!-;),.,Y̾Y,.,);-!)=>LK>ڮB'14*FGS \ No newline at end of file +WB=HM?BS_mҿR6.4_?*%.<**6ߴH:@kȾ^OUidG<;@X\]oJ<7:Jδ<+%(4O2+,4Nʺ\]oJ<7:Jδ<+%(4O2+,4Mʺ\]oJ<7:Jδ<+%(4~O2+,4Mʺ\]~qJ<7:Jʹ<+%(4O2+,4Nʺ\]pJ<7:Jδ<+%(4O2+,4Mʺ\]~pJ<7:Jδ<+%(4O2+,4Nʺ\]oJ<7:Jʹ<+%(4~O2+,4Mʺ\]~pJ<7:Jδ<+%(4O2+,4Mʺ\]pJ<7:Jδ<+%(4O2+,4Mʺ\]pM?=@RXLMVkN@<:=CR~\TYν=.)&'-;~?4//5=N\TYν~=.)&'-;~?4//5=N\TYν~=.)&'-;?4//5=N\TYν=.)&'-;?4//5=N~]TYν=.)&'-;?4//5=N\TY~ν=.)&'-;~?4//5=N\TYν~=.)&'-;?4//5=N\TYν=.)&'-;?4//5=N~\TYν=.)&'-;?4//5=N\TZýPHDHN\olIJؽL:KŻFBih?Bϴ?-=.'N~(*ͧ@)6=4O¿P]]PO4<6)@*(M'.<-?B?hh?Bδ?-<.'M(*Χ@)6<4O¿Q]]QO4=6)@*(N'.=-?B?h~h?Bϴ?-<.'M(*Χ@)6=4O¿P]]QN4<6)@*(N'.=-?B?hh?Bδ?-=.'N(*Χ@)6=4N¿P]\QN4<6)@*(N'.=-?B?hh?Bδ?-=.'M(*Χ@)6<4O¿P]~]PU;E˺H=XYc \ No newline at end of file diff --git a/SOUNDS/TONES/NBC.ulaw b/SOUNDS/TONES/NBC.ulaw index 5ec0403..1f466f5 100644 --- a/SOUNDS/TONES/NBC.ulaw +++ b/SOUNDS/TONES/NBC.ulaw @@ -1 +1 @@ -;;)$?>$1˧i+)T5 ":G&-ݪ.&F:"4ĦV)+e1$=@%/Ϩ,(M7!!8L(,/%B=#2ȧ_**Y4#;E&.٪-'I9" 6¥R)+o0$??%0ͨs,)Q6!"9J'-㫝.&E<# 4Ƨ[*+_3$=C&/ԩ-(L8""7N),0&A>%2˨h+*V5!#;H'.ݫ.(H;$!6ŧW*,h3 %>B&1Ъ-)O8"#9M).쬞0'D>%!4ɨ_,+\5"%=F(/٫.)K;$#8çS*-t3!'AA'!3Ϊp-+T8#%;K)/䭞0 )H=&#7ȩ\,-b5#'?E(!2֬/+N;%%:èP+/3")E@(#6ͫh.-Z8$'=J*!1ޭ1!+K='%9ǪX- .l6$)BE)#5Ӭ/!,S;&'<©O,"1쯡4#+H@)%8̬a.!!._9&)@J+$4ۮ2# -N>('<ǫV.!#1y7&+FE+&8ѭp1#".Y<()?ëN-!%4氣5%!-LA*(;̭^/#$1g:( +DJ-!'8ٯ4%#/T>**>ȬT/#&48("-JF,!);Яj3&%1^=* !,CĬN/$(8Ღ7($/OB,"!+>̮\2&'5p;* $.IJ.$!*;ز|6(&2Y?,##-BɮT1& )8:*!&0NG.%#,>ѱe5(  (6e>,#%/HƮN1'#+;ߵ9*" (3VD.%%.Bͱ[5)!#*9}=,$!'1MîK1'!%->صr9+##*7_B.& !'0GʱU5)# %,<鹫=-% #*5SI1(""'/Bҵc9+% !%,:mA/'" #)3LȱO5*$! "'.?޹<-'" !%,8[G2)$!!$)2Hε[9,&"!#'.=@/($""&,7RƲM5+&#"%)1Cٹm<.($#$(.;fF3*&#$&,6L̶W9-($$%*0@輮?0*&$%(.:ZųL6,'%%',5HԹcwE4,'%&).9Q˷S9.)&&(,4E߼|?2+(&'+0=bŴK7-)'').8MѺ]=0+('),4B񿲬E5-)((+0YϼW>5.,,.2;LwF91---08DjʻO=4/--/5>T׿_B81../3;JǺK<4/./29C_ϾV@71//16>PùlG;40/05720049C[^E:51138?OȼL>73236FTýSF>;::=CNjȿ^KA=;;=AJ\þoQF?<<=?HT}ZKB>==?EOfĿfOG@>>?DL[¿}XKD???CJUr`OHC@@CIPcnVLFCBDHN\]OIFDEHMWmiVMIFFHLTcy]QLIHILR^{fWOLJJMQ[lp]TNLLMQYfeYSONORXawn_XSQQTY_nyf]XVUVZ_jnc]ZYY\_iwwjc_]]^bir~qjfccdgkr}yqnkkkmou{~{{yz{{}~Ź7'*T%=)5-.3*<&I"Ԟl`"F&:*2/-6(?%ƝO! T$A(8,/1+9'D#̞Z !L%=)5-.3*<&I"Ԟka#G';+2/-6)?%ǝO! U$A(8,01,9(D$̞Z "M&>*5..4*<'J#՟k b#G';+3/-7)?&ǞO"!V%B)9-12,:(E%͞[!#M&>*6./5+='žJ$՟k! c$H(<,40.8*@'ȞP#ᡖ" W&C*:-23-;)F&͟[ "$N(?+7/06,>)ÞK%֠l""d&I)=-51/9+A(ɟQ!$ᢗ$!X'E+;.44.<+G'Ρ\"$&!O)A,9027-?*şL!'עl$$f'!K+>.730:-C )ʡS#&⤙&#Z)!G,2882?!.ģJ$+ѥ^'()&T,#E/!<57;!1C#-ɤO&+ڧm((i+&N.$B2";8  6>#0¤H%-ͦW(+橝*(]-&K0$@5 ":;" 5A%0ǦL'-Ԩ_)+,)V.&H3 $?8"#9=$!4F& 0˨R)-ܪn++k.)P1 'F6"%>;$#9@&"4ŧJ(!/ϩY+-謟-+_/!)M4"(D8$&==&$8E(#4ʩN*"0׫b, !./! ,Y2#*K7$(B;&'<@(%8ũI* $4ΫU,!#0ޭo."".m1#!,U5%!+I9' )A>( (ص]7,*.<縭t9-*-9s<.+-7]?/+,6SD1,,4LƲI3,,2G̴N5-,1CӶX8.,0?ݹe:.,/=ﻯ527D쿶wA636Aw÷E836?eǸI946>[˺L;56=UμQ<6676;Lۿ_@86;J¹lC97;GźG;7:EqȻJ<8:Cd̽M=9:B\ϾQ?::@WWA;:?R»]D<;?OżfG=;?MȽsI><>K˾L?<>JnOA=>He½TC>>G^ľYF??FZǿ^H??FWeJA?ETmMC@EQ{OEAEO{SGCENnWIDFNh[KFFMb_MGGM^fOIHM\lRJIM[uVLJMYYNKMXy]OLNXp`RNOWleVOOWijYRQXgn\TSYfu^WVZe|bZX[eg]Z\e{k_]^fxnd_`hvtidejuxmiimv|rnnpy~zxyz}ɺM."&E[$1*)͢4"QE 9'-.&류:CU#3**ʡ2#WB;&.-'ग9 FP"4)+ǡ1$\?>i%/,(ԣ6"LJ!7(, /%r=?_$1+)ϣ5#OG!9(-.&< BY$3+*͢4$TE!:'..'祘:!ET$4*+ʢ3%ZB <'/.(ޥ9"HO$6*,Ǣ2&_@ >q'0-)٥8#KM#8*-Ţ1'j? !?f&2-*ԥ7$NJ#9).â0({> "B]&4,+ϥ7%RH#;)/0)祥= #EY&5,,ͥ6&XF#!=)0/*娚< $HT&7,-˥5']D#">~)2/+ݨ;!%KP& 9,.ɥ5)fB$#@m)4/,٨:!&NN&!;,/ǥ4*pA$$Dd) 6/-ը:!(RL'#=,1ť4+?$&G])!8/.Ѩ9")XJ'$>, 3Ħ4 ,쫝?%'JZ*#://Ψ9"*]I'%@,!5æ4!-䫞>%(LV*$;/ 1ͩ9#+dG('Cx-#7§4!.ޫ>&*OS*&=/ "3̩9$-lF((Gl-$94"!0۬>&+TP+'?/!#5ʪ9% .zE)*Id- &;4#"2ج>'-YN+)B0"%8ʪ9&"/E*+L_.!(=5$$4խ>(!.]M, *E1#':ɫ9'$1쯣D*!-O\.")?5%&7ӭ>)#/dM-"!,H2%(<Ȭ:(&4氤D+!#.SZ/$!+A6'(9Ѯ>*!%2kL-##-Kt3&!*=ȭ:)! '6ᱦD,#%/XX0%#,E7(!"*;Я>+# '4tL.% %/Ml4'! #,?Ȯ;*# ")9޳E-% !'2\W1'!!%.H8)#!$+=ϰ?,$!#)7L/'""'1Ph5)#"&.Cɯ<,%"$+;ݴE.&#$)5`V3)$#'0K®9+%#&-?ϲ?.&$%+9L1($%)4Ud7+%$(/Fɰ=-'%'-=۶F/(%&+8gU5*&&*3Mį;,'&(/BϴA/)&(-<M3*''+7Yb9,('*2Iʳ>.)')/?۸G2*'(-:mU7,((,6Qű}<.)(+2FжC1+(*/>뻮M6,)*.:]`:.*),6L˵?0+*,2CۺI5,*+/=sV9.++.9UǴu>0,+-6IѸE4-+,2A轰N8.,,04//25005?^˺nC7104868>NǼVA:78=Ir̾cF<88:8;BTƼSB;9;?N˿]F=:;>Ji¼nK?;;>G[ǾQC=;=DTZG><=BNxľfKA==AKdȿ|PD?>@I[¾XH@>@GTſ`LC?@FOnoPGAAEMaWJDBEK[^MFCEJV|jRIEFJRk{XLGGIPa^OJHJO]gTLJJNYtsZOLKNWj_SNMNVdgXPNOU_o\TPQU^r|bYTSV]li]XVX]ioa[YZ^g{zh_\\_gune`_bhqtkfefjr{plkknt|~yutuxz~ \ No newline at end of file +N=4-+*+.9SʶR9.)'%(,5Fݼs?0+'%'+0=eôJ6-('').8MϹZ;/*'%'+2A쾰C4+'%'*.;YȵM8.)''(-5I׻g=0+'%'+0?qF5,(%').9PͷU:.*'%(,4EὯ@2+'%'+/=_ĴK7-)'')-7Lҹ^=/+'%'+2@E4,(''*.:VʶP9.)''(-5Gۼn>0+'%'+0>iôI5-('').9NιX;/*''(,4C龰A4+(''+/<[ǵM8.)'')-6Jֺc=0+'''+2?xF5,(''*.9S̷S:.*''(,5F߽{@2+(''+0=bŴJ7-)'').8Mй\0+('(+2?nôH5-)''*.9PιW;/+''(,5D彰A4,(''+0=^ƵL8.*''*.8KԺ_=1+('(,2@F5-)''+/;U˷R:.*'')-5Gݽt?2+('(+0>gŵJ7.*''*.9Nй[2+('),2@rôH6.*'(+/:R͹V;/+('*-5G⾲A4,)'(+1=aƵL8.*((+.9Mӻ_=0+)')-4CF5-*((+02,)(*-4AzõH7.+))+14.+++.7FF7.+++.4?]˹P<2-++,0:MھhA5.+++.6CwƷJ90,++-2=VϼX=4.++,/9JD7/,++.5@dʹN;2-++-25/.-.4=NmD90.-.29GqɺM=4.../6?WӾ\A70...45/../5>ReE92../4;IȺL=5/..28A\оY@70..05=NĹtH;4/./4:Fm̽P>60..27@W_E92/.05=LǻK=50./49DaϾV@82//27?RùkG;40/0562//49C[\C941/27>Nǻ~J=52/05;GiξS@940049AVùeG;50026=LʽM>72025;F_ZC:52049@RƻqJ=62026=JqξR@94225:E[ú_F<52249?NʽM>84246=HgWC:5425:CVƼjJ=74249>M~ͿP@95447KmVC;6457Ieļ[F=85589768;99;@J^gMA=99:>FTýSF>;9:=CNiȿ^J@<::<@J[pOE=;:;>FR|ƾXI@<:;=CMbdMC=;;=@IXľ~SG?=;CL\vUHA>=>AIUwþ\LE?=>@FNcjPGA>>?EKZÿXKC?>?AISnaNGA??AGN_ÿpUJC@?@ELX\NFA@@CJRigRJC@@CGN^{YMGAAAFLWuaPIDAAEJRenVLGCCEHN\]OIECDGMWnfUKGDEFJRbvZNIFEFJO[|aRKGFFIMWkmXNJFFHLSa^RKHGHJO\sgWNJHHJNWgs\PLIIJMS_bUMJJJLP[nl[PMJJLOXf|_UNLKLNU_zhYPMLLMS\mq^UOMMMRYedYRNNMPW_um]UPNNPU\kycYSOOPS[e~j]VRPPSXaqraZTRRSX^jh]WSSSW\fzna[WTTW[boyf^YWVW[_kla[YXX[^hwtg_[YYZ^eo}lc^[[[^dm~qga^\\_bkvyle_^^_biqqida_achn|wnhdcceimx}rlhfffjntxpljiilmt|{uonllmotzyuropprvz~|zwvuvwy{}~~}}}}}~~~K<55>e:+%(0P=,''.JA-''.CĮH.'',>̯O0('+;հ[2)%*8崩v5*%)5n8+%(2Y;+'(/M>,''.GE.''-AǮJ.'',=ίT0(%+:ٲa4)%*76*%)4e9+%(0U=+''/L@-''.DîF.''-?ʮM/('+<аX2('+9޴j5)%*67*%)4^:+'(0P=,''.JA-''.CĮH.'',>̯O0('+;ղ[2)'+8崩v5*'*5o9+')2Z<+'(/N?-''.GD.''-AǮJ/(',=ΰS0('+:ڲa4)'+76*')4f9+')2U<,'(/L@-''.FîF.''-@ʯM/(',=ҰW2)'+9޴i5*'*68+')4_;+')0R>,'(/JC.''.CƮI.('->̯O0)',<ղ\4)'+9浪u6*'*5o9+')4Z<,')0N?-'(.HD.('.AȮK/('-=ΰS2)'+;ڴa5*'+87+'*5g:+')2V=,')0MA.((.FĮG.((.@ʯN0)',=ҲX4*'+:ߴk5+'+79+'*5^;,')2R>-()/JC.((.DƮJ/)(.?ͰP2)(,<ִ\4*'+9浫u7+'+6o9+'*4[=-(*2O@.()/IîF.)(.CɯL0)(->ϲT4*(,<۴a5+(+98+(+6g;,(*4W>-(*0MA.))/GŮH/)).A˰N2*(-=ӴY4+(,;ߵk6+(+89,(+5_=-)+4S?.)*0KE/)*/FǯJ0*).@ͲR4+)-=״]5+),:綫w8,)+8p;-)+5[=.)*4PA.**0JůF/**/EʰM2+*.?дU4+).=۵c7+)-9︬9,),7h<-*+5X?.*+2NC/*+0IǰI0+*/C̲O4+*.?ӵZ5+*.<෬k8,*-9;-*,7a=.*+5U@/++2MïF0++0GɲK2++/AδS5++.>ص^7,+.<踭w9-+-9r<.+,7]?.+,5RC/++2KƱH2++0F˲M4++/AҵW6,+.=ܷd9-+.;﹮;.+-9i=.+-7Z@/+,5OðE0+,2JȲJ4,+0DʹP5,+/@ն[7-+.=๮l9.+.;<.+.9c>/+-7WC0,-5NŲG2,,4IʴM5-,0EϵU6-,0@ڸ_9.,/=麮v;.,.;r=/,.9^@0,.7SðE2,-5MǴJ4--4H͵O5.-2CӷX8.,0?޹f:.,/=񻮬=/,.;j?0-.9[C2-.7RIJG4-.5LʵL5.-4GζS7.-2Cع\9.-0?⺯m2.0=lA4.0;]ôF5./9UǵJ6//8M̷N8//6JйU:0/5Fڻ^<2/4A彲m=2/4?@4/2=gC5/2;[ƵH6/19SʷL8109MιP9017IԺY;206Fݼc=405A뾴x?404?uC514=bŵF602528F翵o@647CE746@iƸG945>]ɹK945=VͺN;55649I߿f@749FxC858CwĹF957@fȹJ:57?[˻M<56=UϼR=66=OսW>75;Lܿ_@85:IkC969GĺF969CoǺI;69AcʻL<78?ZͽO=78>TҽU>88=Oؿ[@97=LcC97O_C:9=MŻiE;9:;C_ϿP?:;AYVA;;@T[C<;?PżcF=;>NƽmH=;>KɽJ>;=Iq̾M?;=GgοP@<=E^TA<=CYýZE==ATŽ^F==APǽhH>=@MʾtJ?=?L̿M@=?JnOB=>HeSC=>G^žXD>>FZƾ]G?>EUȿdI?>CRlK@>CO{MA>AMzþOC?AKlĿSE?@JdƿXF@@I^[H@@GZ_JA@GWhLC@FSqMC@EPOEAENwSFADMkWHACLd[JCCJ_^KECJ[eMDCIXlNFCHUvPGEHSSHDGPrXJEGOk[KFFMd^MFFM_cNGFL\jOIGKZpRJGKX{UJHJU|XLHJSq[MIJRj^NJJPfcOJJO`hRKJN^nTLJN\vWMKNZZNKMXy\OLMWp_PMNVkcSMMTghUNMSdlWONSarZPNS_z\ROR]^SOR\xaUPR[qeWRRZmiYSSYjm[SSYhq\USXew^WTXc}aXUXa~dZWX_xh[XY_sk]YY_om_ZZ_lqa[[_kwc\[_j{f^\_ii_]_h}la^_hync_`hvpg`agtsicchsxkediq{mggjq~ojhkprlilp~unlmq}wqmor|{spqu{|wttw|~zwxy}}|}}~_C80/2;Xİj9,'%)0F̲>.(%(.=޸I2*'',8bX6+''*4Mư<-'%)/AҵC/)%'-;N4+''+5Wf9,''*0Hʲ>.(%(.>ܷG0*'',9hV5+''+4Nı;-'%)/CеA/)%'-<M4+''+6Yb8,''*2Iʲ=.(%(.?ڷF0*'',9lS5+''+4Oï~:-'')/Eδ@/)'(.=깬K4*''+7[_8,''*2Jɲ=.(').?ضF0*''-:qR5+''+5Rït:-''*0Eδ@.)'(.=幬J2*'',8^\7,''+4KDz=.(')/@ֶD0*'(-:zP5*''+5Sn9-''*0Fʹ?.)'(.=ṬJ2*'',9aZ7,''+4Mǰ=.(')/AӵC0*'(.;O5+''+6Vi9-('*2H̴?.)').>޸I2+'(-9eX7,''+4Mư<.('*0CҵC0*'(.<󺭨M5+'',7Xe9-('+2I˴>.)')/?ܸH2+'(-:jV6,''+5Oİ<.)'*0DеC0*').=M4+'(,8[a9-('+4Jʴ>.)'*/@ڸG2+').;nU6,((,5Rİy<.)'+2FϵB0*').=麮L4+((-9]^9-((+4Lʴ>.*'*0AظF2+().庮K4+()-9_\9-)(,5Mɴ=.*(+0C׸F2+(*.=}R6,))-8Vðl;.*(+4Iε@0+(+/?ẮK4,)*.:c[9-)),5Nȴ=/*)+2EոF2+)*.=P6-)*-9Xòi;.*),4J͵@0+)+1@޺J5,)*.;hY9.**-7PǴ=/+)+2FӸE2+)+/>񽮫O6-**.9[òe;.+*,5K̵@0+*+2AݺJ5,*+.zU9.++.9WƵp=0,+.6JйE4-+,2A彯N7.+,/=d^2-,.9MϹD5.,.5E߽M8.,-2>lô[<0--1:Tʸ@4.-.7J׻I7.-.4A𿴮R:1-.2=^ƶg>2.-/9NϹD5.-.6F޽M9/-.4?oõZ=2..0aƷd>4..0;PκE6/./8H޽M90..5AvõY=2..2=ZʹuA5/.09MռI80./7FR;2..5?eƸb?4/.2[ʹoA6//2;NԽI90/08GR<4/05Aiǹ_?5//4=VλF80/2:LܾM;2/08DŷX>5005?^˺nC7004=PԽJ92029IR=4027Clȹ_@6015>XμF92045227Aa˻lC8225=SԾJ:424;KR=5249EpȺ_A8227@[ϽG:425=OM=525;IƹX?7449Cd̼jE9447?UտJ<545=MùR>745:Gvɻ^A9549A]Ͻ{H;547>PM=746NĺR?956968=MȼXA:67;;>H^ŽN@<;=DVɾUE=;=AO_H><G[ȾRC=<=ESZG><=ANwýfK@==@Jbƾ~OC==?GYWF?=>ERþ^J@=>CMlƿnNC>=@J^SF?>@GWþ[J@>?EPzƿfMC??CMf{RF@?AJ\ÿXIA?@GU_LC@@FOomOF@@DMaVIA@CJZ\KD@AHS}gNFAAFOjzSICADM_ZKECEJXaNFCEISsnRIEDGOeXKFEFM]^MGEFKWhRJFFJSmxWKGFIOb\NHFHM\cPJGHLXvoVLHHKSi[NJHJP_aPKIJN[jUMJJNXowZNJJMTg_RLJLR`fUMKLP\yoYOLLOXm^RMLNVedVNMNS_lYPMNR\ty]SNNQZjcWPNPXejZROPV_|q]UPPU]p}bWSRT[kh[TRTZen^WSTYayzbZUUX_og\WVX]jm_YWX\g~uc[XY\du~h^ZZ\bnma\[\alre^\\_i{{ja^]_htmd___gpshb_afnxkebcfmz~oiedglvtlhfhltynkijmr~}snkknr{xqnmorzzvqqquy}yvvux{~||z||}~ \ No newline at end of file diff --git a/SOUNDS/TONES/NBCmed.ulaw b/SOUNDS/TONES/NBCmed.ulaw index 444745e..a709ea2 100644 --- a/SOUNDS/TONES/NBCmed.ulaw +++ b/SOUNDS/TONES/NBCmed.ulaw @@ -1 +1 @@ -;;(%A<#3ǦZ**b1$>?$0̨j+)V4#;D&/ԩ,(M7!"9I'-ߪ.'H9"!6O),/&C<$ 4ǧY*+f2%??%2̨g,*Y5!$=D'0Ӫ-)O7"$:J(/ޫ/)J:$#8§O*.𭞘1 (F=&#7ȩY,-k4"(BA'"5ͪe--\7$'?F)"3Ԭ/ ,T:%'=K+"2ޮ1",N=''<ŪP-"14$+J?)':ʬZ.!#0p7&+GD+'9ϭe0##0a:( +DI-!'8ׯz3%$0Y=*!+BĬN.#(8߲6'$/S@,"",@ɮT1%(79) %0OE-$#,?Ͱ\4( !)7x<+#&0MI/&$->ӳg7*""*7h?-%!(1KƯN3(" &->۶w:,%  $+8_C/(" #)2JʳT6+%! "'.>㹬=.'#!"&,8[H3*%""%*3Iζ[9-'$#%)/?@0*&$%(-9XƳL6,(%%',5IչaUվ]A70.-/3;KŹJ;4/./3:EfνS?82/038AVúdG;52138>M˽N?95347=Id»ZF<8558;9:=>BIVzÿ]MFA?@CIRhiTKFCCEJP_|]PKHGHKQ]xgXOLKKNR\mr_XROOQV]ij_ZXWX[_i{tjd`__cgmx~xutuvxz|~Ź8')S&<*3.-6(?$ȝS 럔!N%>)5..5)>%ŝN!ߟ S$?)6-.3*<&L"ڟ Y$B(8-/2+;'I#ԟl _$F(:,12,:(F$ϟa  j$I(<,31-9)D&͟[ "|$L(>,50.9+B'˟V!#$ O(?,7008,A(ɟR!%䣗%"V(C,:028-?*ǠO"'ݤ%#[)!G,<058/? +ơM#(٤p&%b)#J- >1781?!-ŢL$*֥g''l*%M-"@2 :8 4?"/ĤK%,ӧ`()z+'Q.%D3"<9!!6?$1ĥJ'.Ѩ])+,)W/'H4!%>:##9?&"4ħJ(!/ϩ[+-묟- +\0")L5$(B;&&<@(%7ũJ*$3ϫY,!#/殢/#".b3$!,O7&!*F<( !)?B*!!(;ƫK,#!'7ϭX.$!&3⯥x1&"%0j5'"%.T9)#%-J>+$$,CD,%$+>ȭL.&%*:ЯX1'%)7ನo4)%)5r8*&)2Z<,'(0N?-((/HîF/)(.BʰM1*)->ҳY5+)-;߶l8,),9|;-*,7_>/+,5SC1,,4LDzJ3,,3G̵O6--2Cո[9.-1?ຯk<0.1=?2.0538G㿶l@748DøE958BlǺI;68A_˼M=89?YϾR?99?TZB;:?PļaE<;?NǽmI>=q&/-(ݤ9!GQ#4*+ˢ4$UE!:(./'~= @b&1-*֥8#KM$7*,ȣ3&]C" =(//)꧚< "EZ&5-+Х8%OK$ :+.Ƥ3(iA#"?t)2/+ߨ5%%5խ>)".]O-! +D3%'9̬<($2|I,""-Ll1% *>Ǭ:( '6౥D,#%/VZ0%#,C¬8)!"):հ@,# !'3gP/&!!%.J7)"!$,>ͯ>,%!#*8󶩣K/'##(2Rg6*$#'.Dɯ=,&#&,<߶H/($%*6^Z6*&%)1Jư<-'&(.?ֶE0)&(-:pS6+('+5Qı{<.)(*2FжC1+(*/>N6-)*.9[²f[˹uC70/3;N׽K:3029HøV>6238Be˻iD9437?VտK<657=MźT@967>@I\¿WIA?AHW`MFBCHSqoTJFEIPe[NIHJP_eTMKLP]|o[RNNS\ocYTSV]kl_ZYZ_jvib_`el{~rnlmpv|~ \ No newline at end of file +N=4-+*+.:UʶO9.)'%(,5Hڻj>0+'%'+0>oF5,(%').9R̷S9.*'%(,5F޽u?0+'%'+0=gôI5-('').9NθX;.*''(,4D彰@2+'''+/=_ƵK7-)'').8Mй[0+('(+2?rG5-)''+.:S̸S:/+'')-5G޽s@2,('(+2>iŵJ7.*'(+.9PιW2,)(*-5CF6.+)),0=Y˹P;/+))+.9K۽i@4-*)*-5AuĵI8.+)*,0=VͺU<0,**+.8J߾qA5.+*+.5AkƷK9/+*+,050..07?V_C92/./5=LǺJ<50./49DdνT@82//28@UùeG:40/05=KʼM=62004:F`ѿXA940049@SƻlI=62127=K|̽O?94225;F_[E;54259ARȽrK>84448>KsSA:5447=F]ż`H=8556;ARʾ|M@:6569?LmûWE=8569=G\ȽeJ?:768:88:>H[ʿkMA<99:=DSýUF>;9:=AMhȿ^J@=::<@J[ýnOD><;ENfbME>==>CK\ƿvSH@==>AIUxþ\LD?>>@FOfgPHA?>@EM\|XKE@?@EKWt_OHC@AEJRflUKFCAEHN]\NIDCEHMXqdSLGDFHLUfpZNJGGHLR_`SMJHIKP[pjYOLJJLOXhv^TNLKLOWbfYRNMNOU^pn^VPNNPU\k{d[URPRV[g}l_YUSUW\ctue]YWWX\bn~lb][Z[]cl{rha^]]_clvznhcaacgltunjhhhkmt}ztqnnnosv}|{{{||}~L<55=e;+%(0O>,''.HC.''-AǮJ.'',=ίS0(%+9۲d4)%*67*%)4_:+'(0R=,''.JC.''.CƮJ.'',=ͯR0('+:ز_4)'*76*')4d9+'(0S=,''/JA-''.CĮH.'',>̯O1('+;ֲ^4)'+8鵪6*'*5i9+')2V=,'(/LA.''.DĮG.('-?˯N0(',<Բ[4)'+9嵪v6+'*5n9+')4Y=,')0N@.'(.FîG.((.@ʯN0)',=ӲY4*'+9ᵪn6+'+6u9+'*4[=-()2O@.()/HîG/)(.AʯM0)(-=ҲX4*(,;޵k6+(+8~9,(+5^=-(*2R@.)*0JîF/)).CɰM2*).?вV4+)-<ݵg7+),99,)+6a=.)+4S@.*+2KïF/**/FɰL2+*.@ϴU5+*.=ܵc7,*-:𹬪:-*,8f=.*+5W@/++4MïF0++1GɲL2++/AϴS5,+.>ڶa8-+.<칭:.+-9k=.+-7Z@/+,5OðF2+,2IɲL4,+1DεS6-+/?ٷ_9.+.=鹮y;.+.:o=/,.9\A0,-6RòF2--5KɴL5--2GεS7.-2Aظ^9.-0>纮s0-.:^B2-.8TĴG4..6MʵL6..5IηS8..4D׹]:/.2@弰n=0.0=~?2.1549Hῶi@749EøE958CoƹH957@aʺK;57>YͼO=67=SҽV>77=Nٿ]@97MļhF<:=KǽyI=:=JzʽL>;=GjͿO@<=F_SA==E[ýYE==CVƽ_F>=ARȾiJ?=ANʿvL@=@M~NA>@KnþRD?@JdſWG@@I^\H@@HZaJAAGWkMCAFSuOFCFPSGCFOrWIEFNj[KFFMc_MFFM^eNHGL[lRJHLZvUKILWXMJLVw\NJLUm_PLMSicTMMSejVNMSboXONS_x[ROS_^TPT^zbWSU]tgZUV]pk\WX]mo_YY]kub\Z^jzf^\_j~j_^ai~le`ckzqhdfkyulhimxyolloy}tqoux{zz{~^C80/2;XŰn9,'%)0Fʹ?.(%(.=幬J2*''+7\^8+''*2JȲ=.(%(.?ٶF0)'',9kU5+''+4Nį;-'%)/CеA/)''-;M4+''+6Vh9,''*0G̴?.('(.=߸J2*'',8_[7+''+4Lǰ=.(')/@׶E0*'(-:rR5+''+5Pðz;-('*0EϵB/)'(.=칭M4*'',7Zc9-('+2Iʴ>.)').?ݸI2+'(-9fY7,('+5NDz=.)'*0CԶE0*').<P5+((,6Tðo;.)'+2FεA/*').>溭L4+((-9]_9-)(+4Kɴ>/*(*0@۹H4+().;lW8-)(,6PƲ=.*(+2DӷD2+(*.=O6,))-8Xðj;.*)+4J͵A0+)+0?⺮L5,)*.:a]9.**-6Mʵ?0+)+2CٹH4,*+/=tU9.**.8Sƴz=/+*,4GҸD4,*+0?O7.++.:\òf0,+.6JҹF5.+-4A꽰O9.,,1<`ŵc=0-,.9NιC4.,.5F޽L8.-.2?m[<0--0;U˸A4.-/7JؼJ8/-.5AU;0..2=\ȷm?4..09MһG7/./6F翴P;0..4?fƷa>4..24//4=Y̺}C70/2:MؽK:2/08F÷V=5005@aʺkA7004=RӽI:204:JR=5028ClɺaA7226?XнH:425RM=645Lʽ]E<99=GdrJ>99JmjJ>;:=G\ƽOA<;=CSʿXF=;=AMzeJ?=GYWG?=>ERþ_JA=>CMjǿrOE?>AJ]VH@?@HW^KC?@FPrlOFA@EMcVICAEK[]MFCDJVhPHDEHRj{WKFEHN_]MHFGM[gQJGHLVqtWMIHKSf]OJIKP_eTMJKO\yoYOLLOXl_SNMNVefXPNOU_n\SOPT]s{aXRRT\kg[USU[gn_YVW[dzxe\YY[bpk_[[\bnpe^]^bl~yjd__dkyoiedglvwnjijnu{tonnqv}yxvwz{~ \ No newline at end of file diff --git a/SOUNDS/TONES/NBCquick.ulaw b/SOUNDS/TONES/NBCquick.ulaw index e6c8e8e..fadddde 100644 --- a/SOUNDS/TONES/NBCquick.ulaw +++ b/SOUNDS/TONES/NBCquick.ulaw @@ -1 +1 @@ -;;)$?>$1˧i+)T5 ":G'-ݪ.&G:# 4ĦW)+e2$>A%/Щ,)N8""8M(-/'C>% 4ʨa,+[5"%=G(/ګ/)K;%#8ĨT+.q4"(BB("4ϫu. ,U:%'**>ȬV/#&49("-JG-" *;ӯm4'&3]>+"#-DǮP1&!*:嵨:*" '2RF/&%-@ϲ_7*##+9o?.&!")2LǰO4*# "'.?ݸ<-'"!"&,9]G3*%""%*3I϶[:-($#%)/>B2+&%%(.9UɵO8.)&&(-5Hۼn?2,)'),2?kĵJ8/+)),0;Qл[>3-+*,/8H¶G90-,-/6A`̻S>5/-./5>PiF:3//05=>CJXÿ[MGBABEKVmiVMIGGIMVf}rnnpy~Ź7'*T%=)5-.3*<&I"Ԟl`#G';+2/-6)?%ǝO!។!U%B(8,02,:(E%͞[!#M'>+6./5+=(ÞK$֠l"!c%I)=-52/9+B(ɟR!%㣗%"X(E+;/56/=,H!)ϣ]$&(#Q+!C.;35:/B",ȣO%*ڦn('g+%M.#B2!;8  6>#1äH&.ΧX(+誝+)].(L2 &B7#$<=%#7D'"3ɩO*!/ثc, !-/" ,Y3$ *K8& )C<( (=B*! ':ǫK," &6ЭX.$!&3ᯥs1&"&1m5'#%/W9)$%.L=+%&-FC-&&,@ƮJ/'&,=ίS1)'+;ڳa5*(+88,(+7h<-)+5X?/*,4O°E1,,3JȳK4-,2FζR7.-2Cع]:/.2@估n=2/2>@4/3=gõE714=\ȸJ93587=Nڿ^B:9=LĻjF<:>KȽ{J><>Ky̿NA>?KlÿTF@BKeZJDELa_MHHM_m\XY_mɻM."&E[$1*)͢4"QE 9'-.&쥘: CU#3**ˢ3$WC ;'.-(ᥘ9!GP#5*,Ȣ2%]A =z'0-)ۥ9#JN$7*-ǣ2'g@!!?k(3.+צ9%NL% :+/Ƥ3)s?#$Cb)6/-Ԩ:!(SK'#=,2Ʀ4 ,@%'H]*#90/Ҫ;$+ZK)'@.#6ƨ6# .쭟A(*M[,'=3##4Ѭ<'!.`L+*F0#':ȫ9'$3篣D+ ".R[/$!+A6' (9ӯ?+"&2jM.%$.Kx5(! #,?ʮ<+#!#*9崨G.&"#(3Y[4)$#'/Hů;,&$&->մC/(%&,9tP4*&&+5R¯q:-('*1FεA0*(*/>庮L5,)*.:`]:.+*-7O˶@2,+-5FڻJ7.,-3@~W<1..2=[ɸoA5//2;NԽI:2029I·S>6239DkʻcD9559AZӿK=869?QƼSA;9:?M̿_H>;=@I]¾WIB@BIX`NGDEKVwnVNKMQ\ovux \ No newline at end of file +N=4-+*+.9SʶR9.)'%(,5Fݼt?0+'%'+0=eôJ6-('').8NϹZVӽ[@6/--.2;JĸH:2.-.08CcͼR>5/../5>RfE92...4;IɻM=5/..28A\ҿZA82/.06>NĺwI<50/05;HlͽR?820149AXùbF;52127>NɽM>8422695459?MySC;7558=G^ƽaI>9658:88:>H[jMA=99:=ERŽVG?;::=CMfaLC=;;=AJ[žwSG@=<=@GSv\LD?==@FNcjRHA?>@DL[ZMFA@AEJUndRJEACEJRbtYNHEDFJO\~aSLHFGJNXlmZOKJIJNVe~aUNLKLNU_wj[SOMNPU]mvbZTRPRW\hj_ZVUVX]fwsg^\ZZ[_fr~zxwy}~K<55>e:+%(0P=,''.JA-''.CŮH.'',>̯O0('+;հ[2)%+8崩v5*%*5n9+')2Z<+'(/N?-''.G­E.''-AǮJ/(',=ΰS0('+:ڲa4)'+7ﵪ7+'*5f:+')2V=,'(/L@.'(.FŮG.('.@ʯN0)',=ҲX4*'+:޴k5+'+79+'*5_<,'*2R?-()1JC.().EǯJ/)(.?ͰP2*(-=״]5+(,9涫v8+(+7p:,)+5\=.)+2PA.**0JůG/**/DʰM2+*.?дV5+*.=۵c7,*-:﹬:-*,8h=.*,5X?.++4ND0++2JDzJ2++0EʹP5,+/@ն[7-+.=ṭl9.+.;=.+.9c?/,-7WC0,-5NƲH4--4J˴M5--2DжV8.-0@۹`:.-0>黯w=/-/527E迵p@627AE846@iƹH946>]ʺL;56=WͼO=66=PӽV>76=?L˿L@=?KsOA=?JhþSD>@I`ƿXF@@H\]IA@GYcKCAGWlMECGTxPGEGRTIEHPrXKGIPk\MHJOgaOJJObgRLKP_mVMMP^tYOMR]~\ROR]|_URS]veYTV]qj\XX^om_[[_mvlhimw~^C81/2;XŰj9,'%)0F̲>.(%(.=޸I2*'',8cX6+''+4Mư<-'%)/AҵC/)''-;M4+''+6Wf9,''*2H˲>.('(.>ݸH2*'',9hW6+''+4NŰ<.('*0CеA/)'(.=M4+'',7Zb9-('+2Jʴ>.)')/@۸G2*'(-:lU6,((+5PŰ}<.)'*2FеA0*').=꺮M5+()-9\_9-)(+4Kʴ>/*(+0AڹG4+(*.2.-/9MйF5.-.5D㾲N9/-.4?jŵ]=2..0^ɹj@5//2YμF9204MɼZC;89=HiοjI=99;;?IdŽyNA=<>FYʿUF>=>ERý^J@=>CNnǿlMC?>AKaTG@?AJY\KC@AHTgOFCCGPjxUJEDGN`[MGFGM\dRJGHMXupWMJJMUj]PLJMSceUNMMS_m[RNOS\s{_WRPT\lg[VTV[in_ZWY]g{xg_]_cky{{| \ No newline at end of file diff --git a/SOUNDS/TONES/Nextel.ulaw b/SOUNDS/TONES/Nextel.ulaw index aaa2369..e3374ec 100644 --- a/SOUNDS/TONES/Nextel.ulaw +++ b/SOUNDS/TONES/Nextel.ulaw @@ -1 +1 @@ -%'L >)$ 7-"!00!Ο",7 {$)?M'&N>)$ 7,"!00!Ο",7 |$)?M'&N>)$ 7,"!00!Ο",7 |$)?M'&N>)$ 7,"!00!Ο",7 {$)?M'&N?)$ 7-"!00!͠"-1.]ipx}}{zzzz{|}~~~~~~~~~~~~~~~~~~~~~~~~~~~}}|{zyyyxoӢ&'M >)$ 7,"!00!Ο",7 |$)?M'&N>)$ 7,"!00!Ο",7 |$)?M'&N>)$ 7,"!00!Ο",7 {$)?M'&N>)$ 7,"!00!Ο",7 |$)?M'&N>)$ 7,"!0/!П#+Hmuuuuvwyz{}~~}}}}~~~~~~~~~~~~~}~~~|{zyzzz|~{wqmhaY;5'&M >*$7,"!00!Ο",7 ~$)?M'&N>)$ 7,"!00!Ο",7 {$)?M'&N>)$ 7,"!00!Ο",7 |$)?M'&N>)$ 7,"!00!Ο",7 {$)?M'&N?)$~ 7-"!00!͠"-1 \ No newline at end of file ++,P'C.*}'<2(Ŧ'66'Ԧ(1<'z*.E%Q,+S%C.*'<1(Ŧ'66'Ԧ(1<'{*.E%Q,+S%C.*'<1(Ŧ'66'Ӧ(1<'{*.E%Q,+S%C.*'<1(Ŧ'66'Ԧ(1<'{*.E%Q,+S%E.*}'<2(Ŧ'66'ҧ(274`krx|~~|{zyyy{|~|~}}}}~}~}~}~}~}~}~}~}~}~}}}}~}~}}~}}}~}~}~}~}~}}}}~~}~|||||~}|}}}~}~|||}~}~}}}}~||~|~}~}~}~|~|~}~}~~}~{|{zyxxyyp٨+,Q'C.*'<1(Ŧ'66'Ԧ(1<'{*.E%Q,+S%C.*'<1(Ŧ'66'Ԧ(1<'z*.E%Q,+S%C.*'<1(Ŧ'67'Ԧ(1<'y*.E%Q,+S%C.*'<1(Ŧ'76'Ԧ(1<'{*.E%Q,+S%C.*'<1(Ŧ'65'֦)/Lovuuuvwyz{|~|~}}~|~|~|||}~}~}~}}}}}}~}}~}||~}}~}}~}}}}}}}}~}}~}~}}~|}~}~}}~}~}~}}}}~}~~}~}~}~}~}~|~||~}~}~}}~|{zyxzzy{}}zwsnje]?:,+Q'C.*%<1(Ŧ'67'Ӧ(1<'}*.E%Q,+S%C.*'<1(Ŧ'66'Ԧ(1<'z*.E%Q,+S%C.*'<1(Ŧ'66'Ԧ(1<'|*.E%Q,+S%C.*'<1(Ŧ'66'Ӧ(1<'z*.E%Q,+S%E.*|'<2(Ŧ'66'ҧ(27 \ No newline at end of file diff --git a/SOUNDS/TONES/OverHere.ulaw b/SOUNDS/TONES/OverHere.ulaw index 0f3435f..4bda191 100644 --- a/SOUNDS/TONES/OverHere.ulaw +++ b/SOUNDS/TONES/OverHere.ulaw @@ -1 +1 @@ -ۭ|,!!,~,!!,,!!,~,!!,~,!!,~,!!,,!!,~,!!,,!!,,!!,~,!!,,!!,,!!,,!!,,!!,~,!!,,!!,~,!!,~,!!,,!!,,!!,,!!,~,!!,,!!,~,!!,~,!!,,!!,~,!!,,!!,,!!,~,!!,},!!-[y{||}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}||{{zwnҦ-,%!;;!%,,%!;;!%~,,%!;;!%~,,%!;;!%,,%!;;!%,,%!;;!%,,%!;;!%,,%!;;!%~,,%!;;!%,,%!;;!%,,%!;;!%~,,%!;;!%~,,%!;;!%~,,%!;;!%},,%!;;!%,,~%!;=1`lsx|~}||{{|}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}|{{zzztڥ\"&¡8 -+ >$#ߢC */4'!P_"&à8.+ >$#ߢC */4'!P_"&à8.+ >$#ߢC */4'!P_"&à8.+ >$#ߢC */4'!P_"&à8.+ >$#ߢC */4'!P_"&à8.+ >$#ߢC */4'!P_"&à8.+ >$#ߢC */4'!P_"&à8.+ >$#ޢC */4'"Gou \ No newline at end of file +߲|1''1~1''1~1''1~1''1~~1''1}1''11''11''11''1~~1''1}1''1~1''11''1~1''11''1~1''11''1}1''1~1''11''11''1~1''1}1''11''11''11''11''1}~1''11''11''1~1''1}1''2^y{}}}}~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~}~~~}}||||{yp׫2%1+'??'+~1%1+'??'+~1%1+'??'+~1%1+'??'+~1%1+'??'+1%1+'??'+~1%1+'??'+1%1+'??'+~1%1+'??'+~1%1+'??'+~1%1~+'??'+~1%1+'??'+~1%1+'??'+~1%1+'??'+}1%1+'??'+1%1+'?B%7eovz}~}|}||||}~}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}|{{{{{vޫ_(+ȧ='2/'C*)䨫I'.5%:,'Vd(+ɧ=%4/'C*)䨫I'.5%:,'Vd(+ɧ=%4/'D*)䨫I'/5%:,'Vd(+ɧ=%4/'D*)䨫I'.5%:,'Vd(+ɧ=%4/'D*)䨫I'.5%:,'Vd(+ɧ=%4/'C*)䨫I'.5%:,'Vd(+ɧ=%4/'D*)䨫I'.5%:,'Vd(+ɧ=%4/'C*)⨫I'/5%:,(Lqv \ No newline at end of file diff --git a/SOUNDS/TONES/PianoChord.ulaw b/SOUNDS/TONES/PianoChord.ulaw index 3eb4e87..7d76db9 100644 --- a/SOUNDS/TONES/PianoChord.ulaw +++ b/SOUNDS/TONES/PianoChord.ulaw @@ -1 +1 @@ -û=-).HVKg[3&"+"31,ƨqIU<)"&?/$V#ULLJ.$#0OO(6XI_d5'"*_%.7*ϩJQ>*#&;4! !INKN/$#.ɡqA*2]I\t7'")O(*=(ߪJOA+#%7:Ϝ"@PJoT0%#-ԣ9-.eIX:("(F+'F%mKNE,#$4B%;SJg[3&"+"31,ƧqIU<)"&?/$V#ULLJ.$#0OO(6XI`d5'"*_%.7*ϩJQ>*#&;4! !INKN/$#.ɡpA*2]I\t7'")O(*=(ߪJOA+#%7:Ϝ"@PJoT0%#-գ9-.eIX:("'F+'F%mKNJ2+->Ȯ\=;C\ \ No newline at end of file +O@=BZf\rjG:7>7)%,GE.*.?ؼy[eN<7:R¯C,%)8̭f4+,8e]]\B88EӴ`1'&/`<,*1Iʹh[mpI;7=m9*%+BJ/*.=༷\bQ=8:NƯH-%(6Ԯ5+,6[¸_\_C88B۶y2'&.T=-*/Fκk[kzJ;7=_<*%*=«O/*-<[`T>89JɱM.&'4௦7++4SŸa[xdE98@丬4(%-L@.*/BҺp[hM<7+%*;ǬX2*-9w\_X?88HβU.&'19,+2Nȸd[rjG:7>7)%,GE.*.?ػy[eN=7:R¯C,%)8̭f4+,8e]]\B88EӴ`1'&/_<,*1Iʹh[noI;7=m9*%+BJ/*.=༷[bQ=8:NƯH-%(6Ԯ5+,6[¸_\_C88B۶y2'&.T=-*/Fͺk[kzJ;7=_<*%*=«O/*-<[`T>89JɱM.&'4௦7++4SŸa[ydD98@帬4(%-L@.*/BҺp[hM<7;X>+%*;ǬX2*-9v\_[F>@P¼kONVk \ No newline at end of file diff --git a/SOUNDS/TONES/RC210#1.ulaw b/SOUNDS/TONES/RC210#1.ulaw index 156268b..a44acd7 100644 --- a/SOUNDS/TONES/RC210#1.ulaw +++ b/SOUNDS/TONES/RC210#1.ulaw @@ -1 +1 @@ -L<9>VͽbYod>/,3𬞛&31,ƧqIT<)"&?/$V#ULLJ.$#0OO(6XI_d5'"*_%.7*ϩJQ>*#&;4! !INKN/$#.ɡpA*2]I\u7'")O(*='ߪJOA+#%7:Ϝ"@PJoS0%#-գ9-.dIX:("(F+'F%mKNE,#$4B~%;SJg[3&"+"31,ƨqIU<)"&?/$V#ULLJ.$#0OO(6XI_d5'"*_%.7*ϩJQ>*#&;4! !INKN/$#.ɡqA*2]I\t7'")O(*=(ߪJOA+#%7:Ϝ"@PJoS0%#-գ9-.eIX:("(F+'I",qW[WA;=M־hLJQh \ No newline at end of file +]NLPfnhxoPC?G:*'-GE.*.?ػy[dN=7:R¯C,%)8̭f4+,8e]]\B88EӴ_1'&/`<,*1Iʹg[moI;7=m9*%+BJ/*.=༷[bP=8:NƯH-%(6Ԯ5+,6[¸_\_C88B۶y2'&.T=-*/Fκl[k{J;7=_<*%*=«O1*-;[`T>89JʱL.&'4௦7++4SŸa[xcE98@帬4(%-L@.*/BҺo[gM<7+%*;ǬX2*-9w\_W?88HͲU.&'1~9,+2Nȸc\qjG:7>7)%,GE.*.?ؼz[eN<7:R¯C,%)8̭f4+,8e]][B88DӴ`1'&/`<,*1Jʹg[moI;7=n9*%+BJ/*.=༷[bP=8:MƯH-%(6Ԯ5+,6[¸_\_C88B۶z2'&.T=-*/Fκk[k{J;7=_<*%*=«O/*-<\`T>89JɱM.&'4߯7++4SŸa[xcE98@帬4(%-L@.*/BҺp[gM<7+%*;ǭ[7.2?yǿfjgTNO^s][br \ No newline at end of file diff --git a/SOUNDS/TONES/RC210#10.ulaw b/SOUNDS/TONES/RC210#10.ulaw index 4988222..11675aa 100644 --- a/SOUNDS/TONES/RC210#10.ulaw +++ b/SOUNDS/TONES/RC210#10.ulaw @@ -1 +1 @@ -aLEJoɼS929[N/)-LO*!&?[)$;+ #7, "3.!!0Ŧ0!!.ͨ3" ,۩7# +;$)[?%(ME&&EM(%?[)$;+ #7, "3.!!0Ŧ0!!.ͨ3" ,۩7# +;$)[?%(ME&&EM(%?[)$;+ #7, "3.!!0Ŧ0!!.ͨ3" ,۩7# +;$)[?%(ME&&EM(%?[)$;+ #7, "3.!!0Ŧ0!!.ͨ3" ,۩7# +;$)[?%(ME&&EM(%?[)$;+ #7, "3.!!0Ŧ0!!.ͨ3" ,۩7# +;$)[?%(ME&&EM(%?[)$;+ #7, "3.!!0Ŧ0!!.ͨ3" ,۩7# +;$)[?%(ME&&EM(%?[)$;+ #7, "3.!!0Ŧ0!!.ͨ3" ,۩7# +;$)[?%(ME&&EM(%?[)$;+ #7, "31&'7̭<..<۹J;@Løk( (=D*! '9ǫK+!%5ϬW-"$1߮o/##/o1$"-W5%!+K9' !*C=( (>B)! ':ƪI+!&6ͬS-"%2ۭg.##/1$"-[4%",M8&!*E<( )?@) ';ĪG+!&7˫O,"%3׭_.#$0柺0$#._3%",O7&!+G;' )@?) (<©E*!&8ɫM,"%4ӭ[-"$0箣/##.g2%"-S6&!+I:' !)A>( (=C*! '9ǫK+!%5ϬX-"$1߮o/##/o1$"-W5%!+K9' !*C=( (>B)! ':ƪI+!&6ͬS-"%2ۭg.##/1$"-[4%",M8&!*E?-'(/HDzO:45=PľiVSXdw \ No newline at end of file +fPJNrX>8>^´S5.2PU/'+E_.%*?~/')<1'(9ū4''7ʫ7''4ѭ9('1ޮ<)'/?*%._E+%-RJ+%+JQ-%+E_.%*?/')<1'(9ū4''7ʫ7''4ҭ9('1߮<)'/?*%._E+%-RJ+%+JR-%+E_.%*?/')<1'(9ū4''7ʫ7''4ѭ9('1߮<)'/?*%.^E+%-QJ+%+JR-%+E_.%*?/')<1'(9ū4''7ʫ7''4ѭ9('1߮<)'/~?*%.^E+%-QJ+%+JR-%+E_.%*?/')<1'(9ū4''7ʫ6''4ҭ9('1߮<)'/?*%.^E+%-QJ+%+JR-%+E_.%*?~/')<1'(9ū4''7ʫ7''4ҭ9('1ޮ<)'/~?*%._E+%-RJ+%+JR-&+E^.%*?/')<1'(9ū4''7ʫ7''4ѭ9('1ޮ<)'/?*%._E+%-QJ+%+JR-%+E_.%*?/')<1'(9ū7+,<в@44@޾N?@Mf]`q~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~pSIDFPɽn@514?:,(*4c9+%(1U<+%'/L?,''.E­E.''-@ȮJ/'%+=ͯQ1(%+:ز_2(%*7괩5)%)4j8+%(2X;+%'/M>,''.GD-''-BƮI/'',>̯O/'%+:ձ[2(%*7䴩q5)%)5r7*%(2[:+%'/O>,''/IB-''-DŮH.'',>ˮM/'%+;ұX2(%+8޲j4)%)57*%(2_:+%(1Q=+%'.JA-''.EĭF.'',?ɯL/'%+<ϯU1(%+9۲d4)%*7򵩥7*%)4d9+%(1U<+%'/L?,''.F­E.''-@ȮJ/'%+=ͯR1(%+:ز_2(%*7괩5)%)4k8+%(2X;+%'/M>,''.GC-''-BƮI/'',>̯O/'%+:ձ\2(%*7䴩r5)%)5r7*%(2[:+%'/O>,''.IB-''-CŮH.'',>˯M/'%+;ұX2(%+8޲k4)%)5~7*%(2^:+%(1R=+%'.JE2,-5M̸U>::BVl[X\hx \ No newline at end of file diff --git a/SOUNDS/TONES/RC210#2.ulaw b/SOUNDS/TONES/RC210#2.ulaw index 0859c9b..39354ca 100644 --- a/SOUNDS/TONES/RC210#2.ulaw +++ b/SOUNDS/TONES/RC210#2.ulaw @@ -1 +1 @@ -t|aLHVֿN97GɲD.,=='&88"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48##7=**=E12EʷO>?SfZ \ No newline at end of file +v|dOKYQ<:J̶H2/@î@+*;;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;'';@--@İI56IͺSACWi\ \ No newline at end of file diff --git a/SOUNDS/TONES/RC210#3.ulaw b/SOUNDS/TONES/RC210#3.ulaw index 4b9dc1d..e41db73 100644 --- a/SOUNDS/TONES/RC210#3.ulaw +++ b/SOUNDS/TONES/RC210#3.ulaw @@ -1 +1 @@ -t|aLHVֿN97GɲD.,=='&88"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48##7=**=E12EʷO>?Sf[cx~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~aLHVֿN97GɲD.,=='&88"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48"!48##7=**=E12EʷO>?Se\ \ No newline at end of file +v}dOKYQ<;J̶H2/@î@+*;;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&&8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;'';@--@İI56IͺSACWh^fy~~~~~~~~~~~~}~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~eNKYQ<;J̶H2/@î@+*;;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;&%8;'':@--@İI56IͻSACWh^ \ No newline at end of file diff --git a/SOUNDS/TONES/RC210#4.ulaw b/SOUNDS/TONES/RC210#4.ulaw index 9423a69..eaca318 100644 --- a/SOUNDS/TONES/RC210#4.ulaw +++ b/SOUNDS/TONES/RC210#4.ulaw @@ -1 +1 @@ -muG13ml˴1"Y箠'Kcϟ#H9˛&K7+ʘ*$VN&!Ζ./6ٖ6*R,@?'\RȨ$N#I֢#FB͜%HG.̙)Nu+%Η-*g=ٖ3%=/򗒥<4*]K~&Nf$Hާ$ETО%E5͚(J3(Ϙ,%XH#ؗ0 359-i,_EH(OY%H$C֡%C=Ϝ'F>,Й+!O])#ؗ/,o;뗐7'D/b?9¾*OOګ&Hp%Cݥ%AKӞ'C[1Қ*J/&ؘ-'[D!闐4#73e=/,QJS(H_&B誛%?lؠ&@9Ԝ)E:*ؙ,"OS' 瘐1.9i:*M.RD>*IŲ'A&>ݤ&>Cם(AK.ٚ+J,$嘐/)_?l7%;2U?3ξ,INi(Ah'>樚'=X۟(>5ۛ+D5(噐.$RL$p5 08W=,\/MNL4!Niֻ?-1[my~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~d_E5<Ȭ=?_/&:X)/^L'!]-'_K'')d-6\.8Y+?Iɝ˥h#04_#ΙDѮ4Y@/H*@4ߖ-"8/$ 72!3G<9)n(OI5 ȰGP)n+=ઞj"O56H<)Ǖ1/$"&*YO#5>&RM&!ח'%i]+,)4>?0B&L\ŞK',>Qͫ!;ea$.C=:<%85Õ(34)59&=9=D.՚#fl<!S=,&MﭠZK'@0B=3),+Zh&(!&LR&?4#OZ*&Ö"$02)=J55Rڠ!qŠ£=+l̩)TF|4GO)h)8<I3 17!#/9#.4A*J/@]5ǚܮF#b31"霞fH?,W8Ͼ/d<4f3#,9:\n?7JqJRp{n|~~~~~~~~~~~~~~~~~~~~~~ZPeyN@[<'-ﶾ̮@C6,Is-2/KlL-<-N-*C;WƠ%M2`-#3IϠ9/.>@̼4ԕ!,7Q$͜K<F(+d0?,OZJ1/*rP,5;9n(=+aI)-h. \$-`F&'()/lF$!ʖ#o%.3I"X! ʮZ,d59P":)K7;=@k"-4Ob?O-JL#%IBL8%\`&<@0ɛ毸)!:;+Ԭ.ݕ'!96'G%֡ͩ7A-$:{3#7-N˧H/8'=1-=;̥&F+B1&1jӤk/K3,Q褚7^7̕)E[#ř>=N%'-5'<|5&=$?3.诧,-$MM''*OW-*)HC%/*ۤʫ.3F͠&9#2{?*8*ٚ:S<ƕ(s'3eM.ݖ'%A4+Λ#L8++0X尮6啑,Yঝ!A +cT.62O6>H"񘒭"nɭ"#=KT8K( 8?.}[0M1)=?^@J &{T&P75?;53vW'L﴾(T=jƤF8*/X3T-<;"'X4SθV#?/!.ӼvƷ=-8εKPn \ No newline at end of file +xzZFHwvF48iö<+.]oᵫ9(.[Mݯ;+2]K?ܭ>.9g_;7߫C5EJ00髧J>d@,.TS<),kc۽9'+_9'+[渭9'-YV߰:*/[ZCޮ=,5_{?:߬A0>qP54髧H:PD..OI>+,l];(+_qɶ9'+[9',Xe⴫:(.XJ߮=+2\H=᭧@.:h[95謧F6HJ//MAs@+-mX[=)+ahԺ:'+Z9'+W緬:(-WPᰩ<*/YR@⮧?-7al=9謧D4@yN42K*,aa;(+[zǵ:'+W캮:',U]䴫<).WjF䮨>,4\E;筧A/讧@.8ad<6󭧵F5CM20tM>^C--cWR>*+\f޽<'+U~Ĵ;'+R칭;',RW粪=*.U]C鮧?-5\@9񭧵E0=nS52vK:NG..fSH@+,[_s=(+Ut̷<'+R񽮼<'+Ph굫=).RJꯨ?+2XJ=𮧵C.9d^95yJ6FL0/gP@kD..__^I47_tSAFkw}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~pnXJOPSmE;Nh=Em^<7lA/TI//A8LD2964KG7HZ.1OM=x=+2a\Jͭ0)6Zíb+(=ýy?'+P4%.կt.'8aJ+*J[O=+.ګFE9,8;>ia9/JR2;c_;7笧<.:sm?@Ū0,=IRS++FV;'-^kش/'2϶ҵ]+'<ӹ@(*Rc߿7(.ϫNqn2*9CWP/-MO:LJ04׫=5HI5=20JM;PM-/PWC殨9)2qvOˮ.(7ϿdP*(@;'+_0'/ʮjȾ]-(;׫8,9FG.+=P\J*+Id궬7'.yض.%4ȲֹP+'?v޽=(+eY}5)0ƪIZa2+=s=LO0.\H6GK47̩92DM9C//IU>\E+/TlJڮ5(2Yɮ-'9ȻoïH))Fô8',rǺ/'4[S-)@hLE./pOIqH9@зMMkwSK\y\dy~w~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ibp}_Uj̿OW,.Nhٶ-':_GoA/9..H\ᶮ/%4ME.4̩2.CR4%/ʮUI..嫧7.@Kc9'-ޱ]O.-Y=/?pFS@'+aj\.+FD2>zb@JN)*Mwʽ/)=P5?n\=Aêr+)Cƹ2(6k9AnY;<̫.)=żĶ5'0ê=DvY97ܫ0)9ξxô:'-ӫCH\84h7*6jŰ@(+pJMb8/M=+4]ƯK))NPTu8.AI-4aoSʯ`+'A\^9,:\.4V^LϮ,':kn;+424OTFܯ/'5ð=+/ͩ75NN?4'0δC+-쫩<7MJM2;jtDFëf+(CqϾ4)8b5U**N^[2.X6+8ҿ|Ǹ8(2m26[YMʯY*(KG?]qA9[5'0ʰ^@.6p,,L⾺^-*J=/>Pd7'.ǫ=FsX<=ȫw+(E[mk6.K:*4ټϻ=*/Ȩ22OzRӲ+'AJagA>ҭ,'=[W:/E>)/ܿC+.ө2/HY߶.';M9G}S>L>',鮰NdO44٫.)={ξ4+4EhHe5%/ƫAON8<Ūh+)Idg94SD7C{PAL]bx \ No newline at end of file diff --git a/SOUNDS/TONES/RC210#5.ulaw b/SOUNDS/TONES/RC210#5.ulaw index 88c7cce..246868b 100644 --- a/SOUNDS/TONES/RC210#5.ulaw +++ b/SOUNDS/TONES/RC210#5.ulaw @@ -1 +1 @@ -\I>82/--.06>Oܿ@1*%!!$(.;WɶW;.($!!%*1@I6,'"  "',6I׻@1*%!!$(.;WɶW;.($!!%*1@I6,'"  "',6I׻@1*%!!$(.;WɶW;.($!!%*1@~I6,'"  "',6I׻@1*%!!$(.;WɶW;.($!!%*1?I6,'"  "',6I׻?1*%!!$(.;WɶW;.($!!%*1@I6,'"  "',6I׻@1*%!!$(.;WɶW;.($!!%*1@I6,'"  "',6I׻@1*%!!$(.;WɶW;.($!!%*1@I6,'"  "',6I׻@1*%!!$(.;WɶW;.($!!%*1@I6,'"  "',6I׻@1*%!!$(.;WɶW;.($!!%*1@I6,'"  "',6I׻?1*%"!"$(,4?\ϾiQIDBCEIMU^jxUE=99,$ %.HE-% $,AɮM/& #+<ұZ2'!")8崨{6("!(5i:*"!'1T>+# %.JC-$ $-BǮK/& #+=ϰW2'!"*9߳o5(!!(5o9*"!'2W=+# &/KB-$ $-CƮJ.% #+>ίT1'!"*:ܳi5(!"(6{8)"!'2Z<+# &/MA,$ %-EĭH.% $,>̯Q0& #*:ٲc4(!")78)"!'3];+# &/N?,$ %.FíG.% $,?˯O0& #*;ֱ^3'!")77)"!(4a;*# &0P?,$ %.H­E.% $,@ɮO4*&&*2DۼiF<99=EUTF??HlɺB2--6V;)"#+F<( )??) ';êG+!&7˫O,"%3׭_.#$0ﯣ0$#._3%",O7&!+G;' )@?) (( (=C*! '9ǫK+!%5ϬW-"$1߮o/##/o1$"-W5%!+K9' !*C=( (>A)! ':ŪI+!&6ͬS-"%2ۭg.##/1$"-[4%",M8&!*E<( )?@) ';êG+!&7˫O,"%3׭_.#$0ﯣ0$#._3%",O7&!+G;' )@?) (( (=C*! '9ǫK+!%5ϬW-"$1߮o/##/o1$"-W5%!+K9' !*C=( (>B)! ':ƫM/('->ֶ_=54:IȿzYSV_q \ No newline at end of file +_MD=852246;DUźF7.+'%%'*-4?[ͻ[?4-*'%%'+.7FƷM;1,('%'(,1;MۿF7.+'&%'*-4?[ͻ[?4-*'%%'+/7F~ƷM;1,('%'(,1;MܿF7.+'%%'*-4?[ͻ[?4-*'%%'+/7F~ƷM;1,('%'(,1;Mۿ~F7.+'%%'*-4?[ͻ[?4-*'%%'+.7EƷM;1,('%'(,1;MۿE7/+'%%'*-4?[ͻ[?4-*'%%'+.7F~ƷM;1,('%'(,1;MۿF7/+'%%'*-4?[ͻ[?4-*'%&'+.7FƷM;1,('%'(,1;MܿF7.+'%%'*-4?[ͻ[?4-*'%%'+/7FƷM;1,('%'(,1;Mۿ~F7/+'%%'*-4?[ͻ[?4-*'%%'+.7FƷM;1,('%'(,1;MۿF7.+'%%'*-4?[ͻ[?4-*'%%'+.7FƷM;1,('%'(,1;MܿE7/+('(*-1:E_ĻlWMIHIJMRZbmz~ZJB>>@KlξJ8/++.:UŲF1*%'+4JʲM4+'%*1EеV7+'%)/?ܸf:-'%(.<<.(%',9c?/)%'+7T¯E1*%'+4LɲK4+'%*1EεS5+'%)/?ڷ`9,'%(.=<.(%'-:g>.)%'+6WC1*%'+4MDzJ2+'%*1GʹR5+'%)/@ط^8,'%(.=麭|;-(%'-:l>/(%',7YC/)%'+4NƱI2*''*2H̴O5+'%)/Bշ[8,'%(.>幬r:-'%'-:r>/(%',8[B/)%'+5OűH2*''*2I˴N4+'%)/DӵY7,'%(.>߹l:-'%(-;|=.(%',8^@/)%'+5RıG1*%'+2JɲM4+'%*1DеW7+'%).>ݸg:-'%(.<=.(%',9a?/)%'+5S¯E1*%'+4KɲL4+'%*1EϵU7+'%)/?۷b9,'%(.<ﺭ<.(%'-:e?/)%'+7V¯E1*%'+4MȲJ4+'%*1FʹT:.++/8IlK@>>BJZYKEEMn;H822;[IJ?.()/K@-''.EĭE.'',?ɯL/'%+<ϯU1(%+9ܲd4)%*7󵩥7*%)4d9+%(1U<+%'/L?,''.F­E.''-@ǮJ/'%+=ͯQ1(%+:ز^2(%*7괩5)%)4j8+%(2X;+%'/M>,''.HD-''-BƮI.'',>̯O/'%+:ձ[2(%*7䴩s5)%)5q7*%(2[:+%'/O>,''.IB-''-CŮG.'',>ʯM/'%+;ұX2(%+8߲k4)%)57*%(2^:+%(1Q=+%'/J@-''.EĭF.'',?ɯL/'%+<ϯU1(%+9ܲc4)%*7󵩥7*%)4c9+%(1U<+%'/L?,''.F­E.''-@ǮJ.'%+=ͯQ1(%+:ز^2(%*7괩~5)%)4k8+%(2X;+%'/M>,''.HD-''-BƮI.'',>̯O/'%+:ձ\2(%*7䴩r5)%)5r7*%(2[:+%'/O>,''.IB-''-DŮH.'',>˯R5-,2DۻdB::>M{]X[dt \ No newline at end of file diff --git a/SOUNDS/TONES/RC210#6.ulaw b/SOUNDS/TONES/RC210#6.ulaw index ecd4ae0..1216af5 100644 --- a/SOUNDS/TONES/RC210#6.ulaw +++ b/SOUNDS/TONES/RC210#6.ulaw @@ -1 +1 @@ -\I>82/--.06>Oܿ@1*%!!$(.;WɶW;.($!!%*1@I6,'"  "',6I׻@1*%!!$(.;WɶW;.($!!%*1@I6,'"  "',6I׻@1*%!!$(.;WɶW;.($!!%*1@I6,'"  "',6I׻@1*%!!$(.;WɶW;.($!!%*1@I6,'"  "',6I׻@1*%!!$(.;WɶW;.($!!%*1@I6,'"  "',6I׻@1*%!!$(.;WɶW;.($!!%*1@I6,'"  "',6I׻~@1*%!!$(.;WɶW;.($!!%*1@O>60.-./38>J\oOB<99>Kķw=/)&',9n9*"!'1V=+# %/KB-$ $-CƮJ/% #+=ίU1'!"*9ݳk5(!!(6w9)"!'2Y<+# &/LA-$ %-DŭI.% #,>ͯR1& "*:ڲe4(!")68)"!'3\<+# &/N@,$ %.FíG.% $,?˯O0& #*;ײ_3'!")7ﵨ7)"!'3_;*# &0O?,$ %.G­F.% $,?ʮN/& #+<Ա\3'!")8鵨6)"!(4e:*" &0R>,# %.ID-% $-AȮL/& #+<ѰY2'!")9䴨w6(!!(5k:*"!'1U=+# %/KK6.,,0;PֿdNHGJP\n`KA>BSؾS8.,0@вP.%"&5ӭ[-"$0箣/##.g2%"-S6&!+I:' !)A>( (=D*! '9ǫK+!%5ϬX-"$1߮p/##/o1$"-W5%!+K9' !*C=( (>B)! ':ƪI+!&6ͬS-"$2ܭg.##/~1$"-[4%",M8&!*E<( )>@) ';ĪG+!&7̫O,"%3ح_.#$0柺0$#._3%",O7&!+G;' )??) (<©F*!&8ʫM,"%4ӭ[-"$0箣/##.g2%"-S6&!+I:' !)A>( (=D*! '9ȫK+!%5ϬW-"$1߮o/##/o2&"%0Z>/,/:YǸQB?BMe \ No newline at end of file +_MD=852246;CUźF7.+'%%'*-4?[ͻ[?4-*'%%'+.7FƷM;1,('%'(,1;MۿF7.+'%%'*-4?[ͻ[?4-*'%%'+.7FƷM;1,('%'(,1;MۿF7/+'%%'*-4?[ͻ[?4-*'%%'+.7FƷM;1,('%'(,1;MۿF7/+'%%'*-4?[ͻ[?4-*'%%'+.7FƷM;1,('%'(,1;MۿF7.+'%%'*-4?[ͻ[?4-*'%%'+.7FƷM;1,('%'(,1;MܿF7.+'%%'*-4?[ͻ[?4-*'%%'+.7F~ƷM;1,('%'(,1;Mۿ}F7.+'%%'*-4?[ͻ[?4-*'%%'+/7FƷUD;742459=DN_rUH@>>COɼxB5.+,1>p>.(%',7ZB/)%'+5OűH2*''*2I˴N5+'%)/BӵY7,'%(/>Ṭn:-'%'-;y>.(%',8]@/)%'+5PıG2*''+2IʲM4+'%)1DҵW7+'%(.>޸i:-'%(.;=.(%',9_@/)%'+5SįF1*%'+4KɲL4+'%*1EϵU7+'%)/?ܸd9,'%(.<򺭧<.(%',9d?.)%'+7T¯E1*%'+4LȲK4+'%*1EδS5+'%)/@ٷ_9,'%(.=캭;.(%'-:i>/(%'+7WC1)%'+4MDZI2+'%*2GʹP5+'%)/@׷]8,'%(.>躭y;-'%'-:m>/(%',7ZB/)%'+5OǴO;4116?VŽhSMLNV_peOGDHXĻX=417FָV4+(+:ز^2(%*6괩5)%)4j8+%(2X;+%'/M>,''.GD-''-BƮI/'',>̯O/'%+:ձ\2(%*7䴩s5)%)5r7*%(2[:+%'/O>,''.IB-''-DŮH.'',>˯M/'%+;ѱX2(%*8߲j4)%)57*%(2_:+%(1Q=+%'/J@-''.DĭF.'',?ɯL/'%+<ЯU1(%+9ܲd4)%*6󵩥6*%)4d9+%(1T<+%'/L?,''.E­E.''-@ȮK.'%+=ίQ1(%+:ز^2(%*6괩5)%)4k8+%(2X;+%'/M>,''.GD-''-BƮI.'',>ͯO/'%+:ձ[2(%*7䴩r5)%)5r8+(+6^C515>]̽WHEHQi \ No newline at end of file diff --git a/SOUNDS/TONES/RC210#7.ulaw b/SOUNDS/TONES/RC210#7.ulaw index 964db4e..8a8eadb 100644 --- a/SOUNDS/TONES/RC210#7.ulaw +++ b/SOUNDS/TONES/RC210#7.ulaw @@ -1 +1 @@ -L;:JɲR0+2u:-/DȶcKOmR?I57HZnȷ<)&4QH&"M?&$Y H:*,>Ӽ}A0.@A!#쟗"*7)<l."&<_GMlQ?J57HYnȷ<)&4QH&"M?&$Y H:*,>Ӽ}A0.@A!#쟗"*7)<l."&<_GMlQ?J57HZnȷ<)&4QH&"M?&$Z H:*,>Ӽ}A0.@A!#쟗"*7)<l."&<_GMlQ?I57HZnȷ<)&4QH&"M?&$Z H:*,>Ӽ}G76HįM.*3;/2IʹbMOe \ No newline at end of file +^NM\dF?G|ȾMAEWo]awdSOdO95?۶6+.J@*'2Ӭ/'+FC-+7۲<28Rɻ[JK[~jwO=;IҸb5-2[;*)8ƫ^-%,S;**9ʮi5.6ZN>@RUFCUϻU7/98*+>K+'.5(*=O/,5vC8;OnZ_vcSOeO95?۶6+.J@*'2Ӭ/'+FC-+7۲<28Rɻ\JK[ixO=;IҸc5-2[;*)8ƫ_-%,S;**9ʮi5.6[M>@R~UFCTϻU7/98*+>K+'.~5(*=O/,5uC8;OnZ^wcSOdO95?ڶ6+.J@*'2Ӭ/'+FC-+7ڲ<28Rɻ\JK[ixO=;IҸc5-2[;*)8ƫ_-%,S;**9ʮj5.6[N>@R~UFCUϻU7/98*+>K+'.5(*=O/,5vC8;OnZ^wcSOdO95?۶6+.J@*'2Ӭ/'+FC-+7۲<28Rɻ[JK[jxO=;IҸb5-2[;*)8ƫ^-%,S;**9ɮj5.6[N>@RZKJ[_C>HǿNDG[o_aq \ No newline at end of file diff --git a/SOUNDS/TONES/RC210#8.ulaw b/SOUNDS/TONES/RC210#8.ulaw index e967a33..3171f52 100644 --- a/SOUNDS/TONES/RC210#8.ulaw +++ b/SOUNDS/TONES/RC210#8.ulaw @@ -1 +1 @@ -Q?98;E[ZNS羮.;?%) 'ע.#/LKAJ׳(?;$*>TCDk1.[)&5^gGAPȮE"$0 ".HMAH޵*:?%) 'ע.#/LKAJ׳(?;$*>TCDk1.^.%#'.>goVRaŻdJCCJVl \ No newline at end of file +aQKJMWii^cA0*(*1MQ90/3ѳ~>1/09FfxYS^·]8+&%+6fG5//5?V^SXʺ>.'%(0IůX90/3;LiVTiҾL3*%&,<ڴ>3/08E`ZS]Ÿj9,&%*4ZJ6//4>S`TW~̻A/(%'/Eɰ];1/1:JsmXTeֿP4*%&+:涫A3/07B]\S[ƹ;,'%)3QM80/3=PdUVuμE0(%'.A̱i<1/19HkqXS`W6+&%+8~D4/06AY]SYȹ=-'%)1LQ90/3ѳ~>1/09FfwYS^·]8+&%+6fG5//5?V^SYʺ>.'%(0IůX90/3;LiVTiӾL3*%&,<ڴ>3/08E`ZS]Ÿi9,&%*4ZJ6//4>R`TW~̻A/(%'/Eɰ];1/1:JsmXTdֿO4*%&+:涫A3/07B]\S[ƹ;,'%)3QM80/3=PcUVuμE0(%'.AͱlA97:APqzdbmo[UU[eu \ No newline at end of file diff --git a/SOUNDS/TONES/RC210#9.ulaw b/SOUNDS/TONES/RC210#9.ulaw index c2e5553..1d0319f 100644 --- a/SOUNDS/TONES/RC210#9.ulaw +++ b/SOUNDS/TONES/RC210#9.ulaw @@ -1 +1 @@ -RHLǽ>6<4,2-%,((((((((((((((((((((~((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((~(((((((((((((((((((((((((((((((((()!+.(07/:C=H^_p~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^KHYҿK87JŲ?--@:'&;4!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"84!"85#$;;)+@A03IǷM>@We]h}~~~~~~~~~~~~~~~~~~~~~~~wPHMŽk=6=踯c2,4ந^,%-ܩZ'*٧Z'*ڧY'*ڧZ'*ڧZ'*ڧY'*ڧZ'*ڧY'*ڧZ'*ڧZ'*ڧZ'*ڧZ'*ڧZ'*ڧZ'*ڧZ'*ڧZ'*ڧZ'*ڧZ'*٧Z'*ڧZ'*ڧZ'*ڧZ'*ڧZ'*ڧZ'*ڧZ'*٧Z'*ڧZ'*ڧZ'*ڧZ'*٧Z'*٧Z'*ڧZ'*ڧZ'*ڧY'*ڧY'*ڧZ'*ڧZ'*ڧZ'*ڧZ'*ڧZ'*٧Z'*ڧZ'*ڧZ'*ڧY'*ڧZ'*ڧY'*ڧZ'*ڧZ'*ڧZ'*٧Z'*ڧZ'*ڧZ'*ڧZ'*ڧZ'*٧Z'*ڧZ'*ڧY'*ڧZ'*ڧZ'*٧Z'*ڧZ'*ڧZ'*ڧZ'*ڧY'*ڧZ'*٧Z'*ڧZ(!,ܫ^-(2బd6/;軶lA>Ix]`s \ No newline at end of file +WMPD;@~:18~2+1-%--%--%--%--%-~-%--%--%-~-%-~-%-~-%--%--%--%-~-%--%-~-%-~-%-~~-%--%--%--%--%--%--%--%-~-%-~-%--%--%--%--%--%--%--%--%--%-~-%-~-%--%-~-%--%--%--%--%--%--%-~-%-~-%-~~-%--%-~-%--%--%-~~-%-~-%--%--%--%-~-%--%--%--%--%--%--%-~~.'/4-7~<5>~IBL~cct~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~bOM]O=,+?:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:'(=:)*??./FIJG69M̼RDF[iak~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~}~~~~~~~~~~~~~~~~~~~~~~xVMRmB;B뽵h81:崭b1+2߮^,%.ݬ^,%.ެ],%.ެ^,%/ެ^,%/ެ],%.ެ],%.ެ],&.ݬ^,%/ެ^,%.ެ^,%.ެ^,%/ެ^,%/ެ^,%/ެ^,%/ެ^,%/ެ^,%/ެ],%/ݬ^,%.ެ^,%/ެ^,%.ެ^,%.ެ^,%.ެ^,%.ެ^,%/ݬ^,%.ެ^,%/ެ^,%.ެ^,%.ݬ^,%/ݬ^,%/ެ^,%.ެ^,%.ެ],%/ެ],%/ެ^,%.ެ^,%.ެ^,%/ެ^,%.ެ^,%.ݬ^,%.ݬ^,%.ެ^,%/ެ],%/ެ^,%.ެ],%.ެ^,%.ެ^,%.ެ^,%.ݬ^,%.ެ^,%/ެ^,%/ެ^,%/ެ^,%/ݬ^,%/ެ^,%/ެ],%/ެ^,%.ެ^,%.ݬ^,%.ެ^,%/ެ^,%/ެ^,%/ެ],%.ެ^,%.ݬ^,%/ެ^-'1߯c2-8己i;5?뿻oGDMzaev \ No newline at end of file diff --git a/SOUNDS/TONES/SatPass.ulaw b/SOUNDS/TONES/SatPass.ulaw index 6057016..789ab49 100644 --- a/SOUNDS/TONES/SatPass.ulaw +++ b/SOUNDS/TONES/SatPass.ulaw @@ -1 +1 @@ -Ҧ-,%!;;!%,,%!;;!%~,,%!;;!%~,,%!;;!%~,,%!;;!%~,,%!;;!%,,%!;;!%,,%!;;!%~,,%!;;!%,,%!;;!%~,,%!;;!%,,%!;;!%,,%!;;!%~,,%!;;!%,,%!;;!%~,,|%!;; &Ruyzz{|}}~~~~~~~~~~~~~~~~~~~}}||{yq֩(((()())~)))()()((())~)()())~))~)())~))~)())~))~))~)()()))())~)()()()))()()()())~))~)(((((qyz{||}}~~~~~~~~~}|zvkçB'$5§B'$5§B'$5§B'$5§B'$5§B'$5§B'$5§B'$5§B'$5§B'$5§B'$5§B'$5§B'$5§B'$5§B'$5§B'$5§B'$5§B'$5§B'$5§B'$5§B'$5§B'$5§B'$5§B'$5§B'$5§B'$5§B'$5§B'$5§B'$5§B'$5§B'$5§B' #7 \ No newline at end of file +ث2%1+'??'+~1%1~+'??'+}1%1~+'??'+}1%1~+'??'+}1%1~+'??'+|1%1+'??'+}1%1}+'??'+}1%1~+'??'+}1%1~+'??'+|1%1}+'??'+|1%1~+'??'+}1%1+'??'+}1%1~+'??'+}1%1~+'??'+~1%1~+'??'+}1%1z+'??'+Wuyyz{{{{|}}}}}~|~}}~|~|~|}}}}}~}~}~}}}}}}}}}}}}}}~}}}}}}}}}}}}}~}}~}}~}~}~}~}}~|~}}}}~}~}}}~|~}~}~|~}}~}~}~}~|~|~|~|~}~}~|~|}~}}~|~}~}~||{|{ysۮ-%--%-~~.%-}}.%.}}.%.}~.%-~}.%-}~.%-~~-%-~}.%.}}.%-}~.%-}~.%.|~.%.|~.%-}~.%.|~.%.|}.%-~}.%.}.%.|}.%.|~.%-~~.%-~}.%.}~.%-~~.%.}~.%-}}.%-}}.%-}}.%.~~.%-~}.%-}~.%-}}.%-}}.%.|~.%.|~.%-~-%--%-rxyzz{{{|~}}~}~}~|~|~}}}}~|~}}{{|}}~}~}~}|}}~}~}}}}}~|{{yvmɬH,%*:ȬH,%*:ȬH,%*:ȬH,%*:ȬH,%*:ȬH,%*:ȬH,%*:ȬH,%*:ȬH,%*:ȬH,%*:ȬH,%*:ȬH,%*:ȬH,%*:ȬH,%*:ȬH,%*:ȬH,%*:ȬH,%*:ȬH,%*:ȬH,%*:ȬH,%*:ȬH,%*:ȬH,%*:ȬH,%*:ȬH,%*:ȬH,%*:ȬH,%*:ȬH,%*:ȬH,%*:ȬH,%*:ȬH,%*:ȬH,%*:ȬH,')< \ No newline at end of file diff --git a/SOUNDS/TONES/ShootingStar.ulaw b/SOUNDS/TONES/ShootingStar.ulaw index 7d7849f..30804ea 100644 --- a/SOUNDS/TONES/ShootingStar.ulaw +++ b/SOUNDS/TONES/ShootingStar.ulaw @@ -1 +1 @@ -̝y~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~||~u󝑑yf'1d#;D J8%/*Ƞ*.%7L!B<#]2(Ѣ,,'3Y#=@!N6&㣗.*ğ)/v$9H F:$k0)̡+-&5Q"?>"U4'٣-+(1c#;D J8%/)Ƞ*.%7L!B<#]2(Ѣ,,'3Y#=@!N6&㣗.*ğ)/w$9H F:$k0)̡+-&5Q"?>"U4'ܢ,+"M.)ɠ*.&6M!A<#[3'Ӣ,,'2[#>"S5&ܣ-+(0g$:E I8%/)ɠ*.&6M!A<#[2'Ӣ,,'2[#>"S4&ۣ-+(0g$:E I9% \ No newline at end of file +޲|1''0~0''00''0~0''1~0''0~1''00''00''0~0''00''00''00''00''0~0''00''00''00''00''00''01''00''00''00''1~0''0~0''1~1''0~0''00''0~1''00''0~0''0~0''00''0~0''0~0''1~0''0~0''0~1''00''00''0~0''00''00''00''1~0''00''00''00''00''00''00''00''1~0''00''0~0''0~~1''00''0~1''01''00''0~0''00''1~0''0~0''00''00''00''0~0''00''00''00''0~0''0~0''1}0''0~0''00''00''00''00''00''00''00''0~0''0~0''01''0~0''0~0''00''00''00''1~0''00''10''00''00''00''1~0''01''0~0''0~0''1~0''0~1''0~0''01''0~0''00''0~0''00''0~0''0~0''0~1''0~0''00''00''0~0''00''1~0''00''1~0''0~0''0~0''01''0~0''0~0''0~0''1}1''00''00''0~0''00''00''00''0~0''1~1''00''1~0''00''0~0''00''00''00''0~~0''1~0''00''0~0''00''00''1~1''00''0~0''00''00''00''0~0''00''10''0~0''0~~0''0{2''0|0''q<.'%)0Fʲp9,''*4NïW5+''+6\L2*%',:E/)%'.>۶>.(%(/Cʹ:,'%*2KƯ^7+''+5VO4*'',9lG0)%'-<⸫@.(%(.@Ҵ<-'%)1Hɰi9+''*4PU5+''+7_J2*%'-;﹬C/(%(.>ص=.'%)/E̲{9,'%*2Mį[6+''+5YN4*%',:tF/)%'.=޷?.(%(/Aϴ;-'%)0Jǰc8+''+5SR4+''+8fI0)%'-<鹫B.(%(.?Ե=-'%)1Fʲo9,''*4NïX5+''+6\L2*%',:D/)%'.=۶>.(%(/Cʹ:,'%*2KƯ^7+''+5VO4*'',9lG1)%'-=⸫@.(%(.@Ҵ<-'%)0Hɰi9+''+4PT5*''+7_K2*%'-;﹬C/(%(.>׵=.'%)/E̲|9,'%*2Mį[6+''+5YM4*%',9uF/)%'.=޷?.(%(/Aϴ;-'%)0JDZc8+''+5SR4+''+8fI0)%'-<븬@/(%(.?8_C/(%'.=۶>.(%(/Cʹ;-'%*2Jư_7+''+5UO4*'',9kH1)%'-<丫@.(%(.@Ҵ<-'%)0Gɰk9,''*4OU5+''+7_J2*%'-:򹬧C/(%(.>ص=.'%)/E̲~:,'%*2Lį[6+''+5XN4*%',9sF1)%'.=߷?.(%(.Aϴ;-'%)0IȰd8+''+4RR4+''+8dJ0)%'-;빬A.(%(.?յ=.'%)0Fʲs9,'%*4MïX5+''+6\L2*%',:D/)%'.=۶>.(%(/Cδ;-'%*2Jǰ_7+''+5UO4*'',9jG0)%'-<丫@.(%(.@Ҵ<-'%)0Gɰj9,''*4OU5+''+7_J2*%'-:򹬧C/(%(.>ص=.'%)/D̲:,'%*2Lį[6+''+5XM4*%',9rF0)%'.=߷?.(%(.Aϴ;-'%)0IȰd8+''+4RR4+''+8dI0)%'-;깬A.(%(.?յ=.'%)0Fʲs9,'%*4MïX5+''+6[M2*%',: \ No newline at end of file diff --git a/SOUNDS/TONES/Stardust.ulaw b/SOUNDS/TONES/Stardust.ulaw index f55e687..70bf13f 100644 --- a/SOUNDS/TONES/Stardust.ulaw +++ b/SOUNDS/TONES/Stardust.ulaw @@ -1 +1 @@ -M:24Bα." (DD( !-6$$6Ĩ-! (DD( !-6$$6Ĩ-! (DD( !-6$$6Ĩ-! (DD( !-6$$6Ĩ~-! (DD( !-6$$6Ĩ-! (DD( !-6$$6Ĩ-! (DD( !-6$$6Ũ-! (DD( !-6$$6Ũ-! (DD( !-6$$6Ĩ-! (ED( !-6$$6Ĩ-! (DD( !-6$$6Ĩ-! (DD( !-6$$6Ĩ-! (EE( !-6$$6Ĩ-! (DD( !-6$$6Ĩ-! (DD( !-6$$6Ĩ-! (DD( !-6$$6Ĩ-! (DD( !-6$$6Ĩ-! (DD( !-6$$6Ĩ-! (DD( !-6$$6Ĩ-! (ED( !-~6$$6Ĩ-! (DD( !-6$$6Ĩ-! (DD( !-6$$6Ĩ~-! (DD( !-6$$6Ĩ-! (DD( !-6$$6Ĩ-! (DD( !-6$$6Ĩ-! (DD( !-6$$6Ĩ-! (DD( !-6$$6Ĩ-! (ED( !-6$$6Ĩ-! (DD( !-~6$$6Ĩ1((1N´\JHWI96AӲ6&$/ͨ3" ,۩7# +;$)\>%(NE&&FM(%?[)$;|+ #7, "3.!!0Ŧ/!!.ͨ3" ,۩7# +;$)\>%(NE&&FM(%?[)$;|+ #7, "3.!!0Ŧ0!!.ͨ3" ,۩7# +;$)\>%(NE&&FM(%?[)$;|+ #7, "3.!!0Ŧ/!!.ͨ3" ,۩7# +;$)\>%(NE&&FM(%?[)$;|+ #7, "3.!!0Ŧ/!!.ͨ3" ,۩7# +;$)\>%(NE&&FM(%?[)$;|+ #7, "3.!!0Ŧ0!!.ͨ3" ,۩7# +;$)\>%(NE&&FM(%?[)$;}+ #7, "3.!!0Ŧ0!!.ͨ5&&2ಬJ:;IqGJyA*$2D-ee0'57 gOL/ۡϬ.š:N3 &$5rH()[!Jh49CHeĤ;VPǭ:ߚ/-KC"ǘ#&H;(,:DŠg8볣L>>?ʻJN,"-T^.""6;3՟.ݫ.V䱭}3:,>?ʻJN,"-T^."&#=IC䶮IH^ \ No newline at end of file +^MGIVǼ~C86=WʹX=67AJ959J׽A76=WʹX<67AJ959Jؽ~A76=WʹX=67A~J959Jؽ~A76=WʹW=67A~J959JؽA76=WʹW=67AJ959JؽA76=XʹW=67AJ959JؽA76=WʹW=67AJ959Jؽ~A76=XʹW=67A~J959JؽA76=XʹX<67A·J959JؽA769GƮX42AqqFX}6');ȴ}Ҽ7()=`N=-,AO8ZG[=*)8ۼuʵ<)'5̯j=+)9ëk@GyH2.>W42ApqF,0̨<&-U^2'  &.E˳H7/..3;Joa_hdPF?==@Lxʻ[;.(&&*3KŮ7'%5խ=%(L](4/(B"!=,0̨<&-U]2'  &.E˳H7/..3;Joa_hePG?==@Lxʻ[;.(&&*3KŮ7'%5խ=%(L](4/(B"!=,0̨<&-U^2'  &.E˳H7/..3;Koa_hdPF?==@Lxʻ[;.(&&*3KŮ7'%5խ=%(L](4/(B"!=,0̨<&-U^2'  &.E˳H7/..3;Koa_hdPF?==@Lx˻[;.(&&*3KŮ7'%5խ=%(L](4/(B"!=,0̨<&-U]2'  &.E˳H7/..3;Koa_h~dPF?==@Lx˻[;.(&&*3KŮ7'%5խ=%(L](4/(B"!=,0̨<&-U]2'  &.E˳H7/..3;Koa_hePF?==@Lxʻ[;.(&&*3KŮ7'%5խ=%(L](4/(B"!=,0̨<&-U^2'  &.E˳H7/..3;Koa_hePF?==@Lxʻ[;.(&&*3KŮ7'%5խ=%(L](4/(B"!=,0̨<&-U^2'  &.E˳H7/..3;Joa_hdPF?==@Ly˻[;.(&&*3KŮ7'%5խ=%(L](4B2..32-.6O~1%!(;ɬ;(!%1I,"",I1%!(;ɬ;(!%1I,"",I1%!(;ɬ;(!%1I,"",I1%!(;ɬ;(!%1I,"",I1%!(;ɬ;(!%1I,"",I1%!(;ɬ;(!%1~I,"",I1%!(;ɬ;(!%1I,"",I1%!(;ɬ;(!%1I,"",I1%!(;ɬ;(!%1I,"",I1%!$,?϶QDCITk \ No newline at end of file +J>B5+1~-%-~-%-~-%-~~-%--%--%--%-~-%--%-~-%--%--%-~~-%--%-~-%-~-%-~-%--%--%-~-%-~-%--%--%--%-~-%--%--%--%--%--%-~-%--%--%--%-~-%--%-~-%-~-%--%-~~-%-~-%--%--%-~-%-~-%--%/~92=¾~STi~~J<:@4('11''11''11''11''11''11''11''11''1~1''11''11''11''11''11''1~1''11''11''11''11''11''11''1~1''1~~1''11''11''1~1''11''1~1''1~1''1}1''1~1''11''1~1''11''11''11''1~7./=RMVj_D824;Uű7+%'-?ͱ?-'%+7M1(%(1M7+%'-?ͱ?-'%+7~M1(%(1M7+%'-?ͱ?-'%+7M1(%(1M~7+%'-?ͱ?-'%+7M1(%(1M7+%'-?ͱ?-'%+7M1(%(1M7+%'-?ͱ?-'%+7M1(%(1M~7+%'-?ͱ?-'%+7~M1(%(1M7+%'-?ͱ?-'%+7M1(%(1M7+%'-?ͱ?-'%+7M1(%(1M7+'*1EջWIIMYm \ No newline at end of file diff --git a/SOUNDS/TONES/Waterdrop.ulaw b/SOUNDS/TONES/Waterdrop.ulaw index 6582278..adbe12c 100644 --- a/SOUNDS/TONES/Waterdrop.ulaw +++ b/SOUNDS/TONES/Waterdrop.ulaw @@ -1 +1 @@ -ⷨ6)"")66)""(66)""(6~6)"")6~6)"")66)""(6~6)"")66)"")66)""(6~6)""(66)"")66)"")66)"")66)"")66)"")66)""(6~6)"")66)""(6~6(""(6~6)"")6ڮ?*"$/YV.$"*A6' '7֮?*"$/YV.$"*A6' '7֮?*"$/YV.$"*A6' '7֮?*"$/YV.$"+A6' '6Ѭ>( !+Ll."&7Ǫ:&"-]R,! '<5%#/G*! )B0$$3Ҭ>( !+Lm."&7Ǫ:&"-]R,! '<5%#/G*! )B0$$3ϩO* "/ϪO* "/ϪO* "/ϪO* "/ϪO* "/ϪO* "/ϪO* "/ϪO) "/ϪO* "/ϪO* "/ϩO) "/ϩO* "/ϩO* "/ϪO* "/ϩO* "/ϪO) "/ϪO* "/ϪO* "/ϪO* "/ϪO* "/ϩO* "/ϪO) "/ϪO* "/ϪO* "/ϪO* "/ϪO* "/ϪO* "/ϩO) "/ϩO) "/ϪO* "/ϪO* "/ϩQ) !<=-&!!%,9i=-&! %,9h=-&! %,9h=-&! %,9h=-&! %,9h=-&! %,9h=-&! %,9h=-&! %,9h=-&! %,9h=-&! %,9h=-&! %,9h=-&! %,9h=-&! %,9h=-&! %,9h=-&!!%,9i=-&! %+;B \ No newline at end of file +缭;.(%(.;~;.(%(-;~;.(%(-;~;.(%(.;~;.(%(.;;.(%(-;~~;.(%(.;~;.(%(.;;.(%(-;~;.(%(-;~;.(%(.;;.(%(.;;.(%(.;;.(%(.;;.(%(.;;.(%(-;};.(%(.;;.(%(-;};-(%(-;~;.(%(.;޴E.(%*5]Z4*%(/Gů;,'',<۴E.(%*5][4*%(/GŮ;,'',<۴E.(%*5][4*%(.GŮ;,'',<ڴE/(%*5]Z4*%(/GŮ;,'',;ױD-''/Pn4(%+<̯>+%(2aW1'',@ĭ:+%)5ﴨL.''.H6*%*9ױC-''/Po4(%+<̯>+%(2`W1'',@ĭ:+%)5ﴨL.''.H6*%*9ծU.'(5կU.'(5ծU/'(5ծU/'(5կT/'(5ծU/'(5կU.'(5կU.'(5ծU.'(5կU/'(5ծU.'(5ծU/'(5ծU.'(5կU.'(5ծU/'(5կU.'(5ծU.'(5ծU/'(5կU/'(5կU.'(5ծU/'(5ծT.'(5կU/'(5կU.'(5ծU.'(5կU.'(5կU.'(5ծU.'(5ծU.'(5կU.'(5կU.'(5ծW.''@B2+'%'+1>l²B2+'%'+1>k²B2+'%'+1>k²B2+'%'+1>k²B2+'%'+1>k²B2+'%'+1>k²B2+'%'+1>k²B2+'%'+1>k²B2+'%'+1>k²B2+'%'+1>k²B2+'&'+1>k²B2+'%'+1>k²B2+'%'+1>k²B2+'%'+1>k²B2+'%'+1>l²B2+'%'+/?H \ No newline at end of file diff --git a/SOUNDS/TONES/Whippoorwhill.ulaw b/SOUNDS/TONES/Whippoorwhill.ulaw index 0901ecc..96cd9d1 100644 --- a/SOUNDS/TONES/Whippoorwhill.ulaw +++ b/SOUNDS/TONES/Whippoorwhill.ulaw @@ -1 +1 @@ -Ϥ$#t$#i$#`$#[%"W%"S%"O&"N&"K&!I&!H'!F'!D(!B(!@( ?) >) =) <* ;* :* 9+ 8+ 7,6,5,4-3-2.2.1.0////0.1.2.3-3-4,5,6+7 +8 +9 *: *; *< )= )> )? (@ ( C )h~}|||}}~~~~~~~~~~~~~~~~~~~~~}||{yvjɦQ&*اc()񨟨)(^+&O, %G. $?0 #<3!"87"!4;#!0>$ .E% -ɥM&+ӧ[')樟{)(i*'T, %J- $B/ #=2!"95""59"!2=# /B$ -ƥJ&,ΦU'*ݧi(){*'Z+&M- %E. $>1!#;4!"78"!3;# 0?$ .åG% ,˦O&+֧_()𨠨gMjpuy|~~~}}}}~~~~~~~~~~~~~~~~}|{zwmͩJ)#3Ũ@'$8;%&<6$'C2# )M/" +^,!!-ꫠ[* "/ѪK) #3ƨA'$7<%%<7$'B2# )L/" +\-!!-]+ "/ӪL) #2ǨB'$7<&%;7$'A3# )K/" *Z-!!,_+ ".ժM) #2ȨC'$6=&%;8$'@3#(J/" *X-!!,_+ ".֪ \ No newline at end of file +֪|*)s*)j*)c*)^+(Z+(W+(T+(R+(O+'M+'L,'K,'I-'G-'F-'E.'C.'B.'@.'?.'>.'=/'=/'<1%;1%:1%:2%92%84%84%74%65%55%56%47%48%49%29%2:%1:%1;%/<'/='/='.>'.?'.@'.B'.çC'.ħE'-ƧF'-ȧH'.i{}z{|z}y~y~x~y}y|{{{|z|{{{{{{|z|z|z|{|{|z|z|{|{{{{{{{{{{{{{{{{{{{{{{{{{|{{|z|{{{|{{{z|z|{{{{{{{|z|{{{{{{{{|z|{{{|{{{{{{{{{{{{|z|{{{{z|z|z|{{{{{{|z}y~y~xvtkάV+%.ݬe-%..%-`/%+T1'+K4'*E6')@9'(=<(':?)'6C*'4ȪJ+'2ΫQ+%/٬^,%.쭦w.%-j.%,X1'+N2'*G5')B8'(=:((:=('8B)'5ƪH*'2˫N+%1ԬY,%.㬦j-%.w.%,]/%+Q2'+J4'*C7')?:'(<=('9?)'6ĩE*'4ɫK+'1ϬT+%/ܬb-%.iQkosw~y}z|z{|z}y}y}z|z}z|z|{{{{{{|z|z|{{{|{{{|z|z|z|z|{|{{{{|z|z|z|y}x~xunӮN.%)9˭F,%*=Ĭ?+%+@;*%,H8)'.Q5('/`0''2ﯧ].'(5دO.')9̭G,%*<Ĭ@+%+@<*%,H8)'.O5('/_2''2_/'(5ٯO.')8̭G,%*<Ƭ@+%+?<*%,G9)'.N5('.]2''1b/'(4ۯQ.')8ͭH,%*;ƬB+%+?=*%,F9)%-N5('.[2''1b/'(4ܯ \ No newline at end of file diff --git a/SOUNDS/TONES/XPError.ulaw b/SOUNDS/TONES/XPError.ulaw index a44d064..cd3d07b 100644 --- a/SOUNDS/TONES/XPError.ulaw +++ b/SOUNDS/TONES/XPError.ulaw @@ -1 +1 @@ -J=MòD,0ϩ'!>+$FJ!.˔*$]87h%)/ DD /ϕ*&j79\%+."IA!2ז*(7 <V&-Ö/%N@"5+*7# ?R'/ə/(U@"%9,-8'#EO!)4Λ2,!]A&(=z".1!ĝ:+&LO&,:!֟#5/&i D++D"l'28&ˡ% =/+S##P, 0?"'ߥ)":7#+ťv(%H1$0K')i.&8>',ҩ,(B8(1é\++U4)8I+.꭬1+@?,3έ/-N;-9ĮV/1j8.@J06޳72LC2<δh76]?5CɶV8;>9MŹN:@ݼ?=ZļK=IԾeABoJAR\EJLH^ZKSySSpbZfvehroz}{}~K:8IƯK+%,*18ښ+1Й,/̘-.ǘ.-Ø/,1+4+6*8) j;(!]=(#U?'$ND'%KH&'GL&(DQ&)AY%+?c%,=r%-<🗜%/; 㟘%0:"۟%39#ՠ&59%Р&78'͡&:7(ˢ'<7*ʣ(!>7 +ȣ(#A7!-ǥ)%D7" .Ʀy* &H8$"0ŧl+"(K8%$3Ũe,$*N9'&5ũ_-&,S:((8ū].(.X;**:Ŭ[/*/]<,,=ƮZ1,3b=..?ǯY4.6i>/1CɳY709o@35H˶Z94=xD79Lͺ[=8@H;=PϽ]@=FƽL?BW_FBLPFI]dMKT\SWjqa_irnq{~}} \ No newline at end of file +\P^W@Fཽ<7R?.9ǭY-,\/%7C'+ݪ,'>9'.Ƨl*(L2'4K(+s.':='-ϩ+'D6'0W**W0'6E(+᫩-'>;'.ɩt+)K4'4M)+k/':?(-Ӫ,)C8'0é[++U2(7G),諪.)>=(/˪,*K6(5O+,g0);A*.׫.*E:)2ƫ_,+T5*8J+.0+?>+0ͫ.+K9+6S,.d4+02FL.)0ꮧ2')?F+'/⮥2'*@E+'0ޭ2'*AC+'0ڭ0'+CA*'2׭0'+E@*'2ӭ0'+F?*'4Ь/'+I?*(4ά/',J>*(5ͬ/',L=*)6ˬt/(-N=*)7ʬl/(-P=+*9ɬf/(.S<+*9Ǭ_/).X<*+:ƭ]/)/[;++<ƭZ/*/^;++<ĭW/*0c;+,=íU/+2i:,-?îS/+4o:,-@îP0+4z:-.AO0,5:-.EN0-6𵭲:./FN0.8굮:.0HM2.9涮;.2JM2.:ⶮ;/4KL4/<߷;04MK40=ݸ<05O²K52>ܹ=27RK64?۹=49UõK75Aں=5:XöK86Cٻ}>6;[÷L98Fؼv?8=]ĹL:9Hؽq@9>_ƺM<;JؽnA;@dǼM==LٿlC=ChȽN>>MjE>DlʾO@@PÿjF@HoPCCSiICJsRDFWiKFMyUHJ[jMIP}XKM^jPLT[NPblTPY^SVgnYV^bY[lo_]ekdgtznntyxy~~~ \ No newline at end of file diff --git a/SOUNDS/TONES/XPok.ulaw b/SOUNDS/TONES/XPok.ulaw index 860a8a6..74a3852 100644 --- a/SOUNDS/TONES/XPok.ulaw +++ b/SOUNDS/TONES/XPok.ulaw @@ -1 +1 @@ -½G6-)'(,8f2 &L/#C2!=69; 5?#0äG%.̦Q',٨e)*+([-'M/%E4$>8!";<#!7A% 3ŦI'0ͨS).۪e+-.+^0 *P4")I8$(C;&'>?(&;©F*%9ɫM,%6ѭW.!$4ޯh0#$23%$0d7'$/W:) $/O>+"$.JB-#$.FŮH.%%-CʯM1'! %-@гU4)#!"&->ٶ^7+%"#'.=幬m:-'$$(.<=/)&&).OùbF;6349?OȽlJ>978;APvNB=;;>ERžUHA>>AHTy[MHDDGMXsbUNLKMS]rma\[[^cly|yvwxz|}P<6=>(#+f7N4>68<1F.U+(%" !$˙'ߛ*`-K0@6:<4D/P,s)'$ "" %ɛ(ڜ+l-O1D6<<7D2O.h,* '"%%#'!ɝ*؞,}/W3I8@=;E7N2a/!-$+&)((*&ʟ-%ס/$񣚜2"^7!O; G?  ?H!H}ȾXC?Ir]GBJmbJFLiiNINhoSMQhw[UZl~g`ersorz~}} \ No newline at end of file +ZJA=<=@LrνG6.+)+/;^E2+'%(-9WƲG4+'%(-7PɴJ5,''(,5M͵N6,(''+5JзS9-(''+4F׹Z:.)''+2C޻c<.*''+0@齯q=/*''+0>?0+''*/=jA2+('*.<^ôD4,('*.:XǵI5-)(*.9RʶL7.*(*.8N͸O9.*(*.7KҹU:.+)*-6Hػ[bǷI8.,+-2=[ʹL9/,+-24.-.2:Mۿ_@5/..2:JgC70..29IĸsF92..29GǹH:4//29FpʻK<50049EgͽM=62049EaϾR?84249C\VA95459CYùZC:545:AWŻ_F<756:ATȽfI=978;ARʾmK?:89EOnYIA==?DOjþ\LC?>@FOg_NFA@AGOdfPIDCDIPcjULGFFJRaoYNJHIMSav\RMKLNUb{_VPNNRXcf[URRUZe|k^[WXZ_hznf_^]^el{wnkjjmow|}}{||}}~bOJPQ=9?rK4.5_I-'.RJ,%,LO-%+GY.'+Cf.'*?/')=0'):ë4'(8ȫ5'(6ͬ7('4ӭ9)'2ݮ<*'0>*'/nA+'.]F+'.TJ,'-NO-',IX.'+Eb/'+@z0'+=2(*<ë4(*9Ȭ6))8ͭ8*)6Ӯ:*)4ۯ=+)2갨?+)0vA,(/aF-)/WJ.).OO.).KX/)-Ga0*-Cs2*,@4*,>ŭ6++<ɮ8++:ͮ:++9ӯ<,+7ܲ>-+5贫@.+5~E.+4gH.+2[L/+2TP0+0NX2,/K_4,/Gn5-/Eį7-.Aǯ9..?˰;..=ϲ=..=մ>/.;ܵA/.:緮D0.9G2.8mK4.7aN5/6ZS6/6S[7/5Oa905MĴn:05Jȵ<25G˵=25Fη?44CӹA45AٹE55@޻F65?齴J75>L95>tO95=hS;6=_øY<7=[ƹ^=8=Wɹf?8=S˻o@9=IŽP?>IǾTA>H{ʿXC?Ho\D@Hj_FAHefIAHakJCH^sMDI\|NFJ[PHJZSJKZVKLYZMMY]NNY_POZcSR[~hWS[zlZV\wo\Y^tt_[_ryd_cs{keju~rnqzzxz}~~~ \ No newline at end of file diff --git a/SOUNDS/TONES/YellowJacket.ulaw b/SOUNDS/TONES/YellowJacket.ulaw index e1aa3ee..fbe48e6 100644 --- a/SOUNDS/TONES/YellowJacket.ulaw +++ b/SOUNDS/TONES/YellowJacket.ulaw @@ -1 +1 @@ -žI7-'" #'-:[IJH4+%!"&,6M̶Q8,&"!%*3Eٺc<.(#  $)/?@0)$  #'.;]òG4+%!"&,7N˶O7,&"!%*3F׹_;.'#  $)0?ッ?0)$  #'.;_±F3*%!"&,7OʵN7,&"!%+4Gչ];.'#  $)0@뽮?/)$  #(.AJWmF7//9b4%",M8&!*E<( )?@) ';êG+!&7˫O,"%3׭_.#$0ﯣ0$#._3%",O7&!+G;' )@?) (( (=C*! '9ǫK+!%5ϬW-"$1߮o/##/o1$"-W5%!+K9' !*C=( (>B)! ':ŪI+!&6ͬT.%%+:⹯uKEHSj \ No newline at end of file +þN<2,(&'),2>_ɸM:/+'&&(+1;RлW=1+(&&(+/9JݾhA4-)'&'*.5EõF7.*'&'),4?aȸL:/+'&&(+1g:+&(1R=+&'/JA-''.EĭF.'',?ɮL/'&+<ϯU1(&+9۲e4)&*7񵩥7*&)4e9+&(1U<+&'/L?,''.F­E.''-AǮJ/'&+=ͯR1(&+:ز_2(&*7괩5)&)4k8+&(2X;+&(/N>,'(.GD-''-BŮI/(',>̯O/'&+;Ա\2(&*7㴩s5)&)5s7*&(2\;+&(/O>,''/IB-''-DŮH.'',?ʮN/'&+;ѱY4++/>澵xOJMYm \ No newline at end of file From a72503fb723f2af9d234a28f7e81602012abaae1 Mon Sep 17 00:00:00 2001 From: Mason10198 <31994327+Mason10198@users.noreply.github.com> Date: Thu, 27 Jul 2023 21:22:16 -0500 Subject: [PATCH 8/8] v0.4.0 update --- SOUNDS/ALERTS/SWP_149.wav | Bin 0 -> 92592 bytes SkywarnPlus.py | 1 - config.yaml | 1 - 3 files changed, 2 deletions(-) create mode 100644 SOUNDS/ALERTS/SWP_149.wav diff --git a/SOUNDS/ALERTS/SWP_149.wav b/SOUNDS/ALERTS/SWP_149.wav new file mode 100644 index 0000000000000000000000000000000000000000..abf6f69e031da8ebc6cd69e8deab345a97bd2069 GIT binary patch literal 92592 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

6giiD;^c8E^s!$bvq85-fsfo;V?l-nHRh`&J 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 H&sY8rkLJp0 literal 0 HcmV?d00001 diff --git a/SkywarnPlus.py b/SkywarnPlus.py index 27227e6..c1f0210 100644 --- a/SkywarnPlus.py +++ b/SkywarnPlus.py @@ -41,7 +41,6 @@ import contextlib import math import sys import itertools -import random from datetime import datetime, timezone, timedelta from dateutil import parser from pydub import AudioSegment diff --git a/config.yaml b/config.yaml index 94d93e1..60dac99 100644 --- a/config.yaml +++ b/config.yaml @@ -358,7 +358,6 @@ AlertScript: # announce the full details of a Tornado Warning when it is detected. # The placeholder '{alert_title}' will be replaced with the title of the alert # when AlertScript executes the command. - # - Type: BASH Commands: - '/usr/local/bin/SkywarnPlus/SkyDescribe.py "{alert_title}"'