Skip to content

Commit 40cd801

Browse files
committed
[text-to-audio-generator] Add new function to hub
1 parent 8dd33c3 commit 40cd801

File tree

7 files changed

+886
-0
lines changed

7 files changed

+886
-0
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Client: I love MLRun!
2+
Agent: Me too!

text_to_audio_generator/function.yaml

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
kind: job
2+
metadata:
3+
name: text-to-audio-generator
4+
tag: ''
5+
hash: f36d56d620c6a69f414c9cb90e42ec012847a607
6+
project: ''
7+
labels:
8+
author: yonatans
9+
categories:
10+
- data-preparation
11+
- machine-learning
12+
spec:
13+
command: ''
14+
args: []
15+
image: ''
16+
build:
17+
functionSourceCode: IyBDb3B5cmlnaHQgMjAyMyBJZ3VhemlvCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgppbXBvcnQgbG9nZ2luZwppbXBvcnQgcGF0aGxpYgppbXBvcnQgcmFuZG9tCmZyb20gdHlwaW5nIGltcG9ydCBEaWN0LCBMaXN0LCBPcHRpb25hbCwgVHVwbGUsIFVuaW9uCgppbXBvcnQgYmFyawppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgdG9yY2gKaW1wb3J0IHRvcmNoYXVkaW8KaW1wb3J0IHRxZG0KCiMgR2V0IHRoZSBnbG9iYWwgbG9nZ2VyOgpfTE9HR0VSID0gbG9nZ2luZy5nZXRMb2dnZXIoKQoKCmRlZiBnZW5lcmF0ZV9tdWx0aV9zcGVha2Vyc19hdWRpbygKICAgIGRhdGFfcGF0aDogc3RyLAogICAgb3V0cHV0X2RpcmVjdG9yeTogc3RyLAogICAgc3BlYWtlcnM6IFVuaW9uW0xpc3Rbc3RyXSwgRGljdFtzdHIsIGludF1dLAogICAgYXZhaWxhYmxlX3ZvaWNlczogTGlzdFtzdHJdLAogICAgdXNlX2dwdTogYm9vbCA9IFRydWUsCiAgICB1c2Vfc21hbGxfbW9kZWxzOiBib29sID0gRmFsc2UsCiAgICBvZmZsb2FkX2NwdTogYm9vbCA9IEZhbHNlLAogICAgc2FtcGxlX3JhdGU6IGludCA9IDE2MDAwLAogICAgZmlsZV9mb3JtYXQ6IHN0ciA9ICJ3YXYiLAogICAgdmVyYm9zZTogYm9vbCA9IFRydWUsCiAgICBiaXRzX3Blcl9zYW1wbGU6IE9wdGlvbmFsW2ludF0gPSBOb25lLAopIC0+IFR1cGxlW3N0ciwgcGQuRGF0YUZyYW1lLCBkaWN0XToKICAgICIiIgoKICAgIDpwYXJhbSBkYXRhX3BhdGg6ICAgICAgICAgICBQYXRoIHRvIHRoZSB0ZXh0IGZpbGUgb3IgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHRleHQgZmlsZXMgdG8gZ2VuZXJhdGUgYXVkaW8gZnJvbS4KICAgIDpwYXJhbSBvdXRwdXRfZGlyZWN0b3J5OiAgICBQYXRoIHRvIHRoZSBkaXJlY3RvcnkgdG8gc2F2ZSB0aGUgZ2VuZXJhdGVkIGF1ZGlvIGZpbGVzIHRvLgogICAgOnBhcmFtIHNwZWFrZXJzOiAgICAgICAgICAgIExpc3QgLyBEaWN0IG9mIHNwZWFrZXJzIHRvIGdlbmVyYXRlIGF1ZGlvIGZvci4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBhIGxpc3QgaXMgZ2l2ZW4sIHRoZSBzcGVha2VycyB3aWxsIGJlIGFzc2lnbmVkIHRvIGNoYW5uZWxzIGluIHRoZSBvcmRlciBnaXZlbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBkaWN0aW9uYXJ5LCB0aGUga2V5cyB3aWxsIGJlIHRoZSBzcGVha2VycyBhbmQgdGhlIHZhbHVlcyB3aWxsIGJlIHRoZSBjaGFubmVscy4KICAgIDpwYXJhbSBhdmFpbGFibGVfdm9pY2VzOiAgICBMaXN0IG9mIGF2YWlsYWJsZSB2b2ljZXMgdG8gdXNlIGZvciB0aGUgZ2VuZXJhdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgU2VlIGhlcmUgZm9yIHRoZSBhdmFpbGFibGUgdm9pY2VzOgogICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL3N1bm8tYWkubm90aW9uLnNpdGUvOGI4ZTg3NDllZDUxNGIwY2JmM2Y2OTkwMTM1NDg2ODM/dj1iYzY3Y2ZmNzg2YjA0YjUwYjNjZWI3NTZmZDA1ZjY4YwogICAgOnBhcmFtIHVzZV9ncHU6ICAgICAgICAgICAgIFdoZXRoZXIgdG8gdXNlIHRoZSBHUFUgZm9yIHRoZSBnZW5lcmF0aW9uLgogICAgOnBhcmFtIHVzZV9zbWFsbF9tb2RlbHM6ICAgIFdoZXRoZXIgdG8gdXNlIHRoZSBzbWFsbCBtb2RlbHMgZm9yIHRoZSBnZW5lcmF0aW9uLgogICAgOnBhcmFtIG9mZmxvYWRfY3B1OiAgICAgICAgIFRPRE86IFdoYXQgZG9lcyB0aGlzIGRvPwogICAgOnBhcmFtIHNhbXBsZV9yYXRlOiAgICAgICAgIFRoZSBzYW1wbGluZyByYXRlIG9mIHRoZSBnZW5lcmF0ZWQgYXVkaW8uCiAgICA6cGFyYW0gZmlsZV9mb3JtYXQ6ICAgICAgICAgVGhlIGZvcm1hdCBvZiB0aGUgZ2VuZXJhdGVkIGF1ZGlvIGZpbGVzLgogICAgOnBhcmFtIHZlcmJvc2U6ICAgICAgICAgICAgIFdoZXRoZXIgdG8gcHJpbnQgdGhlIHByb2dyZXNzIG9mIHRoZSBnZW5lcmF0aW9uLgogICAgOnBhcmFtIGJpdHNfcGVyX3NhbXBsZTogICAgIENoYW5nZXMgdGhlIGJpdCBkZXB0aCBmb3IgdGhlIHN1cHBvcnRlZCBmb3JtYXRzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnRlZCBvbmx5IGluICJ3YXYiIG9yICJmbGFjIiBmb3JtYXRzLgoKICAgIDpyZXR1cm5zOiAgICAgICAgICAgICAgICAgICBBIHR1cGxlIG9mOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhlIG91dHB1dCBkaXJlY3RvcnkgcGF0aC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoZSBnZW5lcmF0ZWQgYXVkaW8gZmlsZXMgZGF0YWZyYW1lLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhlIGVycm9ycyBkaWN0aW9uYXJ5LgogICAgIiIiCgogICAgZ2xvYmFsIF9MT0dHRVIKICAgIF9MT0dHRVIgPSBfZ2V0X2xvZ2dlcigpCiAgICAjIEdldCB0aGUgaW5wdXQgdGV4dCBmaWxlcyB0byB0dXJuIHRvIGF1ZGlvOgogICAgZGF0YV9wYXRoID0gcGF0aGxpYi5QYXRoKGRhdGFfcGF0aCkuYWJzb2x1dGUoKQogICAgdGV4dF9maWxlcyA9IF9nZXRfdGV4dF9maWxlcyhkYXRhX3BhdGg9ZGF0YV9wYXRoKQoKICAgICMgTG9hZCB0aGUgYmFyayBtb2RlbHMgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uczoKICAgIGJhcmsucHJlbG9hZF9tb2RlbHMoCiAgICAgICAgdGV4dF91c2VfZ3B1PXVzZV9ncHUsCiAgICAgICAgdGV4dF91c2Vfc21hbGw9dXNlX3NtYWxsX21vZGVscywKICAgICAgICBjb2Fyc2VfdXNlX2dwdT11c2VfZ3B1LAogICAgICAgIGNvYXJzZV91c2Vfc21hbGw9dXNlX3NtYWxsX21vZGVscywKICAgICAgICBmaW5lX3VzZV9ncHU9dXNlX2dwdSwKICAgICAgICBmaW5lX3VzZV9zbWFsbD11c2Vfc21hbGxfbW9kZWxzLAogICAgICAgIGNvZGVjX3VzZV9ncHU9dXNlX2dwdSwKICAgICAgICBmb3JjZV9yZWxvYWQ9b2ZmbG9hZF9jcHUsCiAgICApCgogICAgIyBDaGVjayBmb3IgcGVyIGNoYW5uZWwgZ2VuZXJhdGlvbjoKICAgIGlmIGlzaW5zdGFuY2Uoc3BlYWtlcnMsIGRpY3QpOgogICAgICAgIHNwZWFrZXJfcGVyX2NoYW5uZWwgPSBUcnVlCiAgICAgICAgIyBTb3J0IHRoZSBnaXZlbiBzcGVha2VycyBieSBjaGFubmVsczoKICAgICAgICBzcGVha2VycyA9IHsKICAgICAgICAgICAgc3BlYWtlcjogY2hhbm5lbAogICAgICAgICAgICBmb3Igc3BlYWtlciwgY2hhbm5lbCBpbiBzb3J0ZWQoc3BlYWtlcnMuaXRlbXMoKSwga2V5PWxhbWJkYSBpdGVtOiBpdGVtWzFdKQogICAgICAgIH0KICAgIGVsc2U6CiAgICAgICAgc3BlYWtlcl9wZXJfY2hhbm5lbCA9IEZhbHNlCgogICAgIyBQcmVwYXJlIHRoZSByZXNhbXBsaW5nIG1vZHVsZToKICAgIHJlc2FtcGxlciA9IHRvcmNoYXVkaW8udHJhbnNmb3Jtcy5SZXNhbXBsZSgKICAgICAgICBvcmlnX2ZyZXE9YmFyay5TQU1QTEVfUkFURSwgbmV3X2ZyZXE9c2FtcGxlX3JhdGUsIGR0eXBlPXRvcmNoLmZsb2F0MzIKICAgICkKCiAgICAjIFByZXBhcmUgdGhlIGdhcCBiZXR3ZWVuIGVhY2ggc3BlYWtlcjoKICAgIGdhcF9iZXR3ZWVuX3NwZWFrZXJzID0gbnAuemVyb3MoaW50KDAuNSAqIGJhcmsuU0FNUExFX1JBVEUpKQoKICAgICMgUHJlcGFyZSB0aGUgc3VjY2Vzc2VzIGRhdGFmcmFtZSBhbmQgZXJyb3JzIGRpY3Rpb25hcnkgdG8gYmUgcmV0dXJuZWQ6CiAgICBzdWNjZXNzZXMgPSBbXQogICAgZXJyb3JzID0ge30KCiAgICAjIENyZWF0ZSB0aGUgb3V0cHV0IGRpcmVjdG9yeToKICAgIG91dHB1dF9kaXJlY3RvcnkgPSBwYXRobGliLlBhdGgob3V0cHV0X2RpcmVjdG9yeSkKICAgIG91dHB1dF9kaXJlY3RvcnkubWtkaXIoZXhpc3Rfb2s9VHJ1ZSkKCiAgICAjIFN0YXJ0IGdlbmVyYXRpbmcgYXVkaW86CiAgICAjIEdvIG92ZXIgdGhlIGF1ZGlvIGZpbGVzIGFuZCB0cmFuc2NyaWJlOgogICAgZm9yIHRleHRfZmlsZSBpbiB0cWRtLnRxZG0oCiAgICAgICAgdGV4dF9maWxlcywgZGVzYz0iR2VuZXJhdGluZyIsIHVuaXQ9ImZpbGUiLCBkaXNhYmxlPW5vdCB2ZXJib3NlCiAgICApOgoKICAgICAgICB0cnk6CiAgICAgICAgICAgICMgUmFuZG9taXplIHZvaWNlcyBmb3IgZWFjaCBzcGVha2VyOgogICAgICAgICAgICBjaG9zZW5fdm9pY2VzID0ge30KICAgICAgICAgICAgYXZhaWxhYmxlX3ZvaWNlc19jb3B5ID0gYXZhaWxhYmxlX3ZvaWNlcy5jb3B5KCkKICAgICAgICAgICAgZm9yIHNwZWFrZXIgaW4gc3BlYWtlcnM6CiAgICAgICAgICAgICAgICB2b2ljZSA9IHJhbmRvbS5jaG9pY2UoYXZhaWxhYmxlX3ZvaWNlc19jb3B5KQogICAgICAgICAgICAgICAgY2hvc2VuX3ZvaWNlc1tzcGVha2VyXSA9IHZvaWNlCiAgICAgICAgICAgICAgICBhdmFpbGFibGVfdm9pY2VzX2NvcHkucmVtb3ZlKHZvaWNlKQogICAgICAgICAgICAjIFJlYWQgdGV4dDoKICAgICAgICAgICAgd2l0aCBvcGVuKHRleHRfZmlsZSwgInIiKSBhcyBmcDoKICAgICAgICAgICAgICAgIHRleHQgPSBmcC5yZWFkKCkKICAgICAgICAgICAgIyBQcmVwYXJlIGEgaG9sZGVyIGZvciBhbGwgdGhlIGdlbmVyYXRlZCBwaWVjZXMgKGlmIHBlciBjaGFubmVsIGVhY2ggc3BlYWtlciB3aWxsIGhhdmUgaXRzIG93bik6CiAgICAgICAgICAgIGF1ZGlvX3BpZWNlcyA9ICgKICAgICAgICAgICAgICAgIHtzcGVha2VyOiBbXSBmb3Igc3BlYWtlciBpbiBzcGVha2Vyc30KICAgICAgICAgICAgICAgIGlmIHNwZWFrZXJfcGVyX2NoYW5uZWwKICAgICAgICAgICAgICAgIGVsc2UgeyJhbGwiOiBbXX0KICAgICAgICAgICAgKQoKICAgICAgICAgICAgIyBHZW5lcmF0ZSBhdWRpbyBwZXIgbGluZToKICAgICAgICAgICAgZm9yIGxpbmUgaW4gdGV4dC5zcGxpdGxpbmVzKCk6CiAgICAgICAgICAgICAgICAjIFZhbGlkYXRlIGxpbmUgaXMgaW4gY29ycmVjdCBzcGVha2VyIGZvcm1hdDoKCiAgICAgICAgICAgICAgICBpZiAiOiAiIG5vdCBpbiBsaW5lOgogICAgICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIF9MT0dHRVIud2FybmluZyhmIlNraXBwaW5nIGxpbmU6IHtsaW5lfSIpCiAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICMgU3BsaXQgbGluZSB0byBzcGVha2VyIGFuZCBoaXMgd29yZHM6CiAgICAgICAgICAgICAgICBjdXJyZW50X3NwZWFrZXIsIHNlbnRlbmNlcyA9IGxpbmUuc3BsaXQoIjogIiwgMSkKICAgICAgICAgICAgICAgICMgVmFsaWRhdGUgc3BlYWtlciBpcyBrbm93bjoKICAgICAgICAgICAgICAgIGlmIGN1cnJlbnRfc3BlYWtlciBub3QgaW4gc3BlYWtlcnM6CiAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgZiJVbmtub3duIHNwZWFrZXI6IHtjdXJyZW50X3NwZWFrZXJ9LiBHaXZlbiBzcGVha2VycyBhcmU6IHtzcGVha2Vyc30iCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgZm9yIHNlbnRlbmNlIGluIF9zcGxpdF9saW5lKGxpbmU9c2VudGVuY2VzKToKICAgICAgICAgICAgICAgICAgICAjIEdlbmVyYXRlIHdvcmRzIGF1ZGlvOgogICAgICAgICAgICAgICAgICAgIGF1ZGlvID0gYmFyay5nZW5lcmF0ZV9hdWRpbygKICAgICAgICAgICAgICAgICAgICAgICAgc2VudGVuY2UsCiAgICAgICAgICAgICAgICAgICAgICAgIGhpc3RvcnlfcHJvbXB0PWNob3Nlbl92b2ljZXNbY3VycmVudF9zcGVha2VyXSwKICAgICAgICAgICAgICAgICAgICAgICAgc2lsZW50PVRydWUsCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIGlmIHNwZWFrZXJfcGVyX2NoYW5uZWw6CiAgICAgICAgICAgICAgICAgICAgICAgIHNpbGVuY2UgPSBucC56ZXJvc19saWtlKGF1ZGlvKQogICAgICAgICAgICAgICAgICAgICAgICBmb3Igc3BlYWtlciBpbiBhdWRpb19waWVjZXMua2V5cygpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3BlYWtlciA9PSBjdXJyZW50X3NwZWFrZXI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fcGllY2VzW3NwZWFrZXJdICs9IFthdWRpbywgZ2FwX2JldHdlZW5fc3BlYWtlcnNdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3BpZWNlc1tzcGVha2VyXSArPSBbc2lsZW5jZSwgZ2FwX2JldHdlZW5fc3BlYWtlcnNdCiAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fcGllY2VzWyJhbGwiXSArPSBbYXVkaW8sIGdhcF9iZXR3ZWVuX3NwZWFrZXJzXQogICAgICAgICAgICAjIENvbnN0cnVjdCBhIHNpbmdsZSBhdWRpbyBhcnJheSBmcm9tIGFsbCB0aGUgcGllY2VzIGFuZCBjaGFubmVsczoKCiAgICAgICAgICAgIGF1ZGlvID0gbnAudnN0YWNrKAogICAgICAgICAgICAgICAgW25wLmNvbmNhdGVuYXRlKGF1ZGlvX3BpZWNlc1tzcGVha2VyXSkgZm9yIHNwZWFrZXIgaW4gc3BlYWtlcnNdCiAgICAgICAgICAgICkuYXN0eXBlKGR0eXBlPW5wLmZsb2F0MzIpCiAgICAgICAgICAgICMgUmVzYW1wbGU6CiAgICAgICAgICAgIGF1ZGlvID0gdG9yY2guZnJvbV9udW1weShhdWRpbykKICAgICAgICAgICAgYXVkaW8gPSByZXNhbXBsZXIoYXVkaW8pCiAgICAgICAgICAgICMgU2F2ZSB0byBhdWRpbyBmaWxlOgogICAgICAgICAgICBhdWRpb19maWxlID0gb3V0cHV0X2RpcmVjdG9yeSAvIGYie3RleHRfZmlsZS5zdGVtfS57ZmlsZV9mb3JtYXR9IgoKICAgICAgICAgICAgdG9yY2hhdWRpby5zYXZlKAogICAgICAgICAgICAgICAgdXJpPXN0cihhdWRpb19maWxlKSwKICAgICAgICAgICAgICAgIHNyYz1hdWRpbywKICAgICAgICAgICAgICAgIHNhbXBsZV9yYXRlPXNhbXBsZV9yYXRlLAogICAgICAgICAgICAgICAgZm9ybWF0PWZpbGVfZm9ybWF0LAogICAgICAgICAgICAgICAgYml0c19wZXJfc2FtcGxlPWJpdHNfcGVyX3NhbXBsZSwKICAgICAgICAgICAgKQoKICAgICAgICAgICAgIyBDb2xsZWN0IHRvIHRoZSBzdWNjZXNzZXM6CiAgICAgICAgICAgIHN1Y2Nlc3Nlcy5hcHBlbmQoW3RleHRfZmlsZS5uYW1lLCBhdWRpb19maWxlLm5hbWVdKQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjZXB0aW9uOgogICAgICAgICAgICAjIE5vdGUgdGhlIGV4Y2VwdGlvbiBhcyBlcnJvciBpbiB0aGUgZGljdGlvbmFyeToKICAgICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgICAgIF9MT0dHRVIud2FybmluZyhmIkVycm9yIGluIGZpbGU6ICd7dGV4dF9maWxlLm5hbWV9JyIpCiAgICAgICAgICAgIHByaW50KGV4Y2VwdGlvbikKICAgICAgICAgICAgZXJyb3JzW3RleHRfZmlsZS5uYW1lXSA9IHN0cihleGNlcHRpb24pCgogICAgIyBDb25zdHJ1Y3QgdGhlIHRyYW5zbGF0aW9ucyBkYXRhZnJhbWU6CiAgICBzdWNjZXNzZXMgPSBwZC5EYXRhRnJhbWUoCiAgICAgICAgc3VjY2Vzc2VzLAogICAgICAgIGNvbHVtbnM9WyJ0ZXh0X2ZpbGUiLCAiYXVkaW9fZmlsZSJdLAogICAgKQoKICAgICMgUHJpbnQgdGhlIGhlYWQgb2YgdGhlIHByb2R1Y2VkIGRhdGFmcmFtZSBhbmQgcmV0dXJuOgogICAgaWYgdmVyYm9zZToKICAgICAgICBfTE9HR0VSLmluZm8oCiAgICAgICAgICAgIGYiRG9uZSAoe3N1Y2Nlc3Nlcy5zaGFwZVswXX0ve2xlbih0ZXh0X2ZpbGVzKX0pXG4iCiAgICAgICAgICAgIGYiVHJhbnNsYXRpb25zIHN1bW1hcnk6XG4iCiAgICAgICAgICAgIGYie3N1Y2Nlc3Nlcy5oZWFkKCl9IgogICAgICAgICkKICAgIHJldHVybiBzdHIob3V0cHV0X2RpcmVjdG9yeSksIHN1Y2Nlc3NlcywgZXJyb3JzCgoKZGVmIF9nZXRfdGV4dF9maWxlcygKICAgIGRhdGFfcGF0aDogcGF0aGxpYi5QYXRoLAopIC0+IExpc3RbcGF0aGxpYi5QYXRoXToKICAgICMgQ2hlY2sgaWYgdGhlIHBhdGggaXMgb2YgYSBkaXJlY3Rvcnkgb3IgYSBmaWxlOgogICAgaWYgZGF0YV9wYXRoLmlzX2RpcigpOgogICAgICAgICMgR2V0IGFsbCBmaWxlcyBpbnNpZGUgdGhlIGRpcmVjdG9yeToKICAgICAgICB0ZXh0X2ZpbGVzID0gbGlzdChkYXRhX3BhdGguZ2xvYigiKi4qIikpCiAgICBlbGlmIGRhdGFfcGF0aC5pc19maWxlKCk6CiAgICAgICAgdGV4dF9maWxlcyA9IFtkYXRhX3BhdGhdCiAgICBlbHNlOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAgIGYiVW5yZWNvZ25pemVkIGRhdGEgcGF0aC4gVGhlIHBhcmFtZXRlciBgZGF0YV9wYXRoYCBtdXN0IGJlIGVpdGhlciBhIGRpcmVjdG9yeSBwYXRoIG9yIGEgZmlsZSBwYXRoLiAiCiAgICAgICAgICAgIGYiR2l2ZW46IHtzdHIoZGF0YV9wYXRoKX0gIgogICAgICAgICkKCiAgICByZXR1cm4gdGV4dF9maWxlcwoKCmRlZiBfc3BsaXRfbGluZShsaW5lOiBzdHIsIG1heF9sZW5ndGg6IGludCA9IDI1MCkgLT4gTGlzdFtzdHJdOgogICAgaWYgbGVuKGxpbmUpIDwgbWF4X2xlbmd0aDoKICAgICAgICByZXR1cm4gW2xpbmVdCgogICAgc2VudGVuY2VzID0gWwogICAgICAgIGYie3NlbnRlbmNlLnN0cmlwKCl9LiIgZm9yIHNlbnRlbmNlIGluIGxpbmUuc3BsaXQoIi4iKSBpZiBzZW50ZW5jZS5zdHJpcCgpCiAgICBdCgogICAgc3BsaXRzID0gW10KICAgIGN1cnJlbnRfbGVuZ3RoID0gbGVuKHNlbnRlbmNlc1swXSkKICAgIHNwbGl0ID0gc2VudGVuY2VzWzBdCiAgICBmb3Igc2VudGVuY2UgaW4gc2VudGVuY2VzWzE6XToKICAgICAgICBpZiBjdXJyZW50X2xlbmd0aCArIGxlbihzZW50ZW5jZSkgPiBtYXhfbGVuZ3RoOgogICAgICAgICAgICBzcGxpdHMuYXBwZW5kKHNwbGl0KQogICAgICAgICAgICBzcGxpdCA9IHNlbnRlbmNlCiAgICAgICAgICAgIGN1cnJlbnRfbGVuZ3RoID0gbGVuKHNlbnRlbmNlKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGN1cnJlbnRfbGVuZ3RoICs9IGxlbihzZW50ZW5jZSkKICAgICAgICAgICAgc3BsaXQgKz0gIiAiICsgc2VudGVuY2UKICAgIGlmIHNwbGl0OgogICAgICAgIHNwbGl0cy5hcHBlbmQoc3BsaXQpCgogICAgcmV0dXJuIHNwbGl0cwoKCmRlZiBfZ2V0X2xvZ2dlcigpOgogICAgZ2xvYmFsIF9MT0dHRVIKICAgIHRyeToKICAgICAgICBpbXBvcnQgbWxydW4KICAgICAgICAjIENoZWNrIGlmIE1MUnVuIGlzIGF2YWlsYWJsZToKICAgICAgICBjb250ZXh0ID0gbWxydW4uZ2V0X29yX2NyZWF0ZV9jdHgobmFtZT0ibWxydW4iKQogICAgICAgIHJldHVybiBjb250ZXh0LmxvZ2dlcgogICAgZXhjZXB0IE1vZHVsZU5vdEZvdW5kRXJyb3I6CiAgICAgICAgcmV0dXJuIF9MT0dHRVIK
18+
base_image: mlrun/mlrun
19+
commands: []
20+
code_origin: ''
21+
origin_filename: ''
22+
requirements:
23+
- bark
24+
- torchaudio
25+
entry_points:
26+
generate_multi_speakers_audio:
27+
name: generate_multi_speakers_audio
28+
doc: ''
29+
parameters:
30+
- name: data_path
31+
type: str
32+
doc: Path to the text file or directory containing the text files to generate
33+
audio from.
34+
- name: output_directory
35+
type: str
36+
doc: Path to the directory to save the generated audio files to.
37+
- name: speakers
38+
type: Union[List[str], Dict[str, int]]
39+
doc: List / Dict of speakers to generate audio for. If a list is given, the
40+
speakers will be assigned to channels in the order given. If dictionary,
41+
the keys will be the speakers and the values will be the channels.
42+
- name: available_voices
43+
type: List[str]
44+
doc: 'List of available voices to use for the generation. See here for the
45+
available voices: https://suno-ai.notion.site/8b8e8749ed514b0cbf3f699013548683?v=bc67cff786b04b50b3ceb756fd05f68c'
46+
- name: use_gpu
47+
type: bool
48+
doc: Whether to use the GPU for the generation.
49+
default: true
50+
- name: use_small_models
51+
type: bool
52+
doc: Whether to use the small models for the generation.
53+
default: false
54+
- name: offload_cpu
55+
type: bool
56+
doc: 'TODO: What does this do?'
57+
default: false
58+
- name: sample_rate
59+
type: int
60+
doc: The sampling rate of the generated audio.
61+
default: 16000
62+
- name: file_format
63+
type: str
64+
doc: The format of the generated audio files.
65+
default: wav
66+
- name: verbose
67+
type: bool
68+
doc: Whether to print the progress of the generation.
69+
default: true
70+
- name: bits_per_sample
71+
type: Optional[int]
72+
doc: Changes the bit depth for the supported formats. Supported only in "wav"
73+
or "flac" formats.
74+
default: null
75+
outputs:
76+
- doc: 'A tuple of: - The output directory path. - The generated audio files
77+
dataframe. - The errors dictionary.'
78+
default: ''
79+
lineno: 30
80+
description: Generate audio file from text using different speakers
81+
default_handler: generate_multi_speakers_audio
82+
disable_auto_mount: false
83+
clone_target_dir: ''
84+
env: []
85+
priority_class_name: ''
86+
preemption_mode: prevent
87+
affinity: null
88+
tolerations: null
89+
security_context: {}
90+
verbose: false

text_to_audio_generator/item.yaml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
apiVersion: v1
2+
categories:
3+
- data-preparation
4+
- machine-learning
5+
description: Generate audio file from text using different speakers
6+
doc: ''
7+
example: text_to_audio_generator.ipynb
8+
generationDate: 2023-12-03:15-30
9+
hidden: false
10+
icon: ''
11+
labels:
12+
author: yonatans
13+
maintainers: []
14+
marketplaceType: ''
15+
mlrunVersion: 1.5.2
16+
name: text_to_audio_generator
17+
platformVersion: 3.5.3
18+
spec:
19+
filename: text_to_audio_generator.py
20+
handler: generate_multi_speakers_audio
21+
image: mlrun/mlrun
22+
kind: job
23+
requirements:
24+
- bark
25+
- torchaudio
26+
url: ''
27+
version: 1.0.0
28+
test_valid: True
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
bark
2+
torchaudio>=2.1.0
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# Copyright 2023 Iguazio
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
import mlrun
16+
import tempfile
17+
import pytest
18+
19+
20+
@pytest.mark.parametrize("file_format,bits_per_sample", [("wav", 8), ("mp3", None)])
21+
def test_generate_multi_speakers_audio(file_format, bits_per_sample):
22+
text_to_audio_generator_function = mlrun.import_function("function.yaml")
23+
with tempfile.TemporaryDirectory() as test_directory:
24+
function_run = text_to_audio_generator_function.run(
25+
handler="generate_multi_speakers_audio",
26+
inputs={"data_path": "data/test_data.txt"},
27+
params={
28+
"output_directory": test_directory,
29+
"speakers": {"Agent": 0, "Client": 1},
30+
"available_voices": [
31+
"v2/en_speaker_0",
32+
"v2/en_speaker_1",
33+
],
34+
"use_small_models": True,
35+
"use_gpu": False,
36+
"offload_cpu": True,
37+
"file_format": file_format,
38+
"bits_per_sample": bits_per_sample,
39+
},
40+
local=True,
41+
returns=[
42+
"audio_files: path",
43+
"audio_files_dataframe: dataset",
44+
"text_to_speech_errors: file",
45+
],
46+
artifact_path=test_directory,
47+
)
48+
assert function_run.error == "Run state (completed) is not in error state"
49+
for key in ["audio_files", "audio_files_dataframe", "text_to_speech_errors"]:
50+
assert key in function_run.outputs and function_run.outputs[key] is not None

0 commit comments

Comments
 (0)