jer3mi commited on
Commit
c18a6d9
路
verified 路
1 Parent(s): 9092a36

Space: port app.py to the 0.1.1 API (synthesize, provenance fingerprint)

Browse files
Files changed (1) hide show
  1. app.py +9 -9
app.py CHANGED
@@ -192,7 +192,7 @@ def _stats(result: lk.Result, model: str) -> str:
192
  seconds = len(result.audio) / result.sample_rate
193
  return (
194
  f"**{seconds:.1f} s of audio.** {result.timings.describe(seconds)}\n\n"
195
- f"`{model}` 路 `algo[{result.algorithm_fingerprint}]` 路 seed `{result.seed}` 路 "
196
  f"speed `{result.speed:g}x` 路 {result.sample_rate} Hz"
197
  )
198
 
@@ -279,7 +279,7 @@ def _speak_duration(text, name, model, language, seed, speed):
279
  @spaces.GPU(duration=_speak_duration)
280
  def speak(text: str, name: str, model: str, language: str, seed: float, speed: float):
281
  text = _check(text, MAX_CHARS)
282
- result = _engine(model).synthesize_long(
283
  text,
284
  PROFILES[name],
285
  seed=int(seed),
@@ -306,11 +306,11 @@ def compare(text: str, name: str, seed: float):
306
  profile = PROFILES[name]
307
  out = {}
308
  for key, engine in ENGINES.items():
309
- result = engine.synthesize_long(text, profile, seed=int(seed))
310
  out[key] = (
311
  _write(result, voice=name, language=BY_NAME[name]["language_id"]),
312
  len(result.audio) / result.sample_rate,
313
- result.algorithm_fingerprint,
314
  )
315
 
316
  note = "\n".join(
@@ -394,7 +394,7 @@ def clone(example, mic, upload, consent: bool, text: str, model: str, language:
394
  # and read its text through the English funnel.
395
  profile = dataclasses.replace(profile, language=language or "en")
396
 
397
- result = _engine(model).synthesize_long(
398
  text, profile, seed=int(seed), language=language or None, speed=float(speed)
399
  )
400
  return _write(result, voice=label, language=profile.language), _stats(result, model)
@@ -420,8 +420,8 @@ def probe(text: str, name: str, model: str, seed: float):
420
  text = _check(text, MAX_PROBE_CHARS)
421
  engine = _engine(model)
422
  profile = PROFILES[name]
423
- first = engine.synthesize_long(text, profile, seed=int(seed))
424
- second = engine.synthesize_long(text, profile, seed=int(seed))
425
 
426
  left, right = _sha256_audio(first.audio), _sha256_audio(second.audio)
427
  verdict = "Identical." if left == right else "Different. Please report this."
@@ -433,7 +433,7 @@ def probe(text: str, name: str, model: str, seed: float):
433
  "```",
434
  f"render 1 sha256 {left}",
435
  f"render 2 sha256 {right}",
436
- f" algo[{first.algorithm_fingerprint}] seed {int(seed)} {model}",
437
  "```",
438
  "",
439
  "Identical within this build and this device. loudkit promises a "
@@ -745,7 +745,7 @@ import loudkit as lk
745
 
746
  engine = lk.load("{MODELS["loudr-1"]["repo"]}", revision="v0.1.1")
747
  voice = lk.voice("kathleen", repo="{MODELS["loudr-1"]["repo"]}", revision="v0.1.1")
748
- engine.synthesize_long("Hello from loudkit.", voice, seed=7).save("hello.wav")
749
  ```
750
 
751
  The same profile reads on the faster model by changing one string:
 
192
  seconds = len(result.audio) / result.sample_rate
193
  return (
194
  f"**{seconds:.1f} s of audio.** {result.timings.describe(seconds)}\n\n"
195
+ f"`{model}` 路 `algo[{result.provenance.algorithm_fingerprint}]` 路 seed `{result.seed}` 路 "
196
  f"speed `{result.speed:g}x` 路 {result.sample_rate} Hz"
197
  )
198
 
 
279
  @spaces.GPU(duration=_speak_duration)
280
  def speak(text: str, name: str, model: str, language: str, seed: float, speed: float):
281
  text = _check(text, MAX_CHARS)
282
+ result = _engine(model).synthesize(
283
  text,
284
  PROFILES[name],
285
  seed=int(seed),
 
306
  profile = PROFILES[name]
307
  out = {}
308
  for key, engine in ENGINES.items():
309
+ result = engine.synthesize(text, profile, seed=int(seed))
310
  out[key] = (
311
  _write(result, voice=name, language=BY_NAME[name]["language_id"]),
312
  len(result.audio) / result.sample_rate,
313
+ result.provenance.algorithm_fingerprint,
314
  )
315
 
316
  note = "\n".join(
 
394
  # and read its text through the English funnel.
395
  profile = dataclasses.replace(profile, language=language or "en")
396
 
397
+ result = _engine(model).synthesize(
398
  text, profile, seed=int(seed), language=language or None, speed=float(speed)
399
  )
400
  return _write(result, voice=label, language=profile.language), _stats(result, model)
 
420
  text = _check(text, MAX_PROBE_CHARS)
421
  engine = _engine(model)
422
  profile = PROFILES[name]
423
+ first = engine.synthesize(text, profile, seed=int(seed))
424
+ second = engine.synthesize(text, profile, seed=int(seed))
425
 
426
  left, right = _sha256_audio(first.audio), _sha256_audio(second.audio)
427
  verdict = "Identical." if left == right else "Different. Please report this."
 
433
  "```",
434
  f"render 1 sha256 {left}",
435
  f"render 2 sha256 {right}",
436
+ f" algo[{first.provenance.algorithm_fingerprint}] seed {int(seed)} {model}",
437
  "```",
438
  "",
439
  "Identical within this build and this device. loudkit promises a "
 
745
 
746
  engine = lk.load("{MODELS["loudr-1"]["repo"]}", revision="v0.1.1")
747
  voice = lk.voice("kathleen", repo="{MODELS["loudr-1"]["repo"]}", revision="v0.1.1")
748
+ engine.synthesize("Hello from loudkit.", voice, seed=7).save("hello.wav")
749
  ```
750
 
751
  The same profile reads on the faster model by changing one string: