Clean up set-voice script
This commit is contained in:
		| @@ -1,6 +1,6 @@ | |||||||
| #!/usr/bin/env bash | #!/usr/bin/env bash | ||||||
| # Set Voice | # Set Voice | ||||||
| # Set the default wine voice based on installed options. | # Set the default wine voice ba$sed on installed options. | ||||||
| # Rate can be specified as a numeric argument to this script, 1 through 9. | # Rate can be specified as a numeric argument to this script, 1 through 9. | ||||||
| # The default rate is 7 | # The default rate is 7 | ||||||
|  |  | ||||||
| @@ -8,7 +8,7 @@ | |||||||
| #    ■The contents of this file are subject to the Common Public Attribution | #    ■The contents of this file are subject to the Common Public Attribution | ||||||
| #    License Version 1.0 (the ■License■); you may not use this file except in | #    License Version 1.0 (the ■License■); you may not use this file except in | ||||||
| #    compliance with the License. You may obtain a copy of the License at | #    compliance with the License. You may obtain a copy of the License at | ||||||
| #    https://opensource.org/licenses/CPAL-1.0. The License is based on the Mozilla Public License Version | #    https://opensource.org/licenses/CPAL-1.0. The License is ba$sed on the Mozilla Public License Version | ||||||
| #    1.1 but Sections 14 and 15 have been added to cover use of software over a | #    1.1 but Sections 14 and 15 have been added to cover use of software over a | ||||||
| #    computer network and provide for limited attribution for the Original | #    computer network and provide for limited attribution for the Original | ||||||
| #    Developer. In addition, Exhibit A has been modified to be consistent with | #    Developer. In addition, Exhibit A has been modified to be consistent with | ||||||
| @@ -44,6 +44,13 @@ | |||||||
|  |  | ||||||
| #--code-- | #--code-- | ||||||
|  |  | ||||||
|  | # Set a variable to make mac compatibility easier... | ||||||
|  | sed="sed" | ||||||
|  | grep="grep" | ||||||
|  | if [[ "$(uname)" == "Darwin" ]]; then | ||||||
|  |     sed="gsed" | ||||||
|  |     grep="ggrep" | ||||||
|  | fi | ||||||
| # Settings to improve accessibility of dialog. | # Settings to improve accessibility of dialog. | ||||||
| export DIALOGOPTS='--insecure --no-lines --visit-items' | export DIALOGOPTS='--insecure --no-lines --visit-items' | ||||||
| # Turn off debug messages | # Turn off debug messages | ||||||
| @@ -116,11 +123,7 @@ menulist() { | |||||||
| restore_voice() { | restore_voice() { | ||||||
|     if [[ $doRestore -eq 0 ]]; then |     if [[ $doRestore -eq 0 ]]; then | ||||||
|         wineserver -k # If we don't do this it's likely wine will overwrite our reverted change or even clobber the registry key entirely |         wineserver -k # If we don't do this it's likely wine will overwrite our reverted change or even clobber the registry key entirely | ||||||
|         if [[ "$(uname)" == "Darwin" ]]; then |         $sed -i -E -e 's/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\(SOFTWARE|Software)\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\[^"]+"/"DefaultTokenId"="'"${oldVoice//\\/\\\\}"'"/g' "${WINEPREFIX}/user.reg" | ||||||
|             gsed -i -E -e 's/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\(SOFTWARE|Software)\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\[^"]+"/"DefaultTokenId"="'"${oldVoice//\\/\\\\}"'"/g' "${WINEPREFIX}/user.reg" |  | ||||||
|         else |  | ||||||
|             sed -i -E -e 's/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\(SOFTWARE|Software)\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\[^"]+"/"DefaultTokenId"="'"${oldVoice//\\/\\\\}"'"/g' "${WINEPREFIX}/user.reg" |  | ||||||
|         fi |  | ||||||
|     fi |     fi | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -134,16 +137,10 @@ set_voice() { | |||||||
|         counter=$(( $counter + 1 )) |         counter=$(( $counter + 1 )) | ||||||
|     done |     done | ||||||
|     fullVoice="${voiceListFullName[$counter]}" |     fullVoice="${voiceListFullName[$counter]}" | ||||||
|     fullVoice="${fullVoice/RHVoice/RHVoice\\\\bdl}" |  | ||||||
|     wineserver -k # If we don't do this it's likely wine will overwrite our reverted change or even clobber the registry key entirely |     wineserver -k # If we don't do this it's likely wine will overwrite our reverted change or even clobber the registry key entirely | ||||||
|     # Remove any existing rate change for voices |     # Remove any existing rate change for voices | ||||||
|     if [[ "$(uname)" == "Darwin" ]]; then |     $sed -i '/"DefaultTTSRate"=dword:/d' "${WINEPREFIX}/user.reg" | ||||||
|         gsed -i '/"DefaultTTSRate"=dword:/d' "${WINEPREFIX}/user.reg" |     $sed -i -E -e 's/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\(SOFTWARE|Software)\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\[^"]+"/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\'"${fullVoice//\\/\\\\}"'"\n"DefaultTTSRate"=dword:0000000'${2:-7}'/g' "${WINEPREFIX}/user.reg" | ||||||
|         gsed -i -E -e 's/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\(SOFTWARE|Software)\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\[^"]+"/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\'"${fullVoice//\\/\\\\}"'"\n"DefaultTTSRate"=dword:0000000'${2:-7}'/g' "${WINEPREFIX}/user.reg" |  | ||||||
|     else |  | ||||||
|         sed -i '/"DefaultTTSRate"=dword:/d' "${WINEPREFIX}/user.reg" |  | ||||||
|         sed -i -E -e 's/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\(SOFTWARE|Software)\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\[^"]+"/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\'"${fullVoice//\\/\\\\}"'"\n"DefaultTTSRate"=dword:0000000'${2:-7}'/g' "${WINEPREFIX}/user.reg" |  | ||||||
|     fi |  | ||||||
| } | } | ||||||
|  |  | ||||||
| test_voice() { | test_voice() { | ||||||
| @@ -156,13 +153,8 @@ test_voice() { | |||||||
|         counter=$(( $counter + 1 )) |         counter=$(( $counter + 1 )) | ||||||
|     done |     done | ||||||
|     fullVoice="${voiceListFullName[$counter]}" |     fullVoice="${voiceListFullName[$counter]}" | ||||||
|     fullVoice="${fullVoice/RHVoice/RHVoice\\\\bdl}" |  | ||||||
|     wineserver -k # If we don't do this it's likely wine will overwrite our reverted change or even clobber the registry key entirely |     wineserver -k # If we don't do this it's likely wine will overwrite our reverted change or even clobber the registry key entirely | ||||||
|     if [[ "$(uname)" == "Darwin" ]]; then | $sed -i -E -e 's/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\(SOFTWARE|Software)\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\[^"]+"/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\'"${fullVoice//\\/\\\\}"'"/g' "${WINEPREFIX}/user.reg" | ||||||
|     gsed -i -E -e 's/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\(SOFTWARE|Software)\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\[^"]+"/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\'"${fullVoice//\\/\\\\}"'"/g' "${WINEPREFIX}/user.reg" |  | ||||||
|     else |  | ||||||
|     sed -i -E -e 's/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\(SOFTWARE|Software)\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\[^"]+"/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\'"${fullVoice//\\/\\\\}"'"/g' "${WINEPREFIX}/user.reg" |  | ||||||
|     fi |  | ||||||
|     cat << "EOF" > /tmp/speak.vbs |     cat << "EOF" > /tmp/speak.vbs | ||||||
|         dim speechobject |         dim speechobject | ||||||
|             set speechobject=createobject("sapi.spvoice") |             set speechobject=createobject("sapi.spvoice") | ||||||
| @@ -186,21 +178,13 @@ wine cscript "z:\tmp\speak.vbs" | |||||||
| # Create an array of available voices. | # Create an array of available voices. | ||||||
| ifs="$IFS" | ifs="$IFS" | ||||||
| IFS=$'\n' | IFS=$'\n' | ||||||
| if [[ "$(uname)" == "Darwin" ]]; then | voiceListFullName=($($grep -P '\[Software\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\[^\\]+\].*' "${WINEPREFIX}/system.reg" | $sed -E -e 's/\[([^]]+)\].*/\1/g')) | ||||||
|     voiceListFullName=($(ggrep -P '\[Software\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\[^\\]+\].*' "${WINEPREFIX}/system.reg" | sed -E -e 's/\[([^]]+)\].*/\1/g')) |  | ||||||
| else |  | ||||||
|     voiceListFullName=($(grep -P '\[Software\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\[^\\]+\].*' "${WINEPREFIX}/system.reg" | sed -E -e 's/\[([^]]+)\].*/\1/g')) |  | ||||||
| fi |  | ||||||
| IFS="$ifs" | IFS="$ifs" | ||||||
| voiceList=() | voiceList=() | ||||||
| for x in "${voiceListFullName[@]}" ; do | for x in "${voiceListFullName[@]}" ; do | ||||||
|     voiceList+=("$(echo "$x" | rev | cut -d\\ -f1 | rev)") |     voiceList+=("$(echo "$x" | $sed -E -e 's/Software\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\(.+)/\1/g')") | ||||||
| done | done | ||||||
| if [[ "$(uname)" == "Darwin" ]]; then | oldVoice="$($grep -P '"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\(SOFTWARE|Software)\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\[^"]+"' "${WINEPREFIX}/user.reg" | $sed -E -e 's/"DefaultTokenId"="([^"]+)"/\1/g')" | ||||||
|     oldVoice="$(ggrep -P '"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\(SOFTWARE|Software)\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\[^"]+"' "${WINEPREFIX}/user.reg" | sed -E -e 's/"DefaultTokenId"="([^"]+)"/\1/g')" |  | ||||||
| else |  | ||||||
|     oldVoice="$(grep -P '"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\(SOFTWARE|Software)\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\[^"]+"' "${WINEPREFIX}/user.reg" | sed -E -e 's/"DefaultTokenId"="([^"]+)"/\1/g')" |  | ||||||
| fi |  | ||||||
| exit=1 | exit=1 | ||||||
| while [[ $exit -ne 0 ]] ; do | while [[ $exit -ne 0 ]] ; do | ||||||
| voice="$(menulist "${voiceList[@]}")" | voice="$(menulist "${voiceList[@]}")" | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user