@mastra/voice-murf 0.1.1-alpha.0 → 0.1.1-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +10 -5
- package/CHANGELOG.md +33 -0
- package/dist/_tsup-dts-rollup.d.cts +57 -0
- package/dist/index.cjs +243 -0
- package/dist/index.d.cts +3 -0
- package/dist/index.js +1 -1
- package/package.json +7 -3
- package/src/index.test.ts +1 -2
- package/src/index.ts +2 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
|
|
2
|
-
> @mastra/voice-murf@0.1.1-alpha.
|
|
3
|
-
> tsup src/index.ts --format esm --experimental-dts --clean --treeshake
|
|
2
|
+
> @mastra/voice-murf@0.1.1-alpha.3 build /home/runner/work/mastra/mastra/voice/murf
|
|
3
|
+
> tsup src/index.ts --format esm,cjs --experimental-dts --clean --treeshake
|
|
4
4
|
|
|
5
5
|
[34mCLI[39m Building entry: src/index.ts
|
|
6
6
|
[34mCLI[39m Using tsconfig: tsconfig.json
|
|
7
7
|
[34mCLI[39m tsup v8.3.6
|
|
8
8
|
[34mTSC[39m Build start
|
|
9
|
-
[32mTSC[39m ⚡️ Build success in
|
|
9
|
+
[32mTSC[39m ⚡️ Build success in 6159ms
|
|
10
10
|
[34mDTS[39m Build start
|
|
11
11
|
[34mCLI[39m Target: es2022
|
|
12
12
|
Analysis will use the bundled TypeScript version 5.7.3
|
|
13
13
|
[36mWriting package typings: /home/runner/work/mastra/mastra/voice/murf/dist/_tsup-dts-rollup.d.ts[39m
|
|
14
|
-
|
|
14
|
+
Analysis will use the bundled TypeScript version 5.7.3
|
|
15
|
+
[36mWriting package typings: /home/runner/work/mastra/mastra/voice/murf/dist/_tsup-dts-rollup.d.cts[39m
|
|
16
|
+
[32mDTS[39m ⚡️ Build success in 8818ms
|
|
15
17
|
[34mCLI[39m Cleaning output folder
|
|
16
18
|
[34mESM[39m Build start
|
|
19
|
+
[34mCJS[39m Build start
|
|
17
20
|
[32mESM[39m [1mdist/index.js [22m[32m4.95 KB[39m
|
|
18
|
-
[32mESM[39m ⚡️ Build success in
|
|
21
|
+
[32mESM[39m ⚡️ Build success in 526ms
|
|
22
|
+
[32mCJS[39m [1mdist/index.cjs [22m[32m5.13 KB[39m
|
|
23
|
+
[32mCJS[39m ⚡️ Build success in 529ms
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
# @mastra/voice-murf
|
|
2
2
|
|
|
3
|
+
## 0.1.1-alpha.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- bb4f447: Add support for commonjs
|
|
8
|
+
- Updated dependencies [0fd78ac]
|
|
9
|
+
- Updated dependencies [0d25b75]
|
|
10
|
+
- Updated dependencies [fd14a3f]
|
|
11
|
+
- Updated dependencies [3f369a2]
|
|
12
|
+
- Updated dependencies [4d4e1e1]
|
|
13
|
+
- Updated dependencies [bb4f447]
|
|
14
|
+
- @mastra/core@0.4.3-alpha.3
|
|
15
|
+
|
|
16
|
+
## 0.1.1-alpha.2
|
|
17
|
+
|
|
18
|
+
### Patch Changes
|
|
19
|
+
|
|
20
|
+
- Updated dependencies [2512a93]
|
|
21
|
+
- Updated dependencies [e62de74]
|
|
22
|
+
- @mastra/core@0.4.3-alpha.2
|
|
23
|
+
|
|
24
|
+
## 0.1.1-alpha.1
|
|
25
|
+
|
|
26
|
+
### Patch Changes
|
|
27
|
+
|
|
28
|
+
- Updated dependencies [0d185b1]
|
|
29
|
+
- Updated dependencies [ed55f1d]
|
|
30
|
+
- Updated dependencies [8d13b14]
|
|
31
|
+
- Updated dependencies [3ee4831]
|
|
32
|
+
- Updated dependencies [108793c]
|
|
33
|
+
- Updated dependencies [5f28f44]
|
|
34
|
+
- @mastra/core@0.4.3-alpha.1
|
|
35
|
+
|
|
3
36
|
## 0.1.1-alpha.0
|
|
4
37
|
|
|
5
38
|
### Patch Changes
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { MastraVoice } from '@mastra/core/voice';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* List of available voices for Murf TTS
|
|
5
|
+
*/
|
|
6
|
+
export declare const MURF_VOICES: readonly ["en-UK-hazel", "en-US-cooper", "en-US-imani", "it-IT-giorgio", "en-US-wayne", "en-IN-shivani", "en-US-daniel", "bn-IN-anwesha", "es-MX-alejandro", "en-AU-joyce", "en-US-zion", "en-IN-isha", "en-US-riley", "ko-KR-hwan", "fr-FR-adélie", "en-US-carter", "en-UK-gabriel", "en-UK-juliet", "en-IN-arohi", "fr-FR-maxime", "de-DE-josephine", "en-UK-hugo", "en-US-samantha", "de-DE-erna", "zh-CN-baolin", "pt-BR-isadora", "it-IT-vincenzo", "en-US-terrell", "en-US-denzel", "en-UK-heidi", "en-US-miles", "en-US-abigail", "fr-FR-justine", "it-IT-greta", "en-AU-shane", "en-UK-peter", "nl-NL-famke", "en-AU-ivy", "nl-NL-dirk", "fr-FR-axel", "es-ES-carla", "en-US-claire", "ko-KR-jangmi", "ko-KR-sanghoon", "it-IT-vera", "hi-IN-rahul", "es-ES-elvira", "es-ES-enrique", "en-UK-aiden", "en-US-ronnie", "en-UK-amber", "hi-IN-shweta", "hi-IN-amit", "en-AU-jimm", "en-UK-pearl", "pt-BR-benício", "en-UK-freddie", "en-US-ryan", "pt-BR-eloa", "en-US-charlotte", "de-DE-lia", "en-US-natalie", "en-US-michelle", "en-US-phoebe", "es-ES-carmen", "en-US-caleb", "en-US-iris", "en-UK-harrison", "en-US-marcus", "en-US-josie", "en-US-daisy", "en-US-charles", "en-UK-reggie", "en-US-julia", "en-SCOTT-emily", "en-US-dylan", "es-MX-valeria", "en-IN-eashwar", "en-AU-evelyn", "de-DE-lara", "en-US-evander", "en-SCOTT-rory", "ta-IN-iniya", "en-AU-leyton", "fr-FR-louise", "zh-CN-wei", "ko-KR-gyeong", "de-DE-matthias", "en-IN-rohan", "en-US-delilah", "bn-IN-abhik", "en-US-angela", "en-US-naomi", "es-MX-carlos", "nl-NL-merel", "en-US-alicia", "en-IN-alia", "zh-CN-jiao", "en-US-june", "en-AU-ashton", "en-UK-finley", "pl-PL-blazej", "zh-CN-zhang", "en-AU-kylie", "en-US-jayden", "en-IN-aarav", "de-DE-björn", "bn-IN-ishani", "zh-CN-yuxan", "fr-FR-louis", "ko-KR-jong-su", "en-AU-harper", "en-UK-ruby", "en-US-ken", "ta-IN-mani", "de-DE-ralf", "en-UK-jaxon", "en-US-river", "en-IN-priya", "en-UK-theo", "en-UK-katie", "pl-PL-jacek", "it-IT-lorenzo", "hi-IN-shaan", "en-US-amara", "en-UK-mason", "en-IN-surya", "en-US-finn", "pt-BR-gustavo", "hi-IN-kabir", "es-ES-javier", "en-AU-mitch", "pt-BR-heitor", "en-US-edmund", "hi-IN-ayushi", "pl-PL-kasia", "es-MX-luisa", "zh-CN-tao", "en-US-molly"];
|
|
7
|
+
|
|
8
|
+
export declare type MurfConfig = {
|
|
9
|
+
name: 'GEN1' | 'GEN2';
|
|
10
|
+
apiKey?: string;
|
|
11
|
+
properties?: Omit<SpeechCreateParams, 'modelVersion' | 'voiceId' | 'text'>;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export declare class MurfVoice extends MastraVoice {
|
|
15
|
+
private client;
|
|
16
|
+
private defaultVoice;
|
|
17
|
+
private properties;
|
|
18
|
+
constructor({ speechModel, speaker }?: {
|
|
19
|
+
speechModel?: MurfConfig;
|
|
20
|
+
speaker?: string;
|
|
21
|
+
});
|
|
22
|
+
private streamToString;
|
|
23
|
+
speak(input: string | NodeJS.ReadableStream, options?: {
|
|
24
|
+
speaker?: string;
|
|
25
|
+
properties?: Omit<SpeechCreateParams, 'modelVersion' | 'voiceId' | 'text'>;
|
|
26
|
+
}): Promise<NodeJS.ReadableStream>;
|
|
27
|
+
listen(_input: NodeJS.ReadableStream, _options?: Record<string, unknown>): Promise<string | NodeJS.ReadableStream>;
|
|
28
|
+
getSpeakers(): Promise<{
|
|
29
|
+
voiceId: "en-UK-hazel" | "en-US-cooper" | "en-US-imani" | "it-IT-giorgio" | "en-US-wayne" | "en-IN-shivani" | "en-US-daniel" | "bn-IN-anwesha" | "es-MX-alejandro" | "en-AU-joyce" | "en-US-zion" | "en-IN-isha" | "en-US-riley" | "ko-KR-hwan" | "fr-FR-adélie" | "en-US-carter" | "en-UK-gabriel" | "en-UK-juliet" | "en-IN-arohi" | "fr-FR-maxime" | "de-DE-josephine" | "en-UK-hugo" | "en-US-samantha" | "de-DE-erna" | "zh-CN-baolin" | "pt-BR-isadora" | "it-IT-vincenzo" | "en-US-terrell" | "en-US-denzel" | "en-UK-heidi" | "en-US-miles" | "en-US-abigail" | "fr-FR-justine" | "it-IT-greta" | "en-AU-shane" | "en-UK-peter" | "nl-NL-famke" | "en-AU-ivy" | "nl-NL-dirk" | "fr-FR-axel" | "es-ES-carla" | "en-US-claire" | "ko-KR-jangmi" | "ko-KR-sanghoon" | "it-IT-vera" | "hi-IN-rahul" | "es-ES-elvira" | "es-ES-enrique" | "en-UK-aiden" | "en-US-ronnie" | "en-UK-amber" | "hi-IN-shweta" | "hi-IN-amit" | "en-AU-jimm" | "en-UK-pearl" | "pt-BR-benício" | "en-UK-freddie" | "en-US-ryan" | "pt-BR-eloa" | "en-US-charlotte" | "de-DE-lia" | "en-US-natalie" | "en-US-michelle" | "en-US-phoebe" | "es-ES-carmen" | "en-US-caleb" | "en-US-iris" | "en-UK-harrison" | "en-US-marcus" | "en-US-josie" | "en-US-daisy" | "en-US-charles" | "en-UK-reggie" | "en-US-julia" | "en-SCOTT-emily" | "en-US-dylan" | "es-MX-valeria" | "en-IN-eashwar" | "en-AU-evelyn" | "de-DE-lara" | "en-US-evander" | "en-SCOTT-rory" | "ta-IN-iniya" | "en-AU-leyton" | "fr-FR-louise" | "zh-CN-wei" | "ko-KR-gyeong" | "de-DE-matthias" | "en-IN-rohan" | "en-US-delilah" | "bn-IN-abhik" | "en-US-angela" | "en-US-naomi" | "es-MX-carlos" | "nl-NL-merel" | "en-US-alicia" | "en-IN-alia" | "zh-CN-jiao" | "en-US-june" | "en-AU-ashton" | "en-UK-finley" | "pl-PL-blazej" | "zh-CN-zhang" | "en-AU-kylie" | "en-US-jayden" | "en-IN-aarav" | "de-DE-björn" | "bn-IN-ishani" | "zh-CN-yuxan" | "fr-FR-louis" | "ko-KR-jong-su" | "en-AU-harper" | "en-UK-ruby" | "en-US-ken" | "ta-IN-mani" | "de-DE-ralf" | "en-UK-jaxon" | "en-US-river" | "en-IN-priya" | "en-UK-theo" | "en-UK-katie" | "pl-PL-jacek" | "it-IT-lorenzo" | "hi-IN-shaan" | "en-US-amara" | "en-UK-mason" | "en-IN-surya" | "en-US-finn" | "pt-BR-gustavo" | "hi-IN-kabir" | "es-ES-javier" | "en-AU-mitch" | "pt-BR-heitor" | "en-US-edmund" | "hi-IN-ayushi" | "pl-PL-kasia" | "es-MX-luisa" | "zh-CN-tao" | "en-US-molly";
|
|
30
|
+
name: "en-UK-hazel" | "en-US-cooper" | "en-US-imani" | "it-IT-giorgio" | "en-US-wayne" | "en-IN-shivani" | "en-US-daniel" | "bn-IN-anwesha" | "es-MX-alejandro" | "en-AU-joyce" | "en-US-zion" | "en-IN-isha" | "en-US-riley" | "ko-KR-hwan" | "fr-FR-adélie" | "en-US-carter" | "en-UK-gabriel" | "en-UK-juliet" | "en-IN-arohi" | "fr-FR-maxime" | "de-DE-josephine" | "en-UK-hugo" | "en-US-samantha" | "de-DE-erna" | "zh-CN-baolin" | "pt-BR-isadora" | "it-IT-vincenzo" | "en-US-terrell" | "en-US-denzel" | "en-UK-heidi" | "en-US-miles" | "en-US-abigail" | "fr-FR-justine" | "it-IT-greta" | "en-AU-shane" | "en-UK-peter" | "nl-NL-famke" | "en-AU-ivy" | "nl-NL-dirk" | "fr-FR-axel" | "es-ES-carla" | "en-US-claire" | "ko-KR-jangmi" | "ko-KR-sanghoon" | "it-IT-vera" | "hi-IN-rahul" | "es-ES-elvira" | "es-ES-enrique" | "en-UK-aiden" | "en-US-ronnie" | "en-UK-amber" | "hi-IN-shweta" | "hi-IN-amit" | "en-AU-jimm" | "en-UK-pearl" | "pt-BR-benício" | "en-UK-freddie" | "en-US-ryan" | "pt-BR-eloa" | "en-US-charlotte" | "de-DE-lia" | "en-US-natalie" | "en-US-michelle" | "en-US-phoebe" | "es-ES-carmen" | "en-US-caleb" | "en-US-iris" | "en-UK-harrison" | "en-US-marcus" | "en-US-josie" | "en-US-daisy" | "en-US-charles" | "en-UK-reggie" | "en-US-julia" | "en-SCOTT-emily" | "en-US-dylan" | "es-MX-valeria" | "en-IN-eashwar" | "en-AU-evelyn" | "de-DE-lara" | "en-US-evander" | "en-SCOTT-rory" | "ta-IN-iniya" | "en-AU-leyton" | "fr-FR-louise" | "zh-CN-wei" | "ko-KR-gyeong" | "de-DE-matthias" | "en-IN-rohan" | "en-US-delilah" | "bn-IN-abhik" | "en-US-angela" | "en-US-naomi" | "es-MX-carlos" | "nl-NL-merel" | "en-US-alicia" | "en-IN-alia" | "zh-CN-jiao" | "en-US-june" | "en-AU-ashton" | "en-UK-finley" | "pl-PL-blazej" | "zh-CN-zhang" | "en-AU-kylie" | "en-US-jayden" | "en-IN-aarav" | "de-DE-björn" | "bn-IN-ishani" | "zh-CN-yuxan" | "fr-FR-louis" | "ko-KR-jong-su" | "en-AU-harper" | "en-UK-ruby" | "en-US-ken" | "ta-IN-mani" | "de-DE-ralf" | "en-UK-jaxon" | "en-US-river" | "en-IN-priya" | "en-UK-theo" | "en-UK-katie" | "pl-PL-jacek" | "it-IT-lorenzo" | "hi-IN-shaan" | "en-US-amara" | "en-UK-mason" | "en-IN-surya" | "en-US-finn" | "pt-BR-gustavo" | "hi-IN-kabir" | "es-ES-javier" | "en-AU-mitch" | "pt-BR-heitor" | "en-US-edmund" | "hi-IN-ayushi" | "pl-PL-kasia" | "es-MX-luisa" | "zh-CN-tao" | "en-US-molly";
|
|
31
|
+
language: string | undefined;
|
|
32
|
+
gender: string;
|
|
33
|
+
}[]>;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
declare type MurfVoiceId = (typeof MURF_VOICES)[number];
|
|
37
|
+
export { MurfVoiceId }
|
|
38
|
+
export { MurfVoiceId as MurfVoiceId_alias_1 }
|
|
39
|
+
|
|
40
|
+
declare type SpeechCreateParams = {
|
|
41
|
+
voiceId: MurfVoiceId;
|
|
42
|
+
text: string;
|
|
43
|
+
modelVersion: 'GEN1' | 'GEN2';
|
|
44
|
+
style?: string;
|
|
45
|
+
rate?: number;
|
|
46
|
+
pitch?: number;
|
|
47
|
+
sampleRate?: 8000 | 24000 | 44100 | 48000;
|
|
48
|
+
format?: 'MP3' | 'WAV' | 'FLAC' | 'ALAW' | 'ULAW';
|
|
49
|
+
channelType?: 'STEREO' | 'MONO';
|
|
50
|
+
pronunciationDictionary?: Record<string, string>;
|
|
51
|
+
encodeAsBase64?: boolean;
|
|
52
|
+
variation?: number;
|
|
53
|
+
audioDuration?: number;
|
|
54
|
+
multiNativeLocale?: string;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export { }
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var stream = require('stream');
|
|
4
|
+
var voice = require('@mastra/core/voice');
|
|
5
|
+
var ky = require('ky');
|
|
6
|
+
|
|
7
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
|
+
|
|
9
|
+
var ky__default = /*#__PURE__*/_interopDefault(ky);
|
|
10
|
+
|
|
11
|
+
// src/index.ts
|
|
12
|
+
|
|
13
|
+
// src/voices.ts
|
|
14
|
+
var MURF_VOICES = [
|
|
15
|
+
"en-UK-hazel",
|
|
16
|
+
"en-US-cooper",
|
|
17
|
+
"en-US-imani",
|
|
18
|
+
"it-IT-giorgio",
|
|
19
|
+
"en-US-wayne",
|
|
20
|
+
"en-IN-shivani",
|
|
21
|
+
"en-US-daniel",
|
|
22
|
+
"bn-IN-anwesha",
|
|
23
|
+
"es-MX-alejandro",
|
|
24
|
+
"en-AU-joyce",
|
|
25
|
+
"en-US-zion",
|
|
26
|
+
"en-IN-isha",
|
|
27
|
+
"en-US-riley",
|
|
28
|
+
"ko-KR-hwan",
|
|
29
|
+
"fr-FR-ad\xE9lie",
|
|
30
|
+
"en-US-carter",
|
|
31
|
+
"en-UK-gabriel",
|
|
32
|
+
"en-UK-juliet",
|
|
33
|
+
"en-IN-arohi",
|
|
34
|
+
"fr-FR-maxime",
|
|
35
|
+
"de-DE-josephine",
|
|
36
|
+
"en-UK-hugo",
|
|
37
|
+
"en-US-samantha",
|
|
38
|
+
"de-DE-erna",
|
|
39
|
+
"zh-CN-baolin",
|
|
40
|
+
"pt-BR-isadora",
|
|
41
|
+
"it-IT-vincenzo",
|
|
42
|
+
"en-US-terrell",
|
|
43
|
+
"en-US-denzel",
|
|
44
|
+
"en-UK-heidi",
|
|
45
|
+
"en-US-miles",
|
|
46
|
+
"en-US-abigail",
|
|
47
|
+
"fr-FR-justine",
|
|
48
|
+
"it-IT-greta",
|
|
49
|
+
"en-AU-shane",
|
|
50
|
+
"en-UK-peter",
|
|
51
|
+
"nl-NL-famke",
|
|
52
|
+
"en-AU-ivy",
|
|
53
|
+
"nl-NL-dirk",
|
|
54
|
+
"fr-FR-axel",
|
|
55
|
+
"es-ES-carla",
|
|
56
|
+
"en-US-claire",
|
|
57
|
+
"ko-KR-jangmi",
|
|
58
|
+
"ko-KR-sanghoon",
|
|
59
|
+
"it-IT-vera",
|
|
60
|
+
"hi-IN-rahul",
|
|
61
|
+
"es-ES-elvira",
|
|
62
|
+
"es-ES-enrique",
|
|
63
|
+
"en-UK-aiden",
|
|
64
|
+
"en-US-ronnie",
|
|
65
|
+
"en-UK-amber",
|
|
66
|
+
"hi-IN-shweta",
|
|
67
|
+
"hi-IN-amit",
|
|
68
|
+
"en-AU-jimm",
|
|
69
|
+
"en-UK-pearl",
|
|
70
|
+
"pt-BR-ben\xEDcio",
|
|
71
|
+
"en-UK-freddie",
|
|
72
|
+
"en-US-ryan",
|
|
73
|
+
"pt-BR-eloa",
|
|
74
|
+
"en-US-charlotte",
|
|
75
|
+
"de-DE-lia",
|
|
76
|
+
"en-US-natalie",
|
|
77
|
+
"en-US-michelle",
|
|
78
|
+
"en-US-phoebe",
|
|
79
|
+
"es-ES-carmen",
|
|
80
|
+
"en-US-caleb",
|
|
81
|
+
"en-US-iris",
|
|
82
|
+
"en-UK-harrison",
|
|
83
|
+
"en-US-marcus",
|
|
84
|
+
"en-US-josie",
|
|
85
|
+
"en-US-daisy",
|
|
86
|
+
"en-US-charles",
|
|
87
|
+
"en-UK-reggie",
|
|
88
|
+
"en-US-julia",
|
|
89
|
+
"en-SCOTT-emily",
|
|
90
|
+
"en-US-dylan",
|
|
91
|
+
"es-MX-valeria",
|
|
92
|
+
"en-IN-eashwar",
|
|
93
|
+
"en-AU-evelyn",
|
|
94
|
+
"de-DE-lara",
|
|
95
|
+
"en-US-evander",
|
|
96
|
+
"en-SCOTT-rory",
|
|
97
|
+
"ta-IN-iniya",
|
|
98
|
+
"en-AU-leyton",
|
|
99
|
+
"fr-FR-louise",
|
|
100
|
+
"zh-CN-wei",
|
|
101
|
+
"ko-KR-gyeong",
|
|
102
|
+
"de-DE-matthias",
|
|
103
|
+
"en-IN-rohan",
|
|
104
|
+
"en-US-delilah",
|
|
105
|
+
"bn-IN-abhik",
|
|
106
|
+
"en-US-angela",
|
|
107
|
+
"en-US-naomi",
|
|
108
|
+
"es-MX-carlos",
|
|
109
|
+
"nl-NL-merel",
|
|
110
|
+
"en-US-alicia",
|
|
111
|
+
"en-IN-alia",
|
|
112
|
+
"zh-CN-jiao",
|
|
113
|
+
"en-US-june",
|
|
114
|
+
"en-AU-ashton",
|
|
115
|
+
"en-UK-finley",
|
|
116
|
+
"pl-PL-blazej",
|
|
117
|
+
"zh-CN-zhang",
|
|
118
|
+
"en-AU-kylie",
|
|
119
|
+
"en-US-jayden",
|
|
120
|
+
"en-IN-aarav",
|
|
121
|
+
"de-DE-bj\xF6rn",
|
|
122
|
+
"bn-IN-ishani",
|
|
123
|
+
"zh-CN-yuxan",
|
|
124
|
+
"fr-FR-louis",
|
|
125
|
+
"ko-KR-jong-su",
|
|
126
|
+
"en-AU-harper",
|
|
127
|
+
"en-UK-ruby",
|
|
128
|
+
"en-US-ken",
|
|
129
|
+
"ta-IN-mani",
|
|
130
|
+
"de-DE-ralf",
|
|
131
|
+
"en-UK-jaxon",
|
|
132
|
+
"en-US-river",
|
|
133
|
+
"en-IN-priya",
|
|
134
|
+
"en-UK-theo",
|
|
135
|
+
"en-UK-katie",
|
|
136
|
+
"pl-PL-jacek",
|
|
137
|
+
"it-IT-lorenzo",
|
|
138
|
+
"hi-IN-shaan",
|
|
139
|
+
"en-US-amara",
|
|
140
|
+
"en-UK-mason",
|
|
141
|
+
"en-IN-surya",
|
|
142
|
+
"en-US-finn",
|
|
143
|
+
"pt-BR-gustavo",
|
|
144
|
+
"hi-IN-kabir",
|
|
145
|
+
"es-ES-javier",
|
|
146
|
+
"en-AU-mitch",
|
|
147
|
+
"pt-BR-heitor",
|
|
148
|
+
"en-US-edmund",
|
|
149
|
+
"hi-IN-ayushi",
|
|
150
|
+
"pl-PL-kasia",
|
|
151
|
+
"es-MX-luisa",
|
|
152
|
+
"zh-CN-tao",
|
|
153
|
+
"en-US-molly"
|
|
154
|
+
];
|
|
155
|
+
|
|
156
|
+
// src/index.ts
|
|
157
|
+
var MurfVoice = class extends voice.MastraVoice {
|
|
158
|
+
client;
|
|
159
|
+
defaultVoice;
|
|
160
|
+
properties;
|
|
161
|
+
constructor({ speechModel, speaker } = {}) {
|
|
162
|
+
super({
|
|
163
|
+
speechModel: {
|
|
164
|
+
name: speechModel?.name ?? "GEN2",
|
|
165
|
+
apiKey: speechModel?.apiKey ?? process.env.MURF_API_KEY
|
|
166
|
+
},
|
|
167
|
+
speaker: speaker ?? MURF_VOICES[0]
|
|
168
|
+
});
|
|
169
|
+
const apiKey = this.speechModel?.apiKey;
|
|
170
|
+
if (!apiKey) {
|
|
171
|
+
throw new Error("MURF_API_KEY is not set");
|
|
172
|
+
}
|
|
173
|
+
this.properties = {
|
|
174
|
+
...speechModel?.properties
|
|
175
|
+
};
|
|
176
|
+
this.client = ky__default.default.create({
|
|
177
|
+
prefixUrl: "https://api.murf.ai",
|
|
178
|
+
headers: {
|
|
179
|
+
"api-key": apiKey
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
this.defaultVoice = speaker ?? MURF_VOICES[0];
|
|
183
|
+
}
|
|
184
|
+
async streamToString(stream) {
|
|
185
|
+
const chunks = [];
|
|
186
|
+
for await (const chunk of stream) {
|
|
187
|
+
chunks.push(Buffer.from(chunk));
|
|
188
|
+
}
|
|
189
|
+
return Buffer.concat(chunks).toString("utf-8");
|
|
190
|
+
}
|
|
191
|
+
async speak(input, options) {
|
|
192
|
+
const text = typeof input === "string" ? input : await this.streamToString(input);
|
|
193
|
+
return this.traced(async () => {
|
|
194
|
+
const response = await this.client.post("v1/speech/generate", {
|
|
195
|
+
json: {
|
|
196
|
+
voiceId: options?.speaker || this.defaultVoice,
|
|
197
|
+
text,
|
|
198
|
+
modelVersion: this.speechModel?.name,
|
|
199
|
+
...this.properties,
|
|
200
|
+
...options?.properties
|
|
201
|
+
}
|
|
202
|
+
}).json();
|
|
203
|
+
const stream$1 = new stream.PassThrough();
|
|
204
|
+
const audioResponse = await fetch(response.audioFile);
|
|
205
|
+
if (!audioResponse.body) {
|
|
206
|
+
throw new Error("No response body received");
|
|
207
|
+
}
|
|
208
|
+
const reader = audioResponse.body.getReader();
|
|
209
|
+
(async () => {
|
|
210
|
+
try {
|
|
211
|
+
while (true) {
|
|
212
|
+
const { done, value } = await reader.read();
|
|
213
|
+
if (done) {
|
|
214
|
+
stream$1.end();
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
stream$1.write(value);
|
|
218
|
+
}
|
|
219
|
+
} catch (error) {
|
|
220
|
+
stream$1.destroy(error);
|
|
221
|
+
}
|
|
222
|
+
})().catch((error) => {
|
|
223
|
+
stream$1.destroy(error);
|
|
224
|
+
});
|
|
225
|
+
return stream$1;
|
|
226
|
+
}, "voice.murf.speak")();
|
|
227
|
+
}
|
|
228
|
+
async listen(_input, _options) {
|
|
229
|
+
throw new Error("Murf does not support speech recognition");
|
|
230
|
+
}
|
|
231
|
+
async getSpeakers() {
|
|
232
|
+
return this.traced(async () => {
|
|
233
|
+
return MURF_VOICES.map((voice) => ({
|
|
234
|
+
voiceId: voice,
|
|
235
|
+
name: voice,
|
|
236
|
+
language: voice.split("-")[0],
|
|
237
|
+
gender: "neutral"
|
|
238
|
+
}));
|
|
239
|
+
}, "voice.murf.getSpeakers")();
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
exports.MurfVoice = MurfVoice;
|
package/dist/index.d.cts
ADDED
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mastra/voice-murf",
|
|
3
|
-
"version": "0.1.1-alpha.
|
|
3
|
+
"version": "0.1.1-alpha.3",
|
|
4
4
|
"description": "Mastra Murf voice integration",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -10,6 +10,10 @@
|
|
|
10
10
|
"import": {
|
|
11
11
|
"types": "./dist/index.d.ts",
|
|
12
12
|
"default": "./dist/index.js"
|
|
13
|
+
},
|
|
14
|
+
"require": {
|
|
15
|
+
"types": "./dist/index.d.cts",
|
|
16
|
+
"default": "./dist/index.cjs"
|
|
13
17
|
}
|
|
14
18
|
},
|
|
15
19
|
"./package.json": "./package.json"
|
|
@@ -17,7 +21,7 @@
|
|
|
17
21
|
"dependencies": {
|
|
18
22
|
"ky": "^1.7.4",
|
|
19
23
|
"zod": "^3.24.1",
|
|
20
|
-
"@mastra/core": "^0.4.3-alpha.
|
|
24
|
+
"@mastra/core": "^0.4.3-alpha.3"
|
|
21
25
|
},
|
|
22
26
|
"devDependencies": {
|
|
23
27
|
"@microsoft/api-extractor": "^7.49.2",
|
|
@@ -29,7 +33,7 @@
|
|
|
29
33
|
"@internal/lint": "0.0.0"
|
|
30
34
|
},
|
|
31
35
|
"scripts": {
|
|
32
|
-
"build": "tsup src/index.ts --format esm --experimental-dts --clean --treeshake",
|
|
36
|
+
"build": "tsup src/index.ts --format esm,cjs --experimental-dts --clean --treeshake",
|
|
33
37
|
"build:watch": "pnpm build --watch",
|
|
34
38
|
"test": "vitest run",
|
|
35
39
|
"lint": "eslint ."
|
package/src/index.test.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { mkdirSync } from 'fs';
|
|
2
|
+
import { writeFile, stat as fsStat } from 'fs/promises';
|
|
2
3
|
import path, { join } from 'path';
|
|
3
4
|
import { Readable } from 'stream';
|
|
4
5
|
import { describe, expect, it, beforeAll } from 'vitest';
|
|
5
6
|
|
|
6
|
-
import { writeFile, stat as fsStat } from 'fs/promises';
|
|
7
|
-
|
|
8
7
|
import { MurfVoice } from './index';
|
|
9
8
|
|
|
10
9
|
describe('MurfVoice', () => {
|
package/src/index.ts
CHANGED