From 5a00f461e96ce7db3fa60b56d2d7d3ba84b37551 Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 4 Jun 2021 23:04:49 +0200 Subject: [PATCH 1/3] Sound update --- Moose Development/Moose/Ops/ATIS.lua | 10 +++++++++- Moose Development/Moose/Sound/SRS.lua | 3 +-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Moose Development/Moose/Ops/ATIS.lua b/Moose Development/Moose/Ops/ATIS.lua index 8f6d3045b..3799d974a 100644 --- a/Moose Development/Moose/Ops/ATIS.lua +++ b/Moose Development/Moose/Ops/ATIS.lua @@ -255,6 +255,13 @@ -- # Marks on the F10 Map -- -- You can place marks on the F10 map via the @{#ATIS.SetMapMarks}() function. These will contain info about the ATIS frequency, the currently active runway and some basic info about the weather (wind, pressure and temperature). +-- +-- # Text-To-Speech +-- +-- You can enable text-to-speech ATIS information with the @{#ATIS.SetSTTS}() function. This uses [SRS](http://dcssimpleradio.com/) (Version >= 1.9.6.0) for broadcasing. +-- Advantages are that no sound files are necessary. Also the issue that FC3 aircraft hear all transmissions will be circumvented. +-- +-- The @{#ATIS.SetSTTS}() requires you to specify the path to the SRS install directory. -- -- # Examples -- @@ -1109,8 +1116,9 @@ end -- @param #string Gender Gender: "male" or "female" (default). -- @param #string Culture Culture, e.g. "en-GB" (default). -- @param #string Voice Specific voice. Overrides `Gender` and `Culture`. +-- @param #number Port SRS port. Default 5002. -- @return #ATIS self -function ATIS:SetSTTS(PathToSRS, Gender, Culture, Voice, Port) +function ATIS:SetSRS(PathToSRS, Gender, Culture, Voice, Port) self.useSRS=true self.msrs=MSRS:New(PathToSRS, self.frequency, self.modulation) self.msrs:SetGender(Gender) diff --git a/Moose Development/Moose/Sound/SRS.lua b/Moose Development/Moose/Sound/SRS.lua index 40732802f..fe3e13211 100644 --- a/Moose Development/Moose/Sound/SRS.lua +++ b/Moose Development/Moose/Sound/SRS.lua @@ -21,8 +21,7 @@ -- -- === -- --- Automatic terminal information service, or ATIS, is a continuous broadcast of recorded aeronautical information in busier terminal areas, *i.e.* airports and their immediate surroundings. --- ATIS broadcasts contain essential information, such as current weather information, active runways, and any other information required by the pilots. +-- The goal of the [SRS](https://github.com/ciribob/DCS-SimpleRadioStandalone) project is to bring VoIP communication into DCS and to make communication as frictionless as possible. -- -- === -- From cf83abfe90813d541094c9a8b4c6cd75526348c9 Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 5 Jun 2021 23:40:50 +0200 Subject: [PATCH 2/3] Sound update docs --- Moose Development/Moose/Sound/RadioQueue.lua | 6 +- Moose Development/Moose/Sound/SoundOutput.lua | 92 +++++++++++++++---- 2 files changed, 78 insertions(+), 20 deletions(-) diff --git a/Moose Development/Moose/Sound/RadioQueue.lua b/Moose Development/Moose/Sound/RadioQueue.lua index 11cea9de8..fbe183fd6 100644 --- a/Moose Development/Moose/Sound/RadioQueue.lua +++ b/Moose Development/Moose/Sound/RadioQueue.lua @@ -4,7 +4,7 @@ -- -- ## Features: -- --- * Managed Radio Transmissions. +-- * Manage Radio Transmissions -- -- === -- @@ -15,6 +15,10 @@ --- Manages radio transmissions. -- +-- The main goal of the RADIOQUEUE class is to string together multiple sound files to play a complete sentence. +-- The underlying problem is that radio transmissions in DCS are not queued but played "on top" of each other. +-- Therefore, to achive the goal, it is vital to know the precise duration how long it takes to play the sound file. +-- -- @type RADIOQUEUE -- @field #string ClassName Name of the class "RADIOQUEUE". -- @field #boolean Debugmode Debug mode. More info. diff --git a/Moose Development/Moose/Sound/SoundOutput.lua b/Moose Development/Moose/Sound/SoundOutput.lua index bbe93cfa6..2efb9e015 100644 --- a/Moose Development/Moose/Sound/SoundOutput.lua +++ b/Moose Development/Moose/Sound/SoundOutput.lua @@ -5,7 +5,7 @@ -- ## Features: -- -- * Create a SOUNDFILE object (mp3 or ogg) to be played via DCS or SRS transmissions --- * Create a SOUNDTEXT object for text-to-speech output +-- * Create a SOUNDTEXT object for text-to-speech output vis SRS Simple-Text-To-Speech -- -- === -- @@ -13,6 +13,12 @@ -- -- === -- +-- There are two classes, SOUNDFILE and SOUNDTEXT, defined in this section that deal with playing +-- sound files or arbitrary text (via SRS Simple-Text-To-Speech), respectively. +-- +-- The SOUNDFILE and SOUNDTEXT objects can be defined and used in other MOOSE classes. +-- +-- -- @module Sound.SoundOutput -- @image Sound_SoundOutput.png @@ -63,9 +69,39 @@ do -- Sound File --- Sound files used by other classes. -- - -- # 1. USERFLAG constructor + -- # The SOUNDFILE Concept -- - -- * @{#USERFLAG.New}(): Creates a new USERFLAG object. + -- A SOUNDFILE object hold the important properties that are necessary to play the sound file, e.g. its file name, path, duration. + -- + -- It can be created with the @{#SOUNDFILE.New}(*FileName*, *Path*, *Duration*) function: + -- + -- local soundfile=SOUNDFILE:New("My Soundfile.ogg", "Sound File/", 3.5) + -- + -- ## SRS + -- + -- If sound files are supposed to be played via SRS, you need to use the @{#SOUNDFILE.SetPlayWithSRS}() function. + -- + -- # Location/Path + -- + -- ## DCS + -- + -- DCS can only play sound files that are located inside the mission (.miz) file. In particular, DCS cannot make use of files that are stored on + -- your hard drive. + -- + -- The default location where sound files are stored in DCS is the directory "l10n/DEFAULT/". This is where sound files are placed, if they are + -- added via the mission editor (TRIGGERS-->ACTIONS-->SOUND TO ALL). Note however, that sound files which are not added with a trigger command, + -- will be deleted each time the mission is saved! Therefore, this directory is not ideal to be used especially if many sound files are to + -- be included since for each file a trigger action needs to be created. Which is cumbersome, to say the least. + -- + -- The recommended way is to create a new folder inside the mission (.miz) file (a miz file is essentially zip file and can be opened, e.g., with 7-Zip) + -- and to place the sound files in there. Sound files in these folders are not wiped out by DCS on the next save. + -- + -- ## SRS + -- + -- SRS sound files need to be located on your local drive (not inside the miz). Therefore, you need to specify the full path. + -- + -- + -- ## SRS -- -- @field #SOUNDFILE SOUNDFILE={ @@ -178,11 +214,11 @@ do -- Sound File return name end - --- Get the complete sound file name inlcuding its path. + --- Set whether sound files should be played via SRS. -- @param #SOUNDFILE self -- @param #boolean Switch If true or nil, use SRS. If false, use DCS transmission. -- @return #SOUNDFILE self - function SOUNDFILE:UseSRS(Switch) + function SOUNDFILE:SetPlayWithSRS(Switch) if Switch==true or Switch==nil then self.useSRS=true else @@ -207,12 +243,30 @@ do -- Text-To-Speech --- Text-to-speech objects for other classes. -- - -- # Constructor + -- # The SOUNDTEXT Concept + -- + -- A SOUNDTEXT object holds all necessary information to play a general text via SRS Simple-Text-To-Speech. + -- + -- It can be created with the @{#SOUNDTEXT.New}(*Text*, *Duration*) function. -- -- * @{#SOUNDTEXT.New}(*Text, Duration*): Creates a new SOUNDTEXT object. -- + -- # Options + -- + -- ## Gender + -- + -- You can choose a gender ("male" or "femal") with the @{#SOUNDTEXT.SetGender}(*Gender*) function. + -- Note that the gender voice needs to be installed on your windows machine for the used culture (see below). + -- + -- ## Culture + -- + -- You can choose a "culture" (accent) with the @{#SOUNDTEXT.SetCulture}(*Culture*) function, where the default (SRS) culture is "en-GB". + -- + -- Other examples for culture are: "en-US" (US accent), "de-DE" (German), "it-IT" (Italian), "ru-RU" (Russian), "zh-CN" (Chinese). + -- + -- Note that the chosen culture needs to be installed on your windows machine. -- - -- # Specific Voice + -- ## Specific Voice -- -- You can use a specific voice for the transmission with the @{SOUNDTEXT.SetVoice}(*VoiceName*) function. Here are some examples -- @@ -287,8 +341,19 @@ do -- Text-To-Speech return self end + --- Set TTS culture - local for the voice. + -- @param #SOUNDTEXT self + -- @param #string Culture TTS culture. Default "en-GB". + -- @return #SOUNDTEXT self + function SOUNDTEXT:SetCulture(Culture) + + self.culture=Culture or "en-GB" + + return self + end + --- Set to use a specific voice name. - -- See the list from `DCS-SR-ExternalAudio.exe --help` or if using google see https://cloud.google.com/text-to-speech/docs/voices + -- See the list from `DCS-SR-ExternalAudio.exe --help` or if using google see [google voices](https://cloud.google.com/text-to-speech/docs/voices). -- @param #SOUNDTEXT self -- @param #string VoiceName Voice name. Note that this will overrule `Gender` and `Culture`. -- @return #SOUNDTEXT self @@ -299,15 +364,4 @@ do -- Text-To-Speech return self end - --- Set TTS culture - local for the voice. - -- @param #SOUNDTEXT self - -- @param #string Culture TTS culture. Default "en-GB". - -- @return #SOUNDTEXT self - function SOUNDTEXT:SetCulture(Culture) - - self.culture=Culture or "en-GB" - - return self - end - end \ No newline at end of file From e03e87f501f7aebcbee7ace099c0884fe1503383 Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 5 Jun 2021 23:44:25 +0200 Subject: [PATCH 3/3] Sound update docs --- Moose Development/Moose/Sound/SRS.lua | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Moose Development/Moose/Sound/SRS.lua b/Moose Development/Moose/Sound/SRS.lua index fe3e13211..6260c62ca 100644 --- a/Moose Development/Moose/Sound/SRS.lua +++ b/Moose Development/Moose/Sound/SRS.lua @@ -81,15 +81,16 @@ -- -- ## Set Gender -- --- Use a specific gender by :SetGender("male") or :SetGender("female"). +-- Use a specific gender with the @{#MSRS.SetGender} function, e.g. `SetGender("male")` or `:SetGender("female")`. -- -- ## Set Culture -- --- Use a specific "culture" by :SetCulture("en-US") or :SetCulture("de-DE"). +-- Use a specific "culture" with the @{#MSRS.SetCulture} function, e.g. `:SetCulture("en-US")` or `:SetCulture("de-DE")`. -- -- ## Set Voice -- --- Use a specifc voice by :SetVoice("Microsoft Hedda Desktop"). Note that this must be installed on your windows system. +-- Use a specifc voice with the @{#MSRS.SetVoice} function, e.g, `:SetVoice("Microsoft Hedda Desktop")`. +-- Note that this must be installed on your windows system. -- -- @field #MSRS MSRS = {