diff --git a/crates/voicevox_core/src/publish.rs b/crates/voicevox_core/src/publish.rs index 36d43169c..1a0684a0d 100644 --- a/crates/voicevox_core/src/publish.rs +++ b/crates/voicevox_core/src/publish.rs @@ -7,12 +7,96 @@ use onnxruntime::{ ndarray, session::{AnyArray, NdArray}, }; -use std::ffi::{CStr, CString}; use std::path::PathBuf; use std::sync::Mutex; +use std::{ + ffi::{CStr, CString}, + path::Path, +}; const PHONEME_LENGTH_MINIMAL: f32 = 0.01; +/// 音声合成モデルIdの実体 +pub type RawSpeechSynthesisModelId = usize; + +/// 音声合成モデルId (型を強く分けるためにこうしている) +pub struct SpeechSynthesisModelId(RawSpeechSynthesisModelId); + +/// 音声合成モデル +pub struct SpeechSynthesisModel {} + +/// 音声合成モデルのメタ情報 +pub struct SpeechSynthesisModelMeta { + id: SpeechSynthesisModelId, + speakers: Vec, +} + +/// スピーカーのメタ情報 +pub struct SpeakerMeta { + id: SpeakerId, + name: String, + styles: Vec, + version: String, + uuid: String, +} + +pub struct StyleMeta { + id: StyleId, + name: String, +} + +impl SpeechSynthesisModel { + /// 与えられたパスからモデルを取得する + pub fn from_path(path: impl AsRef) -> Result {} + /// 与えられたidからモデルを取得する + pub fn from_id(id: &SpeechSynthesisModelId) -> Result {} + /// このモデルのIdを返す + pub fn id(&self) -> &SpeechSynthesisModelId {} + /// このモデルのメタ情報を返す + pub fn metas(&self) -> &SpeechSynthesisModelMeta {} +} + +/// スタイルIdの実体 +pub type RawStyleId = usize; +/// スタイルId +pub struct StyleId(RawStyleId); + +/// スピーカーIdの実体 +pub type RawSpeakerId = usize; + +/// スピーカーId +pub struct SpeakerId(RawSpeakerId); + +/// 音声シンセサイザ +pub struct SpeechSynthesizer {} +impl SpeechSynthesizer { + /// コンストラクタ兼初期化 + pub fn new_with_initialize(options: InitializeOptions) -> Self {} + + /// 音声合成モデルを読み込む + pub fn load_model(&mut self, model: SpeechSynthesisModel) -> Result<()> {} + + /// 指定したモデルIdの音声合成モデルを開放する + pub fn unload_model(&mut self, model_id: &SpeechSynthesisModelId) -> Result<()> {} + + /// 指定したモデルIdの音声合成モデルが読み込まれているか判定する + pub fn is_loaded_model(&self, model_id: &SpeechSynthesisModelId) -> bool {} + + /// 今読み込んでいる音声合成モデルのメタ情報を返す + pub fn metas(&self) -> &SpeechSynthesisModelMeta {} + + /// 音声合成を行う + pub fn synthesis(&self, style_id: &StyleId) -> Result> {} +} + +pub struct Device {} + +/// スピーカーId,スタイルIdから音声合成モデルIdを取得する +pub fn get_model_id(speaker_id: &SpeakerId, style_id: &StyleId) -> Result {} + +/// サポートされているデバイス情報を取得する +pub fn get_supported_devices() -> Result {} + pub struct VoicevoxCore { synthesis_engine: SynthesisEngine, use_gpu: bool,