Skip to content

Commit 3f033dc

Browse files
Change: Coeiroink側のstyleIdを使うように変更
1 parent 125d07b commit 3f033dc

File tree

3 files changed

+49
-52
lines changed

3 files changed

+49
-52
lines changed

providers/info.ts

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { dirname, toBase64 } from "../deps.ts";
2-
import { getIdFromSpeaker, getOrAppendSpeaker } from "../store.ts";
32
import { Provider } from "./index.ts";
43

54
let speakers: {
@@ -19,7 +18,7 @@ const infoProvider: Provider = ({ baseClient, app }) => {
1918
app.get("/version", async (c) => {
2019
await baseClient.get("");
2120

22-
return c.json("0.1.1");
21+
return c.json("0.2.0");
2322
});
2423

2524
app.get(
@@ -52,6 +51,28 @@ const infoProvider: Provider = ({ baseClient, app }) => {
5251
],
5352
contributors: [],
5453
},
54+
{
55+
version: "0.2.0",
56+
descriptions: [
57+
"Change: Coeiroink側のstyleIdを使うように変更",
58+
],
59+
contributors: ["sevenc-nanashi"],
60+
},
61+
{
62+
version: "0.1.3",
63+
descriptions: [
64+
"Fix: 読点周りの挙動を修正",
65+
],
66+
contributors: ["sevenc-nanashi"],
67+
},
68+
{
69+
version: "0.1.2",
70+
descriptions: [
71+
"Add: mutexを追加",
72+
"Add: 自動起動を追加",
73+
],
74+
contributors: ["sevenc-nanashi"],
75+
},
5576
{
5677
version: "0.1.1",
5778
descriptions: [
@@ -102,19 +123,15 @@ const infoProvider: Provider = ({ baseClient, app }) => {
102123
speakers = await baseClient.get("v1/speakers").json();
103124

104125
return c.json(
105-
await Promise.all(
106-
speakers.map(async (speaker) => ({
107-
name: speaker.speakerName,
108-
speaker_uuid: speaker.speakerUuid,
109-
styles: await Promise.all(
110-
speaker.styles.map(async (style) => ({
111-
name: style.styleName,
112-
id: await getOrAppendSpeaker(speaker.speakerUuid, style.styleId),
113-
})),
114-
),
115-
version: speaker.version,
126+
speakers.map((speaker) => ({
127+
name: speaker.speakerName,
128+
speaker_uuid: speaker.speakerUuid,
129+
styles: speaker.styles.map((style) => ({
130+
name: style.styleName,
131+
id: style.styleId,
116132
})),
117-
),
133+
version: speaker.version,
134+
})),
118135
);
119136
});
120137

@@ -131,7 +148,7 @@ const infoProvider: Provider = ({ baseClient, app }) => {
131148
policy: "https://coeiroink.com/terms を参照して下さい。",
132149
portrait: speaker.base64Portrait,
133150
style_infos: speaker.styles.map((style) => ({
134-
id: getIdFromSpeaker(speakerUuid, style.styleId),
151+
id: style.styleId,
135152
icon: style.base64Icon,
136153
portrait: style.base64Portrait,
137154
voice_samples: [],

providers/synthesis.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { Provider } from "./index.ts";
2-
import { getSpeakerFromId } from "../store.ts";
32
import { AsyncLock, wanakana } from "../deps.ts";
43

54
type Prosody = {
@@ -169,7 +168,21 @@ const synthesisProvider: Provider = ({ baseClient, app }) => {
169168
}
170169
const accentPhrases = audioQuery.accent_phrases;
171170
const prosody = accentPhrasesToProsody(accentPhrases);
172-
const [speakerUuid, styleId] = getSpeakerFromId(speakerId) ?? [];
171+
const speakers = await baseClient.get("v1/speakers").json<{
172+
speakerUuid: string;
173+
styles: {
174+
styleId: number;
175+
}[];
176+
}[]>();
177+
let speakerUuid: string | undefined;
178+
let styleId: number | undefined;
179+
for (const speaker of speakers) {
180+
if (speaker.styles.find((style) => style.styleId === speakerId)) {
181+
speakerUuid = speaker.speakerUuid;
182+
styleId = speakerId;
183+
break;
184+
}
185+
}
173186
if (!speakerUuid) {
174187
c.status(400);
175188
return c.json({

store.ts

Lines changed: 2 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,16 @@
11
import { homeDir } from "./deps.ts";
22

3-
type SpeakerMap = [number, [string, number]][];
43
type Store = {
5-
speakerMap: SpeakerMap;
64
enginePath: string | undefined;
75
};
86

97
const filePath = homeDir + "/.coeiroink-v2.json";
10-
export let store: Store = { speakerMap: [], enginePath: undefined };
11-
const oldFilePath = homeDir + "/.coeiroink-v2-bridge-map.json";
12-
if (await Deno.stat(oldFilePath).catch(() => null)) {
13-
console.log("Migrating old speaker map...");
14-
store.speakerMap.push(...JSON.parse(await Deno.readTextFile(oldFilePath)));
15-
await Deno.remove(oldFilePath);
16-
}
8+
export let store: Store = { enginePath: undefined };
9+
1710
if (await Deno.stat(filePath).catch(() => null)) {
1811
console.log("Loading store...");
1912
store = JSON.parse(await Deno.readTextFile(filePath));
2013
}
21-
22-
export const getSpeakerFromId = (id: number) => {
23-
return store.speakerMap.find(([id_, _]) => id_ === id)?.[1];
24-
};
25-
26-
export const getIdFromSpeaker = (speakerUuid: string, styleId: number) => {
27-
return store.speakerMap.find(
28-
([_, [speakerUuid_, styleId_]]) =>
29-
speakerUuid_ === speakerUuid && styleId_ === styleId,
30-
)?.[0];
31-
};
32-
33-
export const getOrAppendSpeaker = async (
34-
speakerUuid: string,
35-
styleId: number,
36-
) => {
37-
const speakerId = getIdFromSpeaker(speakerUuid, styleId);
38-
if (speakerId !== undefined) {
39-
return speakerId;
40-
}
41-
const speakerCount = store.speakerMap.length;
42-
store.speakerMap.push([speakerCount, [speakerUuid, styleId]]);
43-
await saveStore();
44-
return speakerCount;
45-
};
46-
4714
export const saveStore = async () => {
4815
await Deno.writeTextFile(filePath + ".tmp", JSON.stringify(store));
4916
await Deno.rename(filePath + ".tmp", filePath);

0 commit comments

Comments
 (0)