Skip to content

Commit

Permalink
added pitch variable back.
Browse files Browse the repository at this point in the history
  • Loading branch information
scott306lr committed Aug 30, 2023
1 parent 8f8a334 commit afd4ba8
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 8 deletions.
2 changes: 0 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,6 @@ It is possible to make minor changes to the generated speech.

In addition, it is required to use `--rate=-50%` instead of `--rate -50%` (note the lack of an equal sign) otherwise the `-50%` would be interpreted as just another argument.

**NOTE**: `--pitch` was removed in 6.0.3 as it no longer appears to have any effect.

### Note on the `edge-playback` command

`edge-playback` is just a wrapper around `edge-tts` that plays back the generated speech. It takes the same arguments as the `edge-tts` option.
Expand Down
19 changes: 13 additions & 6 deletions src/edge_tts/communicate.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ def split_text_by_byte_length(
yield new_text


def mkssml(text: Union[str, bytes], voice: str, rate: str, volume: str) -> str:
def mkssml(text: Union[str, bytes], voice: str, rate: str, volume: str, pitch: str) -> str:
"""
Creates a SSML string from the given parameters.
Expand All @@ -164,7 +164,7 @@ def mkssml(text: Union[str, bytes], voice: str, rate: str, volume: str) -> str:

ssml = (
"<speak version='1.0' xmlns='http://www.w3.org/2001/10/synthesis' xml:lang='en-US'>"
f"<voice name='{voice}'><prosody pitch='+0Hz' rate='{rate}' volume='{volume}'>"
f"<voice name='{voice}'><prosody pitch='{pitch}' rate='{rate}' volume='{volume}'>"
f"{text}</prosody></voice></speak>"
)
return ssml
Expand Down Expand Up @@ -203,7 +203,7 @@ def ssml_headers_plus_data(request_id: str, timestamp: str, ssml: str) -> str:
)


def calc_max_mesg_size(voice: str, rate: str, volume: str) -> int:
def calc_max_mesg_size(voice: str, rate: str, volume: str, pitch: str) -> int:
"""Calculates the maximum message size for the given voice, rate, and volume.
Returns:
Expand All @@ -215,7 +215,7 @@ def calc_max_mesg_size(voice: str, rate: str, volume: str) -> int:
ssml_headers_plus_data(
connect_id(),
date_to_string(),
mkssml("", voice, rate, volume),
mkssml("", voice, rate, volume, pitch),
)
)
+ 50 # margin of error
Expand All @@ -235,6 +235,7 @@ def __init__(
*,
rate: str = "+0%",
volume: str = "+0%",
pitch: str = "+0Hz",
proxy: Optional[str] = None,
):
"""
Expand Down Expand Up @@ -289,6 +290,12 @@ def __init__(
raise ValueError(f"Invalid volume '{volume}'.")
self.volume: str = volume

if not isinstance(pitch, str):
raise TypeError("pitch must be str")
if re.match(r"^[+-]\d+Hz$", pitch) is None:
raise ValueError(f"Invalid pitch '{pitch}'.")
self.pitch: str = pitch

if proxy is not None and not isinstance(proxy, str):
raise TypeError("proxy must be str")
self.proxy: Optional[str] = proxy
Expand All @@ -298,7 +305,7 @@ async def stream(self) -> AsyncGenerator[Dict[str, Any], None]:

texts = split_text_by_byte_length(
escape(remove_incompatible_characters(self.text)),
calc_max_mesg_size(self.voice, self.rate, self.volume),
calc_max_mesg_size(self.voice, self.rate, self.volume, self.pitch),
)
final_utterance: Dict[int, int] = {}
prev_idx = -1
Expand Down Expand Up @@ -362,7 +369,7 @@ async def stream(self) -> AsyncGenerator[Dict[str, Any], None]:
ssml_headers_plus_data(
connect_id(),
date,
mkssml(text, self.voice, self.rate, self.volume),
mkssml(text, self.voice, self.rate, self.volume, self.pitch),
)
)

Expand Down

0 comments on commit afd4ba8

Please sign in to comment.