From fb190611160a8931d832ae8c302151d9ed1843ae Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Thu, 22 Jun 2023 08:32:14 +0900 Subject: [PATCH 01/43] =?UTF-8?q?=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=82=92=E5=88=B7=E6=96=B0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/voicevox_core/src/devices.rs | 20 +- crates/voicevox_core/src/engine/model.rs | 28 + crates/voicevox_core/src/engine/open_jtalk.rs | 1 + crates/voicevox_core/src/error.rs | 6 +- crates/voicevox_core/src/metas.rs | 31 +- crates/voicevox_core/src/result_code.rs | 2 +- crates/voicevox_core/src/voice_model.rs | 12 +- crates/voicevox_core/src/voice_synthesizer.rs | 265 ++++++++- .../include/voicevox_core.h | 507 +++++++++++------ crates/voicevox_core_c_api/src/lib.rs | 521 ++++++++++++------ .../python/voicevox_core/_models.py | 86 ++- .../python/voicevox_core/_rust.pyi | 210 +++---- 12 files changed, 1216 insertions(+), 473 deletions(-) diff --git a/crates/voicevox_core/src/devices.rs b/crates/voicevox_core/src/devices.rs index d3141664c..92babaf9d 100644 --- a/crates/voicevox_core/src/devices.rs +++ b/crates/voicevox_core/src/devices.rs @@ -2,15 +2,33 @@ use serde::{Deserialize, Serialize}; use super::*; +/// このライブラリで利用可能なデバイスの情報。 #[derive(Getters, Debug, Serialize, Deserialize)] pub struct SupportedDevices { + /// CPUが利用可能。 + /// + /// 常に`true`。 cpu: bool, + /// [CUDA Execution Provider] (`CUDAExecutionProvider`)が利用可能。 + /// + /// [CUDA Execution Provider]: https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html cuda: bool, + /// [DirectML Execution Provider] (`DmlExecutionProvider`)が利用可能。 + /// + /// [DirectML Execution Provider]: https://onnxruntime.ai/docs/execution-providers/DirectML-ExecutionProvider.html dml: bool, } impl SupportedDevices { - /// サポートされているデバイス情報を取得する + /// `SupportedDevices`をコンストラクトする。 + /// + /// ``` + /// use voicevox_core::SupportedDevices; + /// + /// let supported_devices = SupportedDevices::create()?; + /// # + /// # Result::<_, anyhow::Error>::Ok(()) + /// ``` pub fn create() -> Result { let mut cuda_support = false; let mut dml_support = false; diff --git a/crates/voicevox_core/src/engine/model.rs b/crates/voicevox_core/src/engine/model.rs index ed55f3367..4b1f84986 100644 --- a/crates/voicevox_core/src/engine/model.rs +++ b/crates/voicevox_core/src/engine/model.rs @@ -4,21 +4,33 @@ use serde::{Deserialize, Serialize}; /* 各フィールドのjsonフィールド名はsnake_caseとする*/ +/// モーラ(子音+母音)ごとの情報。 #[derive(Clone, Debug, new, Getters, Deserialize, Serialize)] pub struct MoraModel { + /// 文字。 text: String, + /// 子音の音素。 consonant: Option, + /// 子音の音長。 consonant_length: Option, + /// 母音の音素。 vowel: String, + /// 母音の音長。 vowel_length: f32, + /// 音高。 pitch: f32, } +/// AccentPhrase (アクセント句ごとの情報)。 #[derive(Clone, Debug, new, Getters, Deserialize, Serialize)] pub struct AccentPhraseModel { + /// モーラの列。 moras: Vec, + /// アクセント箇所。 accent: usize, + /// 後ろに無音を付けるかどうか。 pause_mora: Option, + /// 疑問系かどうか。 #[serde(default)] is_interrogative: bool, } @@ -33,18 +45,34 @@ impl AccentPhraseModel { } } +/// AudioQuery (音声合成用のクエリ)。 #[allow(clippy::too_many_arguments)] #[derive(Clone, new, Getters, Deserialize, Serialize)] pub struct AudioQueryModel { + /// アクセント句の列。 accent_phrases: Vec, + /// 全体の話速。 speed_scale: f32, + /// 全体の音高。 pitch_scale: f32, + /// 全体の抑揚。 intonation_scale: f32, + /// 全体の音量。 volume_scale: f32, + /// 音声の前の無音時間。 pre_phoneme_length: f32, + /// 音声の後の無音時間。 post_phoneme_length: f32, + /// 音声データの出力サンプリングレート。 output_sampling_rate: u32, + /// 音声データをステレオ出力するか否か。 output_stereo: bool, + /// \[読み取り専用\] AquesTalkライクな読み仮名。 + /// + /// [`Synthesizer::audio_query`]が返すもののみ`Some`となる。入力としてのAudioQueryでは無視され + /// る。 + /// + /// [`Synthesizer::audio_query`]: crate::Synthesizer::audio_query kana: Option, } diff --git a/crates/voicevox_core/src/engine/open_jtalk.rs b/crates/voicevox_core/src/engine/open_jtalk.rs index f07fe89cb..21630a346 100644 --- a/crates/voicevox_core/src/engine/open_jtalk.rs +++ b/crates/voicevox_core/src/engine/open_jtalk.rs @@ -21,6 +21,7 @@ pub enum OpenJtalkError { pub type Result = std::result::Result; +/// テキスト解析器としてのOpen JTalk。 pub struct OpenJtalk { resources: Mutex, dict_loaded: bool, diff --git a/crates/voicevox_core/src/error.rs b/crates/voicevox_core/src/error.rs index 6c4916412..f4cb537ea 100644 --- a/crates/voicevox_core/src/error.rs +++ b/crates/voicevox_core/src/error.rs @@ -5,11 +5,7 @@ use super::*; use std::path::PathBuf; use thiserror::Error; -/* - * 新しいエラーを定義したら、必ずresult_code.rsにあるVoicevoxResultCodeに対応するコードを定義し、 - * internal.rsにある変換関数に変換処理を加えること - */ - +/// エラー。 #[derive(Error, Debug)] pub enum Error { /* diff --git a/crates/voicevox_core/src/metas.rs b/crates/voicevox_core/src/metas.rs index 7e157bd21..1063ffbb5 100644 --- a/crates/voicevox_core/src/metas.rs +++ b/crates/voicevox_core/src/metas.rs @@ -4,9 +4,17 @@ use super::*; use derive_getters::Getters; use serde::{Deserialize, Serialize}; -/// スタイルIdの実体 +/// [`StyleId`]の実体。 +/// +/// [`StyleId`]: StyleId pub type RawStyleId = u32; -/// スタイルId + +/// スタイルID。 +/// +/// VOICEVOXにおける、ある[話者(speaker)]のある[スタイル(style)] (i.e. 声(voice))を指す。 +/// +/// [話者(speaker)]: SpeakerMeta +/// [スタイル(style)]: StyleMeta #[derive(PartialEq, Eq, Clone, Copy, Ord, PartialOrd, Deserialize, Serialize, new, Debug)] pub struct StyleId(RawStyleId); @@ -22,8 +30,12 @@ impl Display for StyleId { } } +/// [`StyleVersion`]の実体。 +/// +/// [`StyleVersion`]: StyleVersion pub type RawStyleVersion = String; +/// スタイルのバージョン。 #[derive(PartialEq, Eq, Clone, Ord, PartialOrd, Deserialize, Serialize, new, Debug)] pub struct StyleVersion(RawStyleVersion); @@ -39,21 +51,30 @@ impl Display for StyleVersion { } } -/// 音声モデルのメタ情報 +/// 音声モデルのメタ情報。 pub type VoiceModelMeta = Vec; -/// スピーカーのメタ情報 +/// 話者のメタ情報。 #[derive(Deserialize, Serialize, Getters, Clone)] pub struct SpeakerMeta { + /// 話者名。 name: String, + + /// 話者に属するスタイル。 styles: Vec, + + /// 話者のバージョン。 version: StyleVersion, + + /// 話者のUUID。 speaker_uuid: String, } -/// スタイルのメタ情報 +/// スタイルのメタ情報。 #[derive(Deserialize, Serialize, Getters, Clone)] pub struct StyleMeta { + /// スタイルID。 id: StyleId, + /// スタイル名。 name: String, } diff --git a/crates/voicevox_core/src/result_code.rs b/crates/voicevox_core/src/result_code.rs index 55f59ab2f..78c75f402 100644 --- a/crates/voicevox_core/src/result_code.rs +++ b/crates/voicevox_core/src/result_code.rs @@ -1,6 +1,6 @@ use strum::EnumIter; -/// 処理結果を示す結果コード +/// 処理結果を示す結果コード。 #[repr(i32)] #[derive(Debug, PartialEq, Eq, Clone, Copy, EnumIter)] #[allow(non_camel_case_types)] diff --git a/crates/voicevox_core/src/voice_model.rs b/crates/voicevox_core/src/voice_model.rs index dc2c02d32..2530aacc9 100644 --- a/crates/voicevox_core/src/voice_model.rs +++ b/crates/voicevox_core/src/voice_model.rs @@ -9,20 +9,24 @@ use std::{ path::{Path, PathBuf}, }; -/// 音声モデルIdの実体 +/// [`VoiceModelId`]の実体。 +/// +/// [`VoiceModelId`]: VoiceModelId pub type RawVoiceModelId = String; -/// 音声モデルId (型を強く分けるためにこうしている) +/// 音声モデルID。 #[derive(PartialEq, Eq, Clone, Ord, PartialOrd, Deserialize, new, Getters, Debug)] pub struct VoiceModelId { raw_voice_model_id: RawVoiceModelId, } -/// 音声モデル +/// 音声モデル。 #[derive(Getters, Clone)] pub struct VoiceModel { + /// ID。 id: VoiceModelId, manifest: Manifest, + /// メタ情報。 metas: VoiceModelMeta, path: PathBuf, } @@ -51,7 +55,7 @@ impl VoiceModel { decode_model: decode_model_result?, }) } - /// 与えられたパスからモデルを取得する + /// VVMファイルから`VoiceModel`をコンストラクトする。 pub async fn from_path(path: impl AsRef) -> Result { let reader = VvmEntryReader::open(&path).await?; let manifest = reader.read_vvm_json::("manifest.json").await?; diff --git a/crates/voicevox_core/src/voice_synthesizer.rs b/crates/voicevox_core/src/voice_synthesizer.rs index 86b91ce83..affdd9ac4 100644 --- a/crates/voicevox_core/src/voice_synthesizer.rs +++ b/crates/voicevox_core/src/voice_synthesizer.rs @@ -7,6 +7,9 @@ use crate::engine::{create_kana, parse_kana, AccentPhraseModel, OpenJtalk, Synth use super::*; +/// [`Synthesizer::synthesis`]のオプション。 +/// +/// [`Synthesizer::synthesis`]: Synthesizer::synthesis pub struct SynthesisOptions { pub enable_interrogative_upspeak: bool, } @@ -25,13 +28,21 @@ impl From<&TtsOptions> for SynthesisOptions { } } +/// [`Synthesizer::create_accent_phrases`]のオプション。 +/// +/// [`Synthesizer::create_accent_phrases`]: Synthesizer::create_accent_phrases #[derive(ConstDefault)] pub struct AccentPhrasesOptions { + /// AquesTalk形式のkanaとしてテキストを解釈する。 pub kana: bool, } +/// [`Synthesizer::audio_query`]のオプション。 +/// +/// [`Synthesizer::audio_query`]: Synthesizer::audio_query #[derive(ConstDefault)] pub struct AudioQueryOptions { + /// AquesTalk形式のkanaとしてテキストを解釈する。 pub kana: bool, } @@ -41,7 +52,11 @@ impl From<&TtsOptions> for AudioQueryOptions { } } +/// [`Synthesizer::tts`]のオプション。 +/// +/// [`Synthesizer::tts`]: Synthesizer::tts pub struct TtsOptions { + /// AquesTalk形式のkanaとしてテキストを解釈する。 pub kana: bool, pub enable_interrogative_upspeak: bool, } @@ -59,10 +74,14 @@ impl ConstDefault for TtsOptions { }; } +/// ハードウェアアクセラレーションモードを設定する設定値。 #[derive(Debug, PartialEq, Eq)] pub enum AccelerationMode { + /// 実行環境に合った適切なハードウェアアクセラレーションモードを選択する。 Auto, + /// ハードウェアアクセラレーションモードを"CPU"に設定する。 Cpu, + /// ハードウェアアクセラレーションモードを"GPU"に設定する。 Gpu, } @@ -70,6 +89,9 @@ impl ConstDefault for AccelerationMode { const DEFAULT: Self = Self::Auto; } +/// [`Synthesizer::new_with_initialize`]のオプション。 +/// +/// [`Synthesizer::new_with_initialize`]: Synthesizer::new_with_initialize #[derive(ConstDefault)] pub struct InitializeOptions { pub acceleration_mode: AccelerationMode, @@ -91,14 +113,40 @@ impl Default for T { } } -/// 音声シンセサイザ +/// 音声シンセサイザ。 pub struct Synthesizer { synthesis_engine: SynthesisEngine, use_gpu: bool, } impl Synthesizer { - /// コンストラクタ兼初期化 + /// `Synthesizer`をコンストラクトする。 + /// + /// # Example + /// + /// ``` + /// # #[tokio::main] + /// # async fn main() -> anyhow::Result<()> { + /// # use test_util::OPEN_JTALK_DIC_DIR; + /// # + /// # const ACCELERATION_MODE: AccelerationMode = AccelerationMode::Cpu; + /// # + /// use std::sync::Arc; + /// + /// use voicevox_core::{AccelerationMode, InitializeOptions, OpenJtalk, Synthesizer}; + /// + /// let mut syntesizer = Synthesizer::new_with_initialize( + /// Arc::new(OpenJtalk::new_with_initialize(OPEN_JTALK_DIC_DIR).unwrap()), + /// &InitializeOptions { + /// acceleration_mode: ACCELERATION_MODE, + /// ..Default::default() + /// }, + /// ) + /// .await?; + /// # + /// # Ok(()) + /// # } + /// ``` pub async fn new_with_initialize( open_jtalk: Arc, options: &InitializeOptions, @@ -136,11 +184,12 @@ impl Synthesizer { }) } + /// ハードウェアアクセラレーションがGPUモードか判定する。 pub fn is_gpu_mode(&self) -> bool { self.use_gpu } - /// 音声モデルを読み込む + /// 音声モデルを読み込む。 pub async fn load_voice_model(&mut self, model: &VoiceModel) -> Result<()> { self.synthesis_engine .inference_core_mut() @@ -149,14 +198,14 @@ impl Synthesizer { Ok(()) } - /// 指定したモデルIdの音声モデルを開放する + /// 音声モデルの読み込みを解除する。 pub fn unload_voice_model(&mut self, voice_model_id: &VoiceModelId) -> Result<()> { self.synthesis_engine .inference_core_mut() .unload_model(voice_model_id) } - /// 指定したモデルIdの音声モデルが読み込まれているか判定する + /// 指定したIDの音声モデルが読み込まれているか判定する。 pub fn is_loaded_voice_model(&self, voice_model_id: &VoiceModelId) -> bool { self.synthesis_engine .inference_core() @@ -170,12 +219,12 @@ impl Synthesizer { .is_model_loaded_by_style_id(style_id) } - /// 今読み込んでいる音声モデルのメタ情報を返す + /// 今読み込んでいる音声モデルのメタ情報を返す。 pub fn metas(&self) -> &VoiceModelMeta { self.synthesis_engine.inference_core().metas() } - /// 音声合成を行う + /// AudioQueryから音声合成を行う。 pub async fn synthesis( &self, audio_query: &AudioQueryModel, @@ -241,6 +290,102 @@ impl Synthesizer { .await } + /// AccentPhrase (アクセント句)の列を生成する。 + /// + /// `text`は[`options.kana`]が有効化されているときにはAquesTalk形式のkanaとして、そうでないと + /// きには日本語のテキストとして解釈される。 + /// + /// # Examples + /// + /// ``` + /// # #[tokio::main] + /// # async fn main() -> anyhow::Result<()> { + /// # let syntesizer = { + /// # use std::sync::Arc; + /// # + /// # use test_util::OPEN_JTALK_DIC_DIR; + /// # use voicevox_core::{ + /// # AccelerationMode, InitializeOptions, OpenJtalk, Synthesizer, VoiceModel, + /// # }; + /// # + /// # let mut syntesizer = Synthesizer::new_with_initialize( + /// # Arc::new(OpenJtalk::new_with_initialize(OPEN_JTALK_DIC_DIR).unwrap()), + /// # &InitializeOptions { + /// # acceleration_mode: AccelerationMode::Cpu, + /// # ..Default::default() + /// # }, + /// # ) + /// # .await?; + /// # + /// # let model = &VoiceModel::from_path(concat!( + /// # env!("CARGO_MANIFEST_DIR"), + /// # "/../../model/sample.vvm", + /// # )) + /// # .await?; + /// # syntesizer.load_voice_model(model).await?; + /// # + /// # syntesizer + /// # }; + /// # + /// use voicevox_core::StyleId; + /// + /// let accent_phrases = syntesizer + /// .create_accent_phrases( + /// "こんにちは", // 日本語のテキスト + /// StyleId::new(2), // "四国めたん (ノーマル)", + /// &Default::default(), + /// ) + /// .await?; + /// # + /// # Ok(()) + /// # } + /// ``` + /// + /// ``` + /// # #[tokio::main] + /// # async fn main() -> anyhow::Result<()> { + /// # let syntesizer = { + /// # use std::sync::Arc; + /// # + /// # use test_util::OPEN_JTALK_DIC_DIR; + /// # use voicevox_core::{ + /// # AccelerationMode, InitializeOptions, OpenJtalk, Synthesizer, VoiceModel, + /// # }; + /// # + /// # let mut syntesizer = Synthesizer::new_with_initialize( + /// # Arc::new(OpenJtalk::new_with_initialize(OPEN_JTALK_DIC_DIR).unwrap()), + /// # &InitializeOptions { + /// # acceleration_mode: AccelerationMode::Cpu, + /// # ..Default::default() + /// # }, + /// # ) + /// # .await?; + /// # + /// # let model = &VoiceModel::from_path(concat!( + /// # env!("CARGO_MANIFEST_DIR"), + /// # "/../../model/sample.vvm", + /// # )) + /// # .await?; + /// # syntesizer.load_voice_model(model).await?; + /// # + /// # syntesizer + /// # }; + /// # + /// use voicevox_core::{AccentPhrasesOptions, StyleId}; + /// + /// let accent_phrases = syntesizer + /// .create_accent_phrases( + /// "コンニチワ'", // AquesTalk形式のkana + /// StyleId::new(2), // "四国めたん (ノーマル)", + /// &AccentPhrasesOptions { kana: true }, + /// ) + /// .await?; + /// # + /// # Ok(()) + /// # } + /// ``` + /// + /// [`options.kana`]: crate::AccentPhrasesOptions::kana pub async fn create_accent_phrases( &self, text: &str, @@ -261,6 +406,7 @@ impl Synthesizer { } } + /// AccentPhraseの列の音高・音素長を、特定の声で生成しなおす。 pub async fn replace_mora_data( &self, accent_phrases: &[AccentPhraseModel], @@ -271,6 +417,7 @@ impl Synthesizer { .await } + /// AccentPhraseの列の音素長を、特定の声で生成しなおす。 pub async fn replace_phoneme_length( &self, accent_phrases: &[AccentPhraseModel], @@ -281,6 +428,7 @@ impl Synthesizer { .await } + /// AccentPhraseの列の音高を、特定の声で生成しなおす。 pub async fn replace_mora_pitch( &self, accent_phrases: &[AccentPhraseModel], @@ -291,6 +439,103 @@ impl Synthesizer { .await } + /// [AudioQuery]を生成する。 + /// + /// `text`は[`options.kana`]が有効化されているときにはAquesTalk形式のkanaとして、そうでないと + /// きには日本語のテキストとして解釈される。 + /// + /// # Examples + /// + /// ``` + /// # #[tokio::main] + /// # async fn main() -> anyhow::Result<()> { + /// # let syntesizer = { + /// # use std::sync::Arc; + /// # + /// # use test_util::OPEN_JTALK_DIC_DIR; + /// # use voicevox_core::{ + /// # AccelerationMode, InitializeOptions, OpenJtalk, Synthesizer, VoiceModel, + /// # }; + /// # + /// # let mut syntesizer = Synthesizer::new_with_initialize( + /// # Arc::new(OpenJtalk::new_with_initialize(OPEN_JTALK_DIC_DIR).unwrap()), + /// # &InitializeOptions { + /// # acceleration_mode: AccelerationMode::Cpu, + /// # ..Default::default() + /// # }, + /// # ) + /// # .await?; + /// # + /// # let model = &VoiceModel::from_path(concat!( + /// # env!("CARGO_MANIFEST_DIR"), + /// # "/../../model/sample.vvm", + /// # )) + /// # .await?; + /// # syntesizer.load_voice_model(model).await?; + /// # + /// # syntesizer + /// # }; + /// # + /// use voicevox_core::StyleId; + /// + /// let audio_query = syntesizer + /// .audio_query( + /// "こんにちは", // 日本語のテキスト + /// StyleId::new(2), // "四国めたん (ノーマル)", + /// &Default::default(), + /// ) + /// .await?; + /// # + /// # Ok(()) + /// # } + /// ``` + /// + /// ``` + /// # #[tokio::main] + /// # async fn main() -> anyhow::Result<()> { + /// # let syntesizer = { + /// # use std::sync::Arc; + /// # + /// # use test_util::OPEN_JTALK_DIC_DIR; + /// # use voicevox_core::{ + /// # AccelerationMode, InitializeOptions, OpenJtalk, Synthesizer, VoiceModel, + /// # }; + /// # + /// # let mut syntesizer = Synthesizer::new_with_initialize( + /// # Arc::new(OpenJtalk::new_with_initialize(OPEN_JTALK_DIC_DIR).unwrap()), + /// # &InitializeOptions { + /// # acceleration_mode: AccelerationMode::Cpu, + /// # ..Default::default() + /// # }, + /// # ) + /// # .await?; + /// # + /// # let model = &VoiceModel::from_path(concat!( + /// # env!("CARGO_MANIFEST_DIR"), + /// # "/../../model/sample.vvm", + /// # )) + /// # .await?; + /// # syntesizer.load_voice_model(model).await?; + /// # + /// # syntesizer + /// # }; + /// # + /// use voicevox_core::{AudioQueryOptions, StyleId}; + /// + /// let audio_query = syntesizer + /// .audio_query( + /// "コンニチワ'", // AquesTalk形式のkana + /// StyleId::new(2), // "四国めたん (ノーマル)", + /// &AudioQueryOptions { kana: true }, + /// ) + /// .await?; + /// # + /// # Ok(()) + /// # } + /// ``` + /// + /// [AudioQuery]: crate::AudioQueryModel + /// [`options.kana`]: crate::AudioQueryOptions::kana pub async fn audio_query( &self, text: &str, @@ -315,6 +560,12 @@ impl Synthesizer { )) } + /// テキスト音声合成を行う。 + /// + /// `text`は[`options.kana`]が有効化されているときにはAquesTalk形式のkanaとして、そうでないと + /// きには日本語のテキストとして解釈される。 + /// + /// [`options.kana`]: crate::TtsOptions::kana pub async fn tts( &self, text: &str, diff --git a/crates/voicevox_core_c_api/include/voicevox_core.h b/crates/voicevox_core_c_api/include/voicevox_core.h index d3149ffd5..01387832f 100644 --- a/crates/voicevox_core_c_api/include/voicevox_core.h +++ b/crates/voicevox_core_c_api/include/voicevox_core.h @@ -13,7 +13,7 @@ #endif // __cplusplus /** - * ハードウェアアクセラレーションモードを設定する設定値 + * ハードウェアアクセラレーションモードを設定する設定値。 */ enum VoicevoxAccelerationMode #ifdef __cplusplus @@ -38,7 +38,7 @@ typedef int32_t VoicevoxAccelerationMode; #endif // __cplusplus /** - * 処理結果を示す結果コード + * 処理結果を示す結果コード。 */ enum VoicevoxResultCode #ifdef __cplusplus @@ -123,24 +123,43 @@ typedef int32_t VoicevoxResultCode; #endif // __cplusplus /** - * 参照カウントで管理されたOpenJtalk + * テキスト解析器としてのOpen JTalk。 + * + * コンストラクトは ::voicevox_open_jtalk_rc_new で行い、デストラクトは ::voicevox_open_jtalk_rc_delete で行う。 + * + * 参照カウント方式のスマートポインタ (reference-counted smart pointer) + * + * ## Example + * + * ```c + * OpenJtalkRc *open_jtalk; + * voicevox_open_jtalk_rc_new("./open_jtalk_dic_utf_8-1.11", &open_jtalk); + * voicevox_open_jtalk_rc_delete(open_jtalk); + * ``` */ typedef struct OpenJtalkRc OpenJtalkRc; +/** + * 音声シンセサイザ。 + * + * コンストラクトは ::voicevox_synthesizer_new_with_initialize で行い、デストラクトは ::voicevox_synthesizer_delete で行う。 + */ typedef struct VoicevoxSynthesizer VoicevoxSynthesizer; /** - * 音声モデル + * 音声モデル。 + * + * コンストラクトは ::voicevox_voice_model_new_from_path で行い、デストラクトは ::voicevox_voice_model_delete で行う。 */ typedef struct VoicevoxVoiceModel VoicevoxVoiceModel; /** - * 音声モデルID + * 音声モデルID。 */ typedef const char *VoicevoxVoiceModelId; /** - * 初期化オプション + * ::voicevox_synthesizer_new_with_initialize のオプション。 */ typedef struct VoicevoxInitializeOptions { /** @@ -159,12 +178,14 @@ typedef struct VoicevoxInitializeOptions { } VoicevoxInitializeOptions; /** - * スタイルID + * スタイルID。 + * + * VOICEVOXにおける、ある話者(speaker)のあるスタイル(style) (i.e. 声(voice))を指す。 */ typedef uint32_t VoicevoxStyleId; /** - * Audio query のオプション + * ::voicevox_synthesizer_audio_query のオプション。 */ typedef struct VoicevoxAudioQueryOptions { /** @@ -174,17 +195,17 @@ typedef struct VoicevoxAudioQueryOptions { } VoicevoxAudioQueryOptions; /** - * `accent_phrases` のオプション + * ::voicevox_synthesizer_create_accent_phrases のオプション。 */ typedef struct VoicevoxAccentPhrasesOptions { /** - * aquestalk形式のkanaとしてテキストを解釈する + * AquesTalk形式のkanaとしてテキストを解釈する */ bool kana; } VoicevoxAccentPhrasesOptions; /** - * `voicevox_synthesizer_synthesis` のオプション + * ::voicevox_synthesizer_synthesis のオプション。 */ typedef struct VoicevoxSynthesisOptions { /** @@ -194,11 +215,11 @@ typedef struct VoicevoxSynthesisOptions { } VoicevoxSynthesisOptions; /** - * テキスト音声合成オプション + * ::voicevox_synthesizer_tts のオプション。 */ typedef struct VoicevoxTtsOptions { /** - * aquestalk形式のkanaとしてテキストを解釈する + * AquesTalk形式のkanaとしてテキストを解釈する */ bool kana; /** @@ -224,10 +245,26 @@ extern const struct VoicevoxSynthesisOptions voicevox_default_synthesis_options; extern const struct VoicevoxTtsOptions voicevox_default_tts_options; /** - * 参照カウントで管理されたOpenJtalkを生成する + * ::OpenJtalkRc をコンストラクトする。 + * + * 解放は ::voicevox_open_jtalk_rc_delete で行う。 + * + * @param [in] open_jtalk_dic_dir 辞書ディレクトリを指すUTF-8のパス + * @param [out] out_open_jtalk 生成先 + * + * @returns 結果コード * - * # Safety - * @out_open_jtalk 自動でheap領域が割り当てられるため :voicevox_open_jtalk_rc_delete で開放する必要がある + * ## Example + * + * ```c + * OpenJtalkRc *open_jtalk; + * voicevox_open_jtalk_rc_new("./open_jtalk_dic_utf_8-1.11", &open_jtalk); + * ``` + * + * ## Safety + * + * - `open_jtalk_dic_dir`は有効なヌル終端文字列を指していなければならない。 + * - `out_open_jtalk`はアラインメントに沿っていなければならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -236,11 +273,19 @@ VoicevoxResultCode voicevox_open_jtalk_rc_new(const char *open_jtalk_dic_dir, struct OpenJtalkRc **out_open_jtalk); /** - * 参照カウントで管理されたOpenJtalkを削除する - * @param [in] open_jtalk 参照カウントで管理されたOpenJtalk + * ::OpenJtalkRc をデストラクトする。 + * + * @param [in] open_jtalk デストラクト対象 + * + * ## Example + * + * ```c + * voicevox_open_jtalk_rc_delete(open_jtalk); + * ``` + * + * ## Safety * - * # Safety - * @open_jtalk 有効な :OpenJtalkRc のポインタであること + * - `open_jtalk`は ::voicevox_open_jtalk_rc_new で得たものでなければならず、また既にこの関数で解放されていてはいけない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -248,14 +293,17 @@ __declspec(dllimport) void voicevox_open_jtalk_rc_delete(struct OpenJtalkRc *open_jtalk); /** - * vvmファイルパスから音声モデルを生成する - * @param [in] path vvmファイルパス - * @param [out] out_model 新しく生成された音声モデルの出力先 - * @return 結果コード #VoicevoxResultCode + * VVMファイルから ::VoicevoxVoiceModel をコンストラクトする。 * - * # Safety - * @param path null終端文字列であること - * @param out_model 自動でheapメモリが割り当てられるので ::voicevox_voice_model_delete で解放する必要がある + * @param [in] path vvmファイルへのUTF-8のファイルパス + * @param [out] out_model 生成先 + * + * @returns 結果コード + * + * ## Safety + * + * - `path`は有効なヌル終端文字列を指す。 + * - `out_model`はアラインメントに沿っていなければならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -264,12 +312,15 @@ VoicevoxResultCode voicevox_voice_model_new_from_path(const char *path, struct VoicevoxVoiceModel **out_model); /** - * 音声モデルのIDを取得する - * @param [in] model 音声モデル #VoicevoxVoiceModel - * @return 音声モデルID #VoicevoxVoiceModelId + * ::VoicevoxVoiceModel からIDを取得する。 + * + * @param [in] model 音声モデル + * + * @returns 音声モデルID + * + * ## Safety * - * # Safety - * @param model 有効な #VoicevoxVoiceModel へのポインタであること + * - `model`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また ::voicevox_voice_model_delete で解放されていてはいけない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -277,12 +328,15 @@ __declspec(dllimport) VoicevoxVoiceModelId voicevox_voice_model_id(const struct VoicevoxVoiceModel *model); /** - * 音声モデルのメタ情報を取得する - * @param [in] model 音声モデル #VoicevoxVoiceModel - * @return メタ情報のjson文字列 + * ::VoicevoxVoiceModel からメタ情報を取得する。 * - * # Safety - * @param model 有効な #VoicevoxVoiceModel へのポインタであること + * @param [in] model 音声モデル + * + * @returns メタ情報のJSON文字列 + * + * ## Safety + * + * - `model`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また ::voicevox_voice_model_delete で解放されていてはいけない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -290,11 +344,13 @@ __declspec(dllimport) const char *voicevox_voice_model_get_metas_json(const struct VoicevoxVoiceModel *model); /** - * 音声モデルを破棄する - * @param [in] model 破棄する音声モデル #VoicevoxVoiceModel + * ::VoicevoxVoiceModel をデストラクトする。 * - * # Safety - * @param model 有効な #VoicevoxVoiceModel へのポインタであること + * @param [in] model 破棄する音声モデル + * + * ## Safety + * + * - `model`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また既にこの関数で解放されていてはいけない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -302,14 +358,17 @@ __declspec(dllimport) void voicevox_voice_model_delete(struct VoicevoxVoiceModel *model); /** - * 音声シンセサイザを生成して初期化する - * @param [in] open_jtalk 参照カウントで管理されたOpenJtalk - * @param [in] options 初期化オプション #VoicevoxInitializeOptions - * @param [out] out_synthesizer 新しく生成された音声シンセサイザの出力先 #VoicevoxSynthesizer - * @return 結果コード #VoicevoxResultCode + * ::VoicevoxSynthesizer をコンストラクトする。 + * + * @param [in] open_jtalk Open JTalkのオブジェクト + * @param [in] options オプション + * @param [out] out_synthesizer 生成先 * - * # Safety - * @param out_synthesizer 自動でheapメモリが割り当てられるので ::voicevox_synthesizer_delete で解放する必要がある + * @returns 結果コード + * + * ## Safety + * + * - `open_jtalk`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また ::voicevox_open_jtalk_rc_new で解放されていてはいけない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -319,11 +378,13 @@ VoicevoxResultCode voicevox_synthesizer_new_with_initialize(const struct OpenJta struct VoicevoxSynthesizer **out_synthesizer); /** - * 音声シンセサイザを破棄する - * @param [in] synthesizer 破棄する音声シンセサイザ #VoicevoxSynthesizer + * ::VoicevoxSynthesizer をデストラクトする。 + * + * @param [in] synthesizer デストラクト対象 + * + * ## Safety * - * # Safety - * @param synthesizer 有効な #VoicevoxSynthesizer へのポインタであること + * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また既にこの関数で解放されていてはいけない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -331,14 +392,17 @@ __declspec(dllimport) void voicevox_synthesizer_delete(struct VoicevoxSynthesizer *synthesizer); /** - * モデルを読み込む + * 音声モデルを読み込む。 + * * @param [in] synthesizer 音声シンセサイザ * @param [in] model 音声モデル - * @return 結果コード #VoicevoxResultCode * - * # Safety - * @param synthesizer 有効な #VoicevoxSynthesizer へのポインタであること - * @param model 有効な #VoicevoxVoiceModel へのポインタであること + * @returns 結果コード + * + * ## Safety + * + * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 + * - `model`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また ::voicevox_voice_model_delete で解放されていてはいけない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -347,14 +411,17 @@ VoicevoxResultCode voicevox_synthesizer_load_voice_model(struct VoicevoxSynthesi const struct VoicevoxVoiceModel *model); /** - * モデルの読み込みを解除する + * 音声モデルの読み込みを解除する。 + * * @param [in] synthesizer 音声シンセサイザ * @param [in] model_id 音声モデルID - * @return 結果コード #VoicevoxResultCode * - * # Safety - * @param synthesizer 有効な #VoicevoxSynthesizer へのポインタであること - * @param model_id NULL終端文字列であること + * @returns 結果コード + * + * ## Safety + * + * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 + * - `model_id`は有効なヌル終端文字列を指していなければならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -363,12 +430,15 @@ VoicevoxResultCode voicevox_synthesizer_unload_voice_model(struct VoicevoxSynthe VoicevoxVoiceModelId model_id); /** - * ハードウェアアクセラレーションがGPUモードか判定する + * ハードウェアアクセラレーションがGPUモードか判定する。 + * * @param [in] synthesizer 音声シンセサイザ - * @return GPUモードならtrue、そうでないならfalse * - * # Safety - * @param synthesizer 有効な #VoicevoxSynthesizer へのポインタであること + * @returns GPUモードかどうか + * + * ## Safety + * + * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -376,14 +446,17 @@ __declspec(dllimport) bool voicevox_synthesizer_is_gpu_mode(const struct VoicevoxSynthesizer *synthesizer); /** - * 指定したspeaker_idのモデルが読み込まれているか判定する - * @param [in] synthesizer 音声シンセサイザ #VoicevoxSynthesizer - * @param [in] model_id 音声モデルのID #VoicevoxVoiceModelId - * @return モデルが読み込まれているのであればtrue、そうでないならfalse + * 指定したIDの音声モデルが読み込まれているか判定する。 * - * # Safety - * @param synthesizer 有効な #VoicevoxSynthesizer へのポインタであること - * @param model_id NULL終端文字列 + * @param [in] synthesizer 音声シンセサイザ + * @param [in] model_id 音声モデルID + * + * @returns モデルが読み込まれているかどうか + * + * ## Safety + * + * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 + * - `model_id`は有効なヌル終端文字列を指していなければならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -392,12 +465,15 @@ bool voicevox_synthesizer_is_loaded_voice_model(const struct VoicevoxSynthesizer VoicevoxVoiceModelId model_id); /** - * メタ情報をjsonで取得する - * @param [in] synthesizer 音声シンセサイザ #VoicevoxSynthesizer - * @return メタ情報のjson文字列 + * 今読み込んでいる音声モデルのメタ情報を、JSONで取得する。 + * + * @param [in] synthesizer 音声シンセサイザ * - * # Safety - * @param synthesizer 有効な #VoicevoxSynthesizer へのポインタであること + * @return メタ情報のJSON文字列 + * + * ## Safety + * + * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -405,12 +481,20 @@ __declspec(dllimport) const char *voicevox_synthesizer_get_metas_json(const struct VoicevoxSynthesizer *synthesizer); /** - * サポートデバイス情報をjsonで取得する - * @param [out] output_supported_devices_json サポートデバイス情報のjson文字列 - * @return 結果コード #VoicevoxResultCode + * このライブラリで利用可能なデバイスの情報を、JSONで取得する。 + * + * JSONの解放は ::voicevox_json_free で行う。 + * + * @param [out] output_supported_devices_json サポートデバイス情報のJSON文字列 * - * # Safety - * @param output_supported_devices_json 自動でheapメモリが割り当てられるので ::voicevox_json_free で解放する必要がある + * @returns 結果コード + * + * ## Example + * + * ```c + * char *supported_devices; + * VoicevoxResultCode result = voicevox_create_supported_devices_json(&supported_devices); + * ``` */ #ifdef _WIN32 __declspec(dllimport) @@ -418,17 +502,40 @@ __declspec(dllimport) VoicevoxResultCode voicevox_create_supported_devices_json(char **output_supported_devices_json); /** - * AudioQuery を実行する - * @param [in] synthesizer 音声シンセサイザ #VoicevoxSynthesizer - * @param [in] text テキスト。文字コードはUTF-8 - * @param [in] style_id スタイルID #VoicevoxStyleId - * @param [in] options AudioQueryのオプション #VoicevoxAudioQueryOptions - * @param [out] output_audio_query_json AudioQuery を json でフォーマットしたもの - * @return 結果コード #VoicevoxResultCode + * AudioQueryをJSONとして生成する。 + * + * @param [in] synthesizer 音声シンセサイザ + * @param [in] text UTF-8の日本語テキストまたはAquesTalk形式のkana + * @param [in] style_id スタイルID + * @param [in] options オプション + * @param [out] output_audio_query_json 生成先 + * + * @returns 結果コード + * + * ## Safety + * + * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 + * - `text`は有効なヌル終端文字列を指していなければならない。 * - * # Safety - * @param text null終端文字列であること - * @param output_audio_query_json 自動でheapメモリが割り当てられるので ::voicevox_json_free で解放する必要がある + * ## Examples + * + * ```c + * char *audio_query; + * voicevox_synthesizer_audio_query(synthesizer, + * "こんにちは", // 日本語テキスト + * 2, // "四国めたん (ノーマル)" + * (VoicevoxAudioQueryOptions){.kana = false}, + * &audio_query); + * ``` + * + * ```c + * char *audio_query; + * voicevox_synthesizer_audio_query(synthesizer, + * "コンニチワ'", // AquesTalk形式のkana + * 2, // "四国めたん (ノーマル)" + * (VoicevoxAudioQueryOptions){.kana = true}, + * &audio_query); + * ``` */ #ifdef _WIN32 __declspec(dllimport) @@ -440,15 +547,42 @@ VoicevoxResultCode voicevox_synthesizer_audio_query(const struct VoicevoxSynthes char **output_audio_query_json); /** - * create_accent_phrases を実行する - * @param [in] synthesizer 音声シンセサイザ #VoicevoxSynthesizer - * @param [in] text テキスト - * @param [in] style_id スタイルID #VoicevoxStyleId - * @param [in] output_accent_phrases_json アクセントフレーズのjson文字列 + * AccentPhrase (アクセント句)の列をJSON形式で生成する。 + * + * 生成したJSON文字列を解放するには ::voicevox_json_free を使う。 * - * # Safety - * @param text null終端文字列であること - * @param output_accent_phrases_json 自動でheapメモリが割り当てられるので ::voicevox_json_free で解放する必要がある + * @param [in] synthesizer 音声シンセサイザ + * @param [in] text UTF-8の日本語テキストまたはAquesTalk形式のkana + * @param [in] style_id スタイルID + * @param [in] options オプション + * @param [out] output_accent_phrases_json 生成先 + * + * @returns 結果コード + * + * ## Safety + * + * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 + * - `text`は有効なヌル終端文字列を指していなければならない。 + * + * ## Examples + * + * ```c + * char *accent_phrases; + * voicevox_synthesizer_create_accent_phrases( + * synthesizer, + * "こんにちは", // 日本語テキスト + * 2, // "四国めたん (ノーマル)" + * voicevox_default_accent_phrases_options, &accent_phrases); + * ``` + * + * ```c + * char *accent_phrases; + * voicevox_synthesizer_create_accent_phrases( + * synthesizer, + * "コンニチワ'", // AquesTalk形式のkana + * 2, // "四国めたん (ノーマル)" + * (VoicevoxAccentPhrasesOptions){.kana = true}, &accent_phrases); + * ``` */ #ifdef _WIN32 __declspec(dllimport) @@ -460,15 +594,21 @@ VoicevoxResultCode voicevox_synthesizer_create_accent_phrases(const struct Voice char **output_accent_phrases_json); /** - * replace_mora_data を実行する - * @param [in] synthesizer 音声シンセサイザ #VoicevoxSynthesizer - * @param [in] accent_phrases_json 変換前のアクセントフレーズのjson文字列 - * @param [in] style_id スタイルID #VoicevoxStyleId - * @param [in] output_accent_phrases_json 変換後のアクセントフレーズのjson文字列 + * AccentPhraseの列の音高・音素長を、特定の声で生成しなおす。 * - * # Safety - * @param accent_phrases_json null終端文字列であること - * @param output_accent_phrases_json 自動でheapメモリが割り当てられるので ::voicevox_json_free で解放する必要がある + * 生成したJSON文字列を解放するには ::voicevox_json_free を使う。 + * + * @param [in] synthesizer 音声シンセサイザ + * @param [in] accent_phrases_json AccentPhraseの列のJSON文字列 + * @param [in] style_id スタイルID + * @param [out] output_accent_phrases_json 生成先 + * + * @returns 結果コード + * + * ## Safety + * + * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 + * - `accent_phrases_json`は有効なヌル終端文字列を指していなければならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -479,15 +619,21 @@ VoicevoxResultCode voicevox_synthesizer_replace_mora_data(const struct VoicevoxS char **output_accent_phrases_json); /** - * replace_phoneme_length を実行する - * @param [in] synthesizer 音声シンセサイザ #VoicevoxSynthesizer - * @param [in] accent_phrases_json 変換前のアクセントフレーズのjson文字列 - * @param [in] style_id スタイルID #VoicevoxStyleId - * @param [in] output_accent_phrases_json 変換後のアクセントフレーズのjson文字列 + * AccentPhraseの列の音素長を、特定の声で生成しなおす。 + * + * 生成したJSON文字列を解放するには ::voicevox_json_free を使う。 * - * # Safety - * @param accent_phrases_json null終端文字列であること - * @param output_accent_phrases_json 自動でheapメモリが割り当てられるので ::voicevox_json_free で解放する必要がある + * @param [in] synthesizer 音声シンセサイザ + * @param [in] accent_phrases_json AccentPhraseの列のJSON文字列 + * @param [in] style_id スタイルID + * @param [out] output_accent_phrases_json 生成先 + * + * @returns 結果コード + * + * ## Safety + * + * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 + * - `accent_phrases_json`は有効なヌル終端文字列を指していなければならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -498,15 +644,21 @@ VoicevoxResultCode voicevox_synthesizer_replace_phoneme_length(const struct Voic char **output_accent_phrases_json); /** - * replace_mora_pitch を実行する - * @param [in] synthesizer 音声シンセサイザ #VoicevoxSynthesizer - * @param [in] accent_phrases_json 変換前のアクセントフレーズのjson文字列 - * @param [in] style_id スタイルID #VoicevoxStyleId - * @param [in] output_accent_phrases_json 変換後のアクセントフレーズのjson文字列 + * AccentPhraseの列の音高を、特定の声で生成しなおす。 + * + * 生成したJSON文字列を解放するには ::voicevox_json_free を使う。 + * + * @param [in] synthesizer 音声シンセサイザ + * @param [in] accent_phrases_json AccentPhraseの列のJSON文字列 + * @param [in] style_id スタイルID + * @param [out] output_accent_phrases_json 生成先 * - * # Safety - * @param accent_phrases_json null終端文字列であること - * @param output_accent_phrases_json 自動でheapメモリが割り当てられるので ::voicevox_json_free で解放する必要がある + * @returns 結果コード + * + * ## Safety + * + * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 + * - `accent_phrases_json`は有効なヌル終端文字列を指していなければならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -517,18 +669,25 @@ VoicevoxResultCode voicevox_synthesizer_replace_mora_pitch(const struct Voicevox char **output_accent_phrases_json); /** - * AudioQuery から音声合成する - * @param [in] synthesizer 音声シンセサイザ #VoicevoxSynthesizer - * @param [in] audio_query_json jsonフォーマットされた AudioQuery - * @param [in] style_id スタイルID #VoicevoxStyleId - * @param [in] options AudioQueryから音声合成オプション - * @param [out] output_wav_length 出力する wav データのサイズ - * @param [out] output_wav wav データの出力先 - * @return 結果コード #VoicevoxResultCode + * AudioQueryから音声合成を行う。 + * + * 生成したwavを解放するには ::voicevox_wav_free を使う。 + * + * @param [in] synthesizer 音声シンセサイザ + * @param [in] audio_query_json AudioQueryのJSON文字列 + * @param [in] style_id スタイルID + * @param [in] options オプション + * @param [out] output_wav_length 出力のバイト長 + * @param [out] output_wav 出力先 + * + * @returns 結果コード + * + * ## Safety * - * # Safety - * @param output_wav_length 出力先の領域が確保された状態でpointerに渡されていること - * @param output_wav 自動で output_wav_length 分のデータが割り当てられるので ::voicevox_wav_free で解放する必要がある + * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 + * - `audio_query_json`は有効なヌル終端文字列を指していなければならない。 + * - `output_wav_length`はアラインメントに沿っていなければならない。 + * - `output_wav`はアラインメントに沿っていなければならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -541,18 +700,25 @@ VoicevoxResultCode voicevox_synthesizer_synthesis(const struct VoicevoxSynthesiz uint8_t **output_wav); /** - * テキスト音声合成を実行する - * @param [in] synthesizer 音声シンセサイザ #VoicevoxSynthesizer - * @param [in] text テキスト。文字コードはUTF-8 - * @param [in] style_id スタイルID #VoicevoxStyleId - * @param [in] options テキスト音声合成オプション - * @param [out] output_wav_length 出力する wav データのサイズ - * @param [out] output_wav wav データの出力先 - * @return 結果コード #VoicevoxResultCode + * テキスト音声合成を行う。 * - * # Safety - * @param output_wav_length 出力先の領域が確保された状態でpointerに渡されていること - * @param output_wav は自動で output_wav_length 分のデータが割り当てられるので ::voicevox_wav_free で解放する必要がある + * 生成したwavを解放するには ::voicevox_wav_free を使う。 + * + * @param [in] synthesizer + * @param [in] text UTF-8の日本語テキストまたはAquesTalk形式のkana + * @param [in] style_id スタイルID + * @param [in] options オプション + * @param [out] output_wav_length 出力のバイト長 + * @param [out] output_wav 出力先 + * + * @returns 結果コード + * + * ## Safety + * + * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 + * - `text`は有効なヌル終端文字列を指していなければならない。 + * - `output_wav_length`はアラインメントに沿っていなければならない。 + * - `output_wav`はアラインメントに沿っていなければならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -565,11 +731,15 @@ VoicevoxResultCode voicevox_synthesizer_tts(const struct VoicevoxSynthesizer *sy uint8_t **output_wav); /** - * jsonフォーマットされたデータのメモリを解放する - * @param [in] json 解放する json データ + * JSON文字列を解放する。 * - * # Safety - * @param voicevox_audio_query で確保されたポインタであり、かつ呼び出し側でバッファの変更を行われていないこと + * @param [in] json 解放するJSON文字列 + * + * ## Safety + * + * - `json`は以下のAPIで得られたポインタでなくてはいけない。 + * - + * - 文字列の長さは生成時より変更されていてはならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -577,11 +747,15 @@ __declspec(dllimport) void voicevox_json_free(char *json); /** - * wav データのメモリを解放する - * @param [in] wav 解放する wav データ + * wavデータを解放する。 + * + * @param [in] wav 解放するwavデータ * - * # Safety - * @param wav voicevox_tts,voicevox_synthesis で確保されたポインタであり、かつ呼び出し側でバッファの変更を行われていないこと + * ## Safety + * + * - `wav`は以下のAPIで得られたポインタでなくてはいけない。 + * - ::voicevox_synthesizer_synthesis + * - ::voicevox_synthesizer_tts */ #ifdef _WIN32 __declspec(dllimport) @@ -589,9 +763,26 @@ __declspec(dllimport) void voicevox_wav_free(uint8_t *wav); /** - * エラー結果をメッセージに変換する - * @param [in] result_code メッセージに変換する result_code - * @return 結果コードを元に変換されたメッセージ文字列 + * 結果コードに対応したメッセージ文字列を取得する。 + * + * @param [in] result_code 結果コード + * + * @returns 結果コードに対応したメッセージ文字列 + * + * ## Examples + * + * ```c + * const char *actual = voicevox_error_result_to_message(VOICEVOX_RESULT_OK); + * const char *EXPECTED = "エラーが発生しませんでした"; + * assert(strcmp(actual, EXPECTED) == 0); + * ``` + * + * ```c + * const char *actual = + * voicevox_error_result_to_message(VOICEVOX_RESULT_LOAD_MODEL_ERROR); + * const char *EXPECTED = "modelデータ読み込みに失敗しました"; + * assert(strcmp(actual, EXPECTED) == 0); + * ``` */ #ifdef _WIN32 __declspec(dllimport) diff --git a/crates/voicevox_core_c_api/src/lib.rs b/crates/voicevox_core_c_api/src/lib.rs index 334cc03f4..95f690c1c 100644 --- a/crates/voicevox_core_c_api/src/lib.rs +++ b/crates/voicevox_core_c_api/src/lib.rs @@ -76,15 +76,43 @@ static RUNTIME: Lazy = Lazy::new(|| { * voicevox_core/publish.rsにある対応する関数とはこのファイルに定義してある公開関数からvoicevoxプレフィックスを取り除いた名前の関数である */ -/// 参照カウントで管理されたOpenJtalk +/// テキスト解析器としてのOpen JTalk。 +/// +/// コンストラクトは ::voicevox_open_jtalk_rc_new で行い、デストラクトは ::voicevox_open_jtalk_rc_delete で行う。 +/// +/// 参照カウント方式のスマートポインタ (reference-counted smart pointer) +/// +/// ## Example +/// +/// ```c +/// OpenJtalkRc *open_jtalk; +/// voicevox_open_jtalk_rc_new("./open_jtalk_dic_utf_8-1.11", &open_jtalk); +/// voicevox_open_jtalk_rc_delete(open_jtalk); +/// ``` pub struct OpenJtalkRc { open_jtalk: Arc, } -/// 参照カウントで管理されたOpenJtalkを生成する +/// ::OpenJtalkRc をコンストラクトする。 +/// +/// 解放は ::voicevox_open_jtalk_rc_delete で行う。 +/// +/// @param [in] open_jtalk_dic_dir 辞書ディレクトリを指すUTF-8のパス +/// @param [out] out_open_jtalk 生成先 +/// +/// @returns 結果コード /// -/// # Safety -/// @out_open_jtalk 自動でheap領域が割り当てられるため :voicevox_open_jtalk_rc_delete で開放する必要がある +/// ## Example +/// +/// ```c +/// OpenJtalkRc *open_jtalk; +/// voicevox_open_jtalk_rc_new("./open_jtalk_dic_utf_8-1.11", &open_jtalk); +/// ``` +/// +/// ## Safety +/// +/// - `open_jtalk_dic_dir`は有効なヌル終端文字列を指していなければならない。 +/// - `out_open_jtalk`はアラインメントに沿っていなければならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_open_jtalk_rc_new( open_jtalk_dic_dir: *const c_char, @@ -98,11 +126,19 @@ pub unsafe extern "C" fn voicevox_open_jtalk_rc_new( })()) } -/// 参照カウントで管理されたOpenJtalkを削除する -/// @param [in] open_jtalk 参照カウントで管理されたOpenJtalk +/// ::OpenJtalkRc をデストラクトする。 +/// +/// @param [in] open_jtalk デストラクト対象 +/// +/// ## Example +/// +/// ```c +/// voicevox_open_jtalk_rc_delete(open_jtalk); +/// ``` +/// +/// ## Safety /// -/// # Safety -/// @open_jtalk 有効な :OpenJtalkRc のポインタであること +/// - `open_jtalk`は ::voicevox_open_jtalk_rc_new で得たものでなければならず、また既にこの関数で解放されていてはいけない。 #[no_mangle] pub extern "C" fn voicevox_open_jtalk_rc_delete(open_jtalk: Box) { drop(open_jtalk); @@ -110,7 +146,7 @@ pub extern "C" fn voicevox_open_jtalk_rc_delete(open_jtalk: Box) { pub use voicevox_core::result_code::VoicevoxResultCode; -/// ハードウェアアクセラレーションモードを設定する設定値 +/// ハードウェアアクセラレーションモードを設定する設定値。 #[repr(i32)] #[derive(Debug, PartialEq, Eq)] #[allow(non_camel_case_types)] @@ -123,7 +159,7 @@ pub enum VoicevoxAccelerationMode { VOICEVOX_ACCELERATION_MODE_GPU = 2, } -/// 初期化オプション +/// ::voicevox_synthesizer_new_with_initialize のオプション。 #[repr(C)] pub struct VoicevoxInitializeOptions { /// ハードウェアアクセラレーションモード @@ -135,11 +171,11 @@ pub struct VoicevoxInitializeOptions { load_all_models: bool, } -/// デフォルトの初期化オプション +/// ::VoicevoxInitializeOptions のデフォルト値。 #[no_mangle] pub static voicevox_default_initialize_options: VoicevoxInitializeOptions = ConstDefault::DEFAULT; -/// voicevoxのバージョン +/// voicevoxのバージョン。 #[no_mangle] pub static voicevox_version: &c_char = { const VOICEVOX_VERSION: &CStr = unsafe { @@ -151,7 +187,9 @@ pub static voicevox_version: &c_char = { unsafe { &*VOICEVOX_VERSION.as_ptr() } }; -/// 音声モデル +/// 音声モデル。 +/// +/// コンストラクトは ::voicevox_voice_model_new_from_path で行い、デストラクトは ::voicevox_voice_model_delete で行う。 #[derive(Getters)] pub struct VoicevoxVoiceModel { model: VoiceModel, @@ -159,20 +197,25 @@ pub struct VoicevoxVoiceModel { metas: CString, } -/// 音声モデルID +/// 音声モデルID。 pub type VoicevoxVoiceModelId = *const c_char; -/// スタイルID +/// スタイルID。 +/// +/// VOICEVOXにおける、ある話者(speaker)のあるスタイル(style) (i.e. 声(voice))を指す。 pub type VoicevoxStyleId = u32; -/// vvmファイルパスから音声モデルを生成する -/// @param [in] path vvmファイルパス -/// @param [out] out_model 新しく生成された音声モデルの出力先 -/// @return 結果コード #VoicevoxResultCode +/// VVMファイルから ::VoicevoxVoiceModel をコンストラクトする。 +/// +/// @param [in] path vvmファイルへのUTF-8のファイルパス +/// @param [out] out_model 生成先 +/// +/// @returns 結果コード /// -/// # Safety -/// @param path null終端文字列であること -/// @param out_model 自動でheapメモリが割り当てられるので ::voicevox_voice_model_delete で解放する必要がある +/// ## Safety +/// +/// - `path`は有効なヌル終端文字列を指す。 +/// - `out_model`はアラインメントに沿っていなければならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_voice_model_new_from_path( path: *const c_char, @@ -187,52 +230,66 @@ pub unsafe extern "C" fn voicevox_voice_model_new_from_path( })()) } -/// 音声モデルのIDを取得する -/// @param [in] model 音声モデル #VoicevoxVoiceModel -/// @return 音声モデルID #VoicevoxVoiceModelId +/// ::VoicevoxVoiceModel からIDを取得する。 +/// +/// @param [in] model 音声モデル /// -/// # Safety -/// @param model 有効な #VoicevoxVoiceModel へのポインタであること +/// @returns 音声モデルID +/// +/// ## Safety +/// +/// - `model`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また ::voicevox_voice_model_delete で解放されていてはいけない。 #[no_mangle] pub extern "C" fn voicevox_voice_model_id(model: &VoicevoxVoiceModel) -> VoicevoxVoiceModelId { model.id().as_ptr() } -/// 音声モデルのメタ情報を取得する -/// @param [in] model 音声モデル #VoicevoxVoiceModel -/// @return メタ情報のjson文字列 +/// ::VoicevoxVoiceModel からメタ情報を取得する。 +/// +/// @param [in] model 音声モデル /// -/// # Safety -/// @param model 有効な #VoicevoxVoiceModel へのポインタであること +/// @returns メタ情報のJSON文字列 +/// +/// ## Safety +/// +/// - `model`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また ::voicevox_voice_model_delete で解放されていてはいけない。 #[no_mangle] pub extern "C" fn voicevox_voice_model_get_metas_json(model: &VoicevoxVoiceModel) -> *const c_char { model.metas().as_ptr() } -/// 音声モデルを破棄する -/// @param [in] model 破棄する音声モデル #VoicevoxVoiceModel +/// ::VoicevoxVoiceModel をデストラクトする。 +/// +/// @param [in] model 破棄する音声モデル /// -/// # Safety -/// @param model 有効な #VoicevoxVoiceModel へのポインタであること +/// ## Safety +/// +/// - `model`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また既にこの関数で解放されていてはいけない。 #[no_mangle] pub extern "C" fn voicevox_voice_model_delete(model: Box) { drop(model); } +/// 音声シンセサイザ。 +/// +/// コンストラクトは ::voicevox_synthesizer_new_with_initialize で行い、デストラクトは ::voicevox_synthesizer_delete で行う。 #[derive(Getters)] pub struct VoicevoxSynthesizer { synthesizer: Synthesizer, metas_cstring: CString, } -/// 音声シンセサイザを生成して初期化する -/// @param [in] open_jtalk 参照カウントで管理されたOpenJtalk -/// @param [in] options 初期化オプション #VoicevoxInitializeOptions -/// @param [out] out_synthesizer 新しく生成された音声シンセサイザの出力先 #VoicevoxSynthesizer -/// @return 結果コード #VoicevoxResultCode +/// ::VoicevoxSynthesizer をコンストラクトする。 +/// +/// @param [in] open_jtalk Open JTalkのオブジェクト +/// @param [in] options オプション +/// @param [out] out_synthesizer 生成先 +/// +/// @returns 結果コード /// -/// # Safety -/// @param out_synthesizer 自動でheapメモリが割り当てられるので ::voicevox_synthesizer_delete で解放する必要がある +/// ## Safety +/// +/// - `open_jtalk`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また ::voicevox_open_jtalk_rc_new で解放されていてはいけない。 #[no_mangle] pub extern "C" fn voicevox_synthesizer_new_with_initialize( open_jtalk: &OpenJtalkRc, @@ -250,24 +307,29 @@ pub extern "C" fn voicevox_synthesizer_new_with_initialize( })()) } -/// 音声シンセサイザを破棄する -/// @param [in] synthesizer 破棄する音声シンセサイザ #VoicevoxSynthesizer +/// ::VoicevoxSynthesizer をデストラクトする。 +/// +/// @param [in] synthesizer デストラクト対象 +/// +/// ## Safety /// -/// # Safety -/// @param synthesizer 有効な #VoicevoxSynthesizer へのポインタであること +/// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また既にこの関数で解放されていてはいけない。 #[no_mangle] pub extern "C" fn voicevox_synthesizer_delete(synthesizer: Box) { drop(synthesizer); } -/// モデルを読み込む +/// 音声モデルを読み込む。 +/// /// @param [in] synthesizer 音声シンセサイザ /// @param [in] model 音声モデル -/// @return 結果コード #VoicevoxResultCode /// -/// # Safety -/// @param synthesizer 有効な #VoicevoxSynthesizer へのポインタであること -/// @param model 有効な #VoicevoxVoiceModel へのポインタであること +/// @returns 結果コード +/// +/// ## Safety +/// +/// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 +/// - `model`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また ::voicevox_voice_model_delete で解放されていてはいけない。 #[no_mangle] pub extern "C" fn voicevox_synthesizer_load_voice_model( synthesizer: &mut VoicevoxSynthesizer, @@ -280,14 +342,17 @@ pub extern "C" fn voicevox_synthesizer_load_voice_model( ) } -/// モデルの読み込みを解除する +/// 音声モデルの読み込みを解除する。 +/// /// @param [in] synthesizer 音声シンセサイザ /// @param [in] model_id 音声モデルID -/// @return 結果コード #VoicevoxResultCode /// -/// # Safety -/// @param synthesizer 有効な #VoicevoxSynthesizer へのポインタであること -/// @param model_id NULL終端文字列であること +/// @returns 結果コード +/// +/// ## Safety +/// +/// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 +/// - `model_id`は有効なヌル終端文字列を指していなければならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_unload_voice_model( synthesizer: &mut VoicevoxSynthesizer, @@ -301,25 +366,31 @@ pub unsafe extern "C" fn voicevox_synthesizer_unload_voice_model( })()) } -/// ハードウェアアクセラレーションがGPUモードか判定する +/// ハードウェアアクセラレーションがGPUモードか判定する。 +/// /// @param [in] synthesizer 音声シンセサイザ -/// @return GPUモードならtrue、そうでないならfalse /// -/// # Safety -/// @param synthesizer 有効な #VoicevoxSynthesizer へのポインタであること +/// @returns GPUモードかどうか +/// +/// ## Safety +/// +/// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 #[no_mangle] pub extern "C" fn voicevox_synthesizer_is_gpu_mode(synthesizer: &VoicevoxSynthesizer) -> bool { synthesizer.synthesizer().is_gpu_mode() } -/// 指定したspeaker_idのモデルが読み込まれているか判定する -/// @param [in] synthesizer 音声シンセサイザ #VoicevoxSynthesizer -/// @param [in] model_id 音声モデルのID #VoicevoxVoiceModelId -/// @return モデルが読み込まれているのであればtrue、そうでないならfalse +/// 指定したIDの音声モデルが読み込まれているか判定する。 +/// +/// @param [in] synthesizer 音声シンセサイザ +/// @param [in] model_id 音声モデルID +/// +/// @returns モデルが読み込まれているかどうか +/// +/// ## Safety /// -/// # Safety -/// @param synthesizer 有効な #VoicevoxSynthesizer へのポインタであること -/// @param model_id NULL終端文字列 +/// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 +/// - `model_id`は有効なヌル終端文字列を指していなければならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_is_loaded_voice_model( synthesizer: &VoicevoxSynthesizer, @@ -331,12 +402,15 @@ pub unsafe extern "C" fn voicevox_synthesizer_is_loaded_voice_model( .is_loaded_voice_model(&VoiceModelId::new(raw_model_id.into())) } -/// メタ情報をjsonで取得する -/// @param [in] synthesizer 音声シンセサイザ #VoicevoxSynthesizer -/// @return メタ情報のjson文字列 +/// 今読み込んでいる音声モデルのメタ情報を、JSONで取得する。 /// -/// # Safety -/// @param synthesizer 有効な #VoicevoxSynthesizer へのポインタであること +/// @param [in] synthesizer 音声シンセサイザ +/// +/// @return メタ情報のJSON文字列 +/// +/// ## Safety +/// +/// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 #[no_mangle] pub extern "C" fn voicevox_synthesizer_get_metas_json( synthesizer: &VoicevoxSynthesizer, @@ -344,12 +418,20 @@ pub extern "C" fn voicevox_synthesizer_get_metas_json( synthesizer.metas().as_ptr() } -/// サポートデバイス情報をjsonで取得する -/// @param [out] output_supported_devices_json サポートデバイス情報のjson文字列 -/// @return 結果コード #VoicevoxResultCode +/// このライブラリで利用可能なデバイスの情報を、JSONで取得する。 +/// +/// JSONの解放は ::voicevox_json_free で行う。 +/// +/// @param [out] output_supported_devices_json サポートデバイス情報のJSON文字列 /// -/// # Safety -/// @param output_supported_devices_json 自動でheapメモリが割り当てられるので ::voicevox_json_free で解放する必要がある +/// @returns 結果コード +/// +/// ## Example +/// +/// ```c +/// char *supported_devices; +/// VoicevoxResultCode result = voicevox_create_supported_devices_json(&supported_devices); +/// ``` #[no_mangle] pub extern "C" fn voicevox_create_supported_devices_json( output_supported_devices_json: &mut MaybeUninit<*mut c_char>, @@ -366,28 +448,51 @@ pub extern "C" fn voicevox_create_supported_devices_json( })()) } -/// Audio query のオプション +/// ::voicevox_synthesizer_audio_query のオプション。 #[repr(C)] pub struct VoicevoxAudioQueryOptions { /// aquestalk形式のkanaとしてテキストを解釈する kana: bool, } -/// デフォルトの AudioQuery のオプション +/// ::VoicevoxAudioQueryOptions のデフォルト値。 #[no_mangle] pub static voicevox_default_audio_query_options: VoicevoxAudioQueryOptions = ConstDefault::DEFAULT; -/// AudioQuery を実行する -/// @param [in] synthesizer 音声シンセサイザ #VoicevoxSynthesizer -/// @param [in] text テキスト。文字コードはUTF-8 -/// @param [in] style_id スタイルID #VoicevoxStyleId -/// @param [in] options AudioQueryのオプション #VoicevoxAudioQueryOptions -/// @param [out] output_audio_query_json AudioQuery を json でフォーマットしたもの -/// @return 結果コード #VoicevoxResultCode -/// -/// # Safety -/// @param text null終端文字列であること -/// @param output_audio_query_json 自動でheapメモリが割り当てられるので ::voicevox_json_free で解放する必要がある +/// AudioQueryをJSONとして生成する。 +/// +/// @param [in] synthesizer 音声シンセサイザ +/// @param [in] text UTF-8の日本語テキストまたはAquesTalk形式のkana +/// @param [in] style_id スタイルID +/// @param [in] options オプション +/// @param [out] output_audio_query_json 生成先 +/// +/// @returns 結果コード +/// +/// ## Safety +/// +/// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 +/// - `text`は有効なヌル終端文字列を指していなければならない。 +/// +/// ## Examples +/// +/// ```c +/// char *audio_query; +/// voicevox_synthesizer_audio_query(synthesizer, +/// "こんにちは", // 日本語テキスト +/// 2, // "四国めたん (ノーマル)" +/// (VoicevoxAudioQueryOptions){.kana = false}, +/// &audio_query); +/// ``` +/// +/// ```c +/// char *audio_query; +/// voicevox_synthesizer_audio_query(synthesizer, +/// "コンニチワ'", // AquesTalk形式のkana +/// 2, // "四国めたん (ノーマル)" +/// (VoicevoxAudioQueryOptions){.kana = true}, +/// &audio_query); +/// ``` #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_audio_query( synthesizer: &VoicevoxSynthesizer, @@ -411,27 +516,54 @@ pub unsafe extern "C" fn voicevox_synthesizer_audio_query( })()) } -/// `accent_phrases` のオプション +/// ::voicevox_synthesizer_create_accent_phrases のオプション。 #[repr(C)] pub struct VoicevoxAccentPhrasesOptions { - /// aquestalk形式のkanaとしてテキストを解釈する + /// AquesTalk形式のkanaとしてテキストを解釈する kana: bool, } -/// デフォルトの `accent_phrases` のオプション +/// デフォルトの ::VoicevoxAccentPhrasesOptions。 #[no_mangle] pub static voicevox_default_accent_phrases_options: VoicevoxAccentPhrasesOptions = ConstDefault::DEFAULT; -/// create_accent_phrases を実行する -/// @param [in] synthesizer 音声シンセサイザ #VoicevoxSynthesizer -/// @param [in] text テキスト -/// @param [in] style_id スタイルID #VoicevoxStyleId -/// @param [in] output_accent_phrases_json アクセントフレーズのjson文字列 +/// AccentPhrase (アクセント句)の列をJSON形式で生成する。 +/// +/// 生成したJSON文字列を解放するには ::voicevox_json_free を使う。 +/// +/// @param [in] synthesizer 音声シンセサイザ +/// @param [in] text UTF-8の日本語テキストまたはAquesTalk形式のkana +/// @param [in] style_id スタイルID +/// @param [in] options オプション +/// @param [out] output_accent_phrases_json 生成先 /// -/// # Safety -/// @param text null終端文字列であること -/// @param output_accent_phrases_json 自動でheapメモリが割り当てられるので ::voicevox_json_free で解放する必要がある +/// @returns 結果コード +/// +/// ## Safety +/// +/// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 +/// - `text`は有効なヌル終端文字列を指していなければならない。 +/// +/// ## Examples +/// +/// ```c +/// char *accent_phrases; +/// voicevox_synthesizer_create_accent_phrases( +/// synthesizer, +/// "こんにちは", // 日本語テキスト +/// 2, // "四国めたん (ノーマル)" +/// voicevox_default_accent_phrases_options, &accent_phrases); +/// ``` +/// +/// ```c +/// char *accent_phrases; +/// voicevox_synthesizer_create_accent_phrases( +/// synthesizer, +/// "コンニチワ'", // AquesTalk形式のkana +/// 2, // "四国めたん (ノーマル)" +/// (VoicevoxAccentPhrasesOptions){.kana = true}, &accent_phrases); +/// ``` #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_create_accent_phrases( synthesizer: &VoicevoxSynthesizer, @@ -455,15 +587,21 @@ pub unsafe extern "C" fn voicevox_synthesizer_create_accent_phrases( })()) } -/// replace_mora_data を実行する -/// @param [in] synthesizer 音声シンセサイザ #VoicevoxSynthesizer -/// @param [in] accent_phrases_json 変換前のアクセントフレーズのjson文字列 -/// @param [in] style_id スタイルID #VoicevoxStyleId -/// @param [in] output_accent_phrases_json 変換後のアクセントフレーズのjson文字列 +/// AccentPhraseの列の音高・音素長を、特定の声で生成しなおす。 +/// +/// 生成したJSON文字列を解放するには ::voicevox_json_free を使う。 +/// +/// @param [in] synthesizer 音声シンセサイザ +/// @param [in] accent_phrases_json AccentPhraseの列のJSON文字列 +/// @param [in] style_id スタイルID +/// @param [out] output_accent_phrases_json 生成先 +/// +/// @returns 結果コード /// -/// # Safety -/// @param accent_phrases_json null終端文字列であること -/// @param output_accent_phrases_json 自動でheapメモリが割り当てられるので ::voicevox_json_free で解放する必要がある +/// ## Safety +/// +/// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 +/// - `accent_phrases_json`は有効なヌル終端文字列を指していなければならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_replace_mora_data( synthesizer: &VoicevoxSynthesizer, @@ -488,15 +626,21 @@ pub unsafe extern "C" fn voicevox_synthesizer_replace_mora_data( })()) } -/// replace_phoneme_length を実行する -/// @param [in] synthesizer 音声シンセサイザ #VoicevoxSynthesizer -/// @param [in] accent_phrases_json 変換前のアクセントフレーズのjson文字列 -/// @param [in] style_id スタイルID #VoicevoxStyleId -/// @param [in] output_accent_phrases_json 変換後のアクセントフレーズのjson文字列 +/// AccentPhraseの列の音素長を、特定の声で生成しなおす。 +/// +/// 生成したJSON文字列を解放するには ::voicevox_json_free を使う。 +/// +/// @param [in] synthesizer 音声シンセサイザ +/// @param [in] accent_phrases_json AccentPhraseの列のJSON文字列 +/// @param [in] style_id スタイルID +/// @param [out] output_accent_phrases_json 生成先 +/// +/// @returns 結果コード /// -/// # Safety -/// @param accent_phrases_json null終端文字列であること -/// @param output_accent_phrases_json 自動でheapメモリが割り当てられるので ::voicevox_json_free で解放する必要がある +/// ## Safety +/// +/// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 +/// - `accent_phrases_json`は有効なヌル終端文字列を指していなければならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_replace_phoneme_length( synthesizer: &VoicevoxSynthesizer, @@ -521,15 +665,21 @@ pub unsafe extern "C" fn voicevox_synthesizer_replace_phoneme_length( })()) } -/// replace_mora_pitch を実行する -/// @param [in] synthesizer 音声シンセサイザ #VoicevoxSynthesizer -/// @param [in] accent_phrases_json 変換前のアクセントフレーズのjson文字列 -/// @param [in] style_id スタイルID #VoicevoxStyleId -/// @param [in] output_accent_phrases_json 変換後のアクセントフレーズのjson文字列 +/// AccentPhraseの列の音高を、特定の声で生成しなおす。 +/// +/// 生成したJSON文字列を解放するには ::voicevox_json_free を使う。 +/// +/// @param [in] synthesizer 音声シンセサイザ +/// @param [in] accent_phrases_json AccentPhraseの列のJSON文字列 +/// @param [in] style_id スタイルID +/// @param [out] output_accent_phrases_json 生成先 /// -/// # Safety -/// @param accent_phrases_json null終端文字列であること -/// @param output_accent_phrases_json 自動でheapメモリが割り当てられるので ::voicevox_json_free で解放する必要がある +/// @returns 結果コード +/// +/// ## Safety +/// +/// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 +/// - `accent_phrases_json`は有効なヌル終端文字列を指していなければならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_replace_mora_pitch( synthesizer: &VoicevoxSynthesizer, @@ -554,29 +704,36 @@ pub unsafe extern "C" fn voicevox_synthesizer_replace_mora_pitch( })()) } -/// `voicevox_synthesizer_synthesis` のオプション +/// ::voicevox_synthesizer_synthesis のオプション。 #[repr(C)] pub struct VoicevoxSynthesisOptions { /// 疑問文の調整を有効にする enable_interrogative_upspeak: bool, } -/// デフォルトの `voicevox_synthesizer_synthesis` のオプション +/// ::VoicevoxSynthesisOptions のデフォルト値。 #[no_mangle] pub static voicevox_default_synthesis_options: VoicevoxSynthesisOptions = ConstDefault::DEFAULT; -/// AudioQuery から音声合成する -/// @param [in] synthesizer 音声シンセサイザ #VoicevoxSynthesizer -/// @param [in] audio_query_json jsonフォーマットされた AudioQuery -/// @param [in] style_id スタイルID #VoicevoxStyleId -/// @param [in] options AudioQueryから音声合成オプション -/// @param [out] output_wav_length 出力する wav データのサイズ -/// @param [out] output_wav wav データの出力先 -/// @return 結果コード #VoicevoxResultCode -/// -/// # Safety -/// @param output_wav_length 出力先の領域が確保された状態でpointerに渡されていること -/// @param output_wav 自動で output_wav_length 分のデータが割り当てられるので ::voicevox_wav_free で解放する必要がある +/// AudioQueryから音声合成を行う。 +/// +/// 生成したwavを解放するには ::voicevox_wav_free を使う。 +/// +/// @param [in] synthesizer 音声シンセサイザ +/// @param [in] audio_query_json AudioQueryのJSON文字列 +/// @param [in] style_id スタイルID +/// @param [in] options オプション +/// @param [out] output_wav_length 出力のバイト長 +/// @param [out] output_wav 出力先 +/// +/// @returns 結果コード +/// +/// ## Safety +/// +/// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 +/// - `audio_query_json`は有効なヌル終端文字列を指していなければならない。 +/// - `output_wav_length`はアラインメントに沿っていなければならない。 +/// - `output_wav`はアラインメントに沿っていなければならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_synthesis( synthesizer: &VoicevoxSynthesizer, @@ -602,31 +759,38 @@ pub unsafe extern "C" fn voicevox_synthesizer_synthesis( })()) } -/// テキスト音声合成オプション +/// ::voicevox_synthesizer_tts のオプション。 #[repr(C)] pub struct VoicevoxTtsOptions { - /// aquestalk形式のkanaとしてテキストを解釈する + /// AquesTalk形式のkanaとしてテキストを解釈する kana: bool, /// 疑問文の調整を有効にする enable_interrogative_upspeak: bool, } -/// デフォルトのテキスト音声合成オプション +/// ::VoicevoxTtsOptions のデフォルト値 #[no_mangle] pub static voicevox_default_tts_options: VoicevoxTtsOptions = ConstDefault::DEFAULT; -/// テキスト音声合成を実行する -/// @param [in] synthesizer 音声シンセサイザ #VoicevoxSynthesizer -/// @param [in] text テキスト。文字コードはUTF-8 -/// @param [in] style_id スタイルID #VoicevoxStyleId -/// @param [in] options テキスト音声合成オプション -/// @param [out] output_wav_length 出力する wav データのサイズ -/// @param [out] output_wav wav データの出力先 -/// @return 結果コード #VoicevoxResultCode -/// -/// # Safety -/// @param output_wav_length 出力先の領域が確保された状態でpointerに渡されていること -/// @param output_wav は自動で output_wav_length 分のデータが割り当てられるので ::voicevox_wav_free で解放する必要がある +/// テキスト音声合成を行う。 +/// +/// 生成したwavを解放するには ::voicevox_wav_free を使う。 +/// +/// @param [in] synthesizer +/// @param [in] text UTF-8の日本語テキストまたはAquesTalk形式のkana +/// @param [in] style_id スタイルID +/// @param [in] options オプション +/// @param [out] output_wav_length 出力のバイト長 +/// @param [out] output_wav 出力先 +/// +/// @returns 結果コード +/// +/// ## Safety +/// +/// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 +/// - `text`は有効なヌル終端文字列を指していなければならない。 +/// - `output_wav_length`はアラインメントに沿っていなければならない。 +/// - `output_wav`はアラインメントに沿っていなければならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_tts( synthesizer: &VoicevoxSynthesizer, @@ -648,29 +812,54 @@ pub unsafe extern "C" fn voicevox_synthesizer_tts( })()) } -/// jsonフォーマットされたデータのメモリを解放する -/// @param [in] json 解放する json データ +/// JSON文字列を解放する。 /// -/// # Safety -/// @param voicevox_audio_query で確保されたポインタであり、かつ呼び出し側でバッファの変更を行われていないこと +/// @param [in] json 解放するJSON文字列 +/// +/// ## Safety +/// +/// - `json`は以下のAPIで得られたポインタでなくてはいけない。 +/// - +/// - 文字列の長さは生成時より変更されていてはならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_json_free(json: *mut c_char) { drop(CString::from_raw(C_STRING_DROP_CHECKER.check(json))); } -/// wav データのメモリを解放する -/// @param [in] wav 解放する wav データ +/// wavデータを解放する。 +/// +/// @param [in] wav 解放するwavデータ /// -/// # Safety -/// @param wav voicevox_tts,voicevox_synthesis で確保されたポインタであり、かつ呼び出し側でバッファの変更を行われていないこと +/// ## Safety +/// +/// - `wav`は以下のAPIで得られたポインタでなくてはいけない。 +/// - ::voicevox_synthesizer_synthesis +/// - ::voicevox_synthesizer_tts #[no_mangle] pub extern "C" fn voicevox_wav_free(wav: *mut u8) { U8_SLICE_OWNER.drop_for(wav); } -/// エラー結果をメッセージに変換する -/// @param [in] result_code メッセージに変換する result_code -/// @return 結果コードを元に変換されたメッセージ文字列 +/// 結果コードに対応したメッセージ文字列を取得する。 +/// +/// @param [in] result_code 結果コード +/// +/// @returns 結果コードに対応したメッセージ文字列 +/// +/// ## Examples +/// +/// ```c +/// const char *actual = voicevox_error_result_to_message(VOICEVOX_RESULT_OK); +/// const char *EXPECTED = "エラーが発生しませんでした"; +/// assert(strcmp(actual, EXPECTED) == 0); +/// ``` +/// +/// ```c +/// const char *actual = +/// voicevox_error_result_to_message(VOICEVOX_RESULT_LOAD_MODEL_ERROR); +/// const char *EXPECTED = "modelデータ読み込みに失敗しました"; +/// assert(strcmp(actual, EXPECTED) == 0); +/// ``` #[no_mangle] pub extern "C" fn voicevox_error_result_to_message( result_code: VoicevoxResultCode, diff --git a/crates/voicevox_core_python_api/python/voicevox_core/_models.py b/crates/voicevox_core_python_api/python/voicevox_core/_models.py index 213e9bfee..d9c2df80c 100644 --- a/crates/voicevox_core_python_api/python/voicevox_core/_models.py +++ b/crates/voicevox_core_python_api/python/voicevox_core/_models.py @@ -6,27 +6,54 @@ @pydantic.dataclasses.dataclass class StyleMeta: + """スタイルのメタ情報。""" + name: str + """スタイル名。""" + id: int + """スタイルID。""" @pydantic.dataclasses.dataclass class SpeakerMeta: - """メタ情報。""" + """話者のメタ情報。""" name: str + """話者名。""" + styles: List[StyleMeta] + """話者に属するスタイル。""" + speaker_uuid: str + """話者のバージョン。""" + version: str + """話者のUUID。""" @pydantic.dataclasses.dataclass class SupportedDevices: - """サポートデバイス情報。""" + """このライブラリで利用可能なデバイスの情報。""" cpu: bool + """ + CPUが利用可能。 + + 常に ``true`` 。 + """ + cuda: bool + """ + `CUDA Execution Provider `_ + (``CUDAExecutionProvider``)が利用可能。 + """ + dml: bool + """ + `DirectML Execution Provider `_ + (``DmlExecutionProvider``)が利用可能。 + """ class AccelerationMode(str, Enum): @@ -35,37 +62,92 @@ class AccelerationMode(str, Enum): """ AUTO = "AUTO" + """ + 実行環境に合った適切なハードウェアアクセラレーションモードを選択する。 + """ + CPU = "CPU" + """ハードウェアアクセラレーションモードを"CPU"に設定する。""" + GPU = "GPU" + """ハードウェアアクセラレーションモードを"GPU"に設定する。""" @pydantic.dataclasses.dataclass class Mora: + """モーラ(子音+母音)ごとの情報。""" + text: str + """文字。""" + consonant: Optional[str] + """子音の音素。""" + consonant_length: Optional[float] + """子音の音長。""" + vowel: str + """母音の音素。""" + vowel_length: float + """母音の音長。""" + pitch: float + """音高。""" @pydantic.dataclasses.dataclass class AccentPhrase: + """AccentPhrase (アクセント句ごとの情報)。""" + moras: List[Mora] + """モーラの列。""" + accent: int + """アクセント箇所。""" + pause_mora: Optional[Mora] + """後ろに無音を付けるかどうか。""" + is_interrogative: bool + """疑問系かどうか。""" @pydantic.dataclasses.dataclass class AudioQuery: + """AudioQuery (音声合成用のクエリ)。""" + accent_phrases: List[AccentPhrase] + """アクセント句の列。""" + speed_scale: float + """全体の話速。""" + pitch_scale: float + """全体の音高。""" + intonation_scale: float + """全体の抑揚。""" + volume_scale: float + """全体の音量。""" + pre_phoneme_length: float + """音声の前の無音時間。""" + post_phoneme_length: float + """音声の後の無音時間。""" + output_sampling_rate: int + """音声データの出力サンプリングレート。""" + output_stereo: bool + """音声データをステレオ出力するか否か。""" + kana: Optional[str] + """ + [読み取り専用] AquesTalkライクな読み仮名。 + + :func:`Synthesizer.audio_query` が返すもののみ ``str`` となる。入力としてのAudioQueryでは無視さ + れる。 + """ diff --git a/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi b/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi index 3ee503e88..ddfdad5c4 100644 --- a/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi +++ b/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi @@ -1,6 +1,5 @@ from pathlib import Path from typing import Final, List, Literal, Union - import numpy as np from numpy.typing import NDArray @@ -14,34 +13,47 @@ from voicevox_core import ( __version__: str -def supported_devices() -> SupportedDevices: ... +def supported_devices() -> SupportedDevices: + """このライブラリで利用可能なデバイスの情報を取得する。 + + .. code-block:: + + supported_devices = voicevox_core.supported_devices() + """ + ... class VoiceModel: + """音声モデル。""" + @staticmethod async def from_path(path: Union[Path, str]) -> "VoiceModel": """ - Parameters - ---------- - path - vvmファイルへのパス + VVMファイルから ``VoiceModel`` をコンストラクトする。 + + :param path: VVMファイルへのパス。 """ ... @property - def id(self) -> str: ... + def id(self) -> str: + """ID。""" + ... @property - def metas(self) -> List[SpeakerMeta]: ... + def metas(self) -> List[SpeakerMeta]: + """メタ情報。""" + ... class OpenJtalk: - def __init__(self, open_jtalk_dict_dir: Union[Path, str]) -> None: - """ - Parameters - ---------- - open_jtalk_dict_dir - open_jtalkの辞書ディレクトリ。 - """ - ... + """ + テキスト解析器としてのOpen JTalk。 + + :param open_jtalk_dict_dir: open_jtalkの辞書ディレクトリ。 + """ + + def __init__(self, open_jtalk_dict_dir: Union[Path, str]) -> None: ... class Synthesizer: + """音声シンセサイザ。""" + @staticmethod async def new_with_initialize( open_jtalk: OpenJtalk, @@ -52,79 +64,63 @@ class Synthesizer: load_all_models: bool = False, ) -> "Synthesizer": """ - Parameters - ---------- - open_jtalk - acceleration_mode - ハードウェアアクセラレーションモード。 - cpu_num_threads - CPU利用数を指定。0を指定すると環境に合わせたCPUが利用される。 - load_all_models - 全てのモデルを読み込む。 + :class:`Synthesizer` をコンストラクトする。 + + :param open_jtalk: Open JTalk。 + :param acceleration_mode: ハードウェアアクセラレーションモード。 + :param cpu_num_threads: CPU利用数を指定。0を指定すると環境に合わせたCPUが利用される。 + :param load_all_models: 全てのモデルを読み込む。 """ ... def __repr__(self) -> str: ... @property def is_gpu_mode(self) -> bool: - """ハードウェアアクセラレーションがGPUモードか判定する。 - - Returns - ------- - GPUモードならtrue、そうでないならfalse - """ + """ハードウェアアクセラレーションがGPUモードかどうか。""" ... @property def metas(self) -> SpeakerMeta: - """メタ情報を取得する。""" + """メタ情報。""" ... async def load_voice_model(self, model: VoiceModel) -> None: - """モデルを読み込む。 + """ + モデルを読み込む。 - Parameters - ---------- - style_id - 読み込むモデルの話者ID。 + :param style_id: 読み込むモデルのスタイルID。 """ ... def unload_voice_model(self, voice_model_id: str) -> None: - """モデルの読み込みを解除する。 + """音声モデルの読み込みを解除する。 - Parameters - ---------- - voice_model_id - 音声モデルID。 + :param voice_model_id: 音声モデルID。 """ ... def is_loaded_voice_model(self, voice_model_id: str) -> bool: - """指定したvoice_model_idのモデルが読み込まれているか判定する。 + """ + 指定したvoice_model_idのモデルが読み込まれているか判定する。 - Returns - ------- - モデルが読み込まれているのであればtrue、そうでないならfalse + :returns: モデルが読み込まれているかどうか。 """ ... def unload_voice_model(self, voice_model_id: str) -> None: - """指定したvoice_model_idのモデルがを破棄する""" + """ + 音声モデルの読み込みを解除する。 + + :param voice_model_id: 音声モデルID。 + """ async def audio_query( self, text: str, style_id: int, kana: bool = False, ) -> AudioQuery: - """AudioQuery を実行する。 + """ + :class:`AudioQuery` を生成する。 - Parameters - ---------- - text - テキスト。文字コードはUTF-8。 - style_id - 話者ID。 - kana - aquestalk形式のkanaとしてテキストを解釈する。 + :param text: テキスト。文字コードはUTF-8。 + :param style_id: スタイルID。 + :param kana: ``text`` をAquesTalk形式のkanaとして解釈する。 - Returns - ------- - :class:`AudioQuery` + :returns: 話者とテキストから生成された :class:`AudioQuery` 。 """ ... async def create_accent_phrases( @@ -133,20 +129,14 @@ class Synthesizer: style_id: int, kana: bool = False, ) -> List[AccentPhrase]: - """create_accent_phrases を実行する。 + """ + AccentPhrase (アクセント句)の列を生成する。 - Parameters - ---------- - text - テキスト。文字コードはUTF-8。 - style_id - 話者ID。 - kana - aquestalk形式のkanaとしてテキストを解釈する。 + :param text: UTF-8の日本語テキストまたはAquesTalk形式のkana。 + :param style_id: スタイルID。 + :param kana: ``text`` をAquesTalk形式のkanaとして解釈する。 - Returns - ------- - :class:`List` [:class:`AccentPhrase`] + :returns: :class:`AccentPhrase` の列。 """ ... async def replace_mora_data( @@ -156,15 +146,8 @@ class Synthesizer: ) -> List[AccentPhrase]: """アクセント句の音高・音素長を変更する。 - Parameters - ---------- - accent_phrases - 変更元のアクセント句。 - style_id - 話者ID。 - Returns - ------- - :class:`List` [:class:`AccentPhrase`] + :param accent_phrases: 変更元のアクセント句。 + :param style_id: スタイルID。 """ ... async def replace_phoneme_length( @@ -172,17 +155,11 @@ class Synthesizer: accent_phrases: List[AccentPhrase], style_id: int, ) -> List[AccentPhrase]: - """アクセント句の音素長を変更する。 + """ + アクセント句の音素長を変更する。 - Parameters - ---------- - accent_phrases - 変更元のアクセント句。 - style_id - 話者ID。 - Returns - ------- - :class:`List` [:class:`AccentPhrase`] + :param accent_phrases: 変更元のアクセント句。 + :param style_id: スタイルID。 """ ... async def replace_mora_pitch( @@ -190,17 +167,11 @@ class Synthesizer: accent_phrases: List[AccentPhrase], style_id: int, ) -> List[AccentPhrase]: - """アクセント句の音高を変更する。 + """ + アクセント句の音高を変更する。 - Parameters - ---------- - accent_phrases - 変更元のアクセント句。 - style_id - 話者ID。 - Returns - ------- - :class:`List` [:class:`AccentPhrase`] + :param accent_phrases: 変更元のアクセント句。 + :param style_id: スタイルID。 """ ... async def synthesis( @@ -209,20 +180,14 @@ class Synthesizer: style_id: int, enable_interrogative_upspeak: bool = True, ) -> bytes: - """AudioQuery から音声合成する。 + """ + :class:`AudioQuery` から音声合成する。 - Parameters - ---------- - audio_query - AudioQuery。 - style_id - 話者ID。 - enable_interrogative_upspeak - 疑問文の調整を有効にする。 + :param audio_query: :class:`AudioQuery` 。 + :param style_id: スタイルID。 + :param enable_interrogative_upspeak: 疑問文の調整を有効にする。 - Returns - ------- - wavデータ + :returnes: WAVデータ。 """ ... async def tts( @@ -232,17 +197,14 @@ class Synthesizer: kana: bool = False, enable_interrogative_upspeak: bool = True, ) -> bytes: - """テキスト音声合成を実行する。 - - Parameters - ---------- - text - テキスト。文字コードはUTF-8。 - style_id - 話者ID。 - kana - aquestalk形式のkanaとしてテキストを解釈する。 - enable_interrogative_upspeak - 疑問文の調整を有効にする。 + """ + テキスト音声合成を実行する。 + + :param text: UTF-8の日本語テキストまたはAquesTalk形式のkana。 + :param style_id: スタイルID。 + :param kana: ``text`` をAquesTalk形式のkanaとして解釈する。 + :param enable_interrogative_upspeak: 疑問文の調整を有効にする。 + + :returnes: WAVデータ。 """ ... From 43fab14626e6d054be8e72ee42694bb9529394d8 Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sun, 25 Jun 2023 23:07:14 +0900 Subject: [PATCH 02/43] Fix typo --- .../voicevox_core_python_api/python/voicevox_core/_rust.pyi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi b/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi index ddfdad5c4..6bb689611 100644 --- a/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi +++ b/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi @@ -187,7 +187,7 @@ class Synthesizer: :param style_id: スタイルID。 :param enable_interrogative_upspeak: 疑問文の調整を有効にする。 - :returnes: WAVデータ。 + :returns: WAVデータ。 """ ... async def tts( @@ -205,6 +205,6 @@ class Synthesizer: :param kana: ``text`` をAquesTalk形式のkanaとして解釈する。 :param enable_interrogative_upspeak: 疑問文の調整を有効にする。 - :returnes: WAVデータ。 + :returns: WAVデータ。 """ ... From e75f8af68413457ab0a7e08c76f4354f5b541472 Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Mon, 26 Jun 2023 01:25:59 +0900 Subject: [PATCH 03/43] =?UTF-8?q?Windows=E3=81=A7=E3=81=AFdoctest=E3=81=AF?= =?UTF-8?q?`no=5Frun`=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `$ORT_OUT_DIR`のハックが効かないため。 --- crates/voicevox_core/src/devices.rs | 3 ++- crates/voicevox_core/src/voice_synthesizer.rs | 15 ++++++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/crates/voicevox_core/src/devices.rs b/crates/voicevox_core/src/devices.rs index 92babaf9d..f1cae1d4a 100644 --- a/crates/voicevox_core/src/devices.rs +++ b/crates/voicevox_core/src/devices.rs @@ -22,7 +22,8 @@ pub struct SupportedDevices { impl SupportedDevices { /// `SupportedDevices`をコンストラクトする。 /// - /// ``` + #[cfg_attr(windows, doc = "```no_run")] + #[cfg_attr(not(windows), doc = "```")] /// use voicevox_core::SupportedDevices; /// /// let supported_devices = SupportedDevices::create()?; diff --git a/crates/voicevox_core/src/voice_synthesizer.rs b/crates/voicevox_core/src/voice_synthesizer.rs index affdd9ac4..b8591e87d 100644 --- a/crates/voicevox_core/src/voice_synthesizer.rs +++ b/crates/voicevox_core/src/voice_synthesizer.rs @@ -124,7 +124,8 @@ impl Synthesizer { /// /// # Example /// - /// ``` + #[cfg_attr(windows, doc = "```no_run")] + #[cfg_attr(not(windows), doc = "```")] /// # #[tokio::main] /// # async fn main() -> anyhow::Result<()> { /// # use test_util::OPEN_JTALK_DIC_DIR; @@ -297,7 +298,8 @@ impl Synthesizer { /// /// # Examples /// - /// ``` + #[cfg_attr(windows, doc = "```no_run")] + #[cfg_attr(not(windows), doc = "```")] /// # #[tokio::main] /// # async fn main() -> anyhow::Result<()> { /// # let syntesizer = { @@ -341,7 +343,8 @@ impl Synthesizer { /// # } /// ``` /// - /// ``` + #[cfg_attr(windows, doc = "```no_run")] + #[cfg_attr(not(windows), doc = "```")] /// # #[tokio::main] /// # async fn main() -> anyhow::Result<()> { /// # let syntesizer = { @@ -446,7 +449,8 @@ impl Synthesizer { /// /// # Examples /// - /// ``` + #[cfg_attr(windows, doc = "```no_run")] + #[cfg_attr(not(windows), doc = "```")] /// # #[tokio::main] /// # async fn main() -> anyhow::Result<()> { /// # let syntesizer = { @@ -490,7 +494,8 @@ impl Synthesizer { /// # } /// ``` /// - /// ``` + #[cfg_attr(windows, doc = "```no_run")] + #[cfg_attr(not(windows), doc = "```")] /// # #[tokio::main] /// # async fn main() -> anyhow::Result<()> { /// # let syntesizer = { From 2a480c7e942276cb9c609b0568cf98271b13df23 Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sun, 2 Jul 2023 00:22:49 +0900 Subject: [PATCH 04/43] =?UTF-8?q?"=E7=84=A1=E6=96=99=E3=81=A7=E4=BD=BF?= =?UTF-8?q?=E3=81=88=E3=82=8B=E4=B8=AD=E5=93=81=E8=B3=AA=E3=81=AA=E3=83=86?= =?UTF-8?q?=E3=82=AD=E3=82=B9=E3=83=88=E8=AA=AD=E3=81=BF=E4=B8=8A=E3=81=92?= =?UTF-8?q?=E3=82=BD=E3=83=95=E3=83=88=E3=82=A6=E3=82=A7=E3=82=A2=E3=80=81?= =?UTF-8?q?VOICEVOX=E3=81=AE=E3=82=B3=E3=82=A2"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/voicevox_core/src/lib.rs | 2 ++ crates/voicevox_core_c_api/cbindgen.toml | 7 ++++++- crates/voicevox_core_c_api/include/voicevox_core.h | 6 +++++- .../python/voicevox_core/__init__.py | 2 ++ 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/crates/voicevox_core/src/lib.rs b/crates/voicevox_core/src/lib.rs index ec8928d79..4ce0a12ca 100644 --- a/crates/voicevox_core/src/lib.rs +++ b/crates/voicevox_core/src/lib.rs @@ -1,3 +1,5 @@ +//! 無料で使える中品質なテキスト読み上げソフトウェア、VOICEVOXのコア。 + #![deny(unsafe_code)] mod devices; diff --git a/crates/voicevox_core_c_api/cbindgen.toml b/crates/voicevox_core_c_api/cbindgen.toml index d038d038d..8a52bce63 100644 --- a/crates/voicevox_core_c_api/cbindgen.toml +++ b/crates/voicevox_core_c_api/cbindgen.toml @@ -2,7 +2,12 @@ language = "C" # Options for wrapping the contents of the header: -header = "/// @file" +header = """ +/** + * @file voicevox_core.h + * + * 無料で使える中品質なテキスト読み上げソフトウェア、VOICEVOXのコア。 + */""" include_guard = "VOICEVOX_CORE_INCLUDE_GUARD" no_includes = true include_version = true diff --git a/crates/voicevox_core_c_api/include/voicevox_core.h b/crates/voicevox_core_c_api/include/voicevox_core.h index 01387832f..dee351d37 100644 --- a/crates/voicevox_core_c_api/include/voicevox_core.h +++ b/crates/voicevox_core_c_api/include/voicevox_core.h @@ -1,4 +1,8 @@ -/// @file +/** + * @file voicevox_core.h + * + * 無料で使える中品質なテキスト読み上げソフトウェア、VOICEVOXのコア。 + */ #ifndef VOICEVOX_CORE_INCLUDE_GUARD #define VOICEVOX_CORE_INCLUDE_GUARD diff --git a/crates/voicevox_core_python_api/python/voicevox_core/__init__.py b/crates/voicevox_core_python_api/python/voicevox_core/__init__.py index 7b1dce0c8..687f6b078 100644 --- a/crates/voicevox_core_python_api/python/voicevox_core/__init__.py +++ b/crates/voicevox_core_python_api/python/voicevox_core/__init__.py @@ -1,3 +1,5 @@ +"""無料で使える中品質なテキスト読み上げソフトウェア、VOICEVOXのコア。""" + from . import _load_dlls # noqa: F401 from ._models import ( # noqa: F401 AccelerationMode, From 7637da517fea396d78df1e1e0f5f950c4d7bed42 Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sun, 2 Jul 2023 13:39:58 +0900 Subject: [PATCH 05/43] =?UTF-8?q?=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=82=92=20#534=20=E3=81=AB=E5=90=88?= =?UTF-8?q?=E3=82=8F=E3=81=9B=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/voicevox_core_c_api/src/lib.rs | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/crates/voicevox_core_c_api/src/lib.rs b/crates/voicevox_core_c_api/src/lib.rs index 7730f0fec..148f61e11 100644 --- a/crates/voicevox_core_c_api/src/lib.rs +++ b/crates/voicevox_core_c_api/src/lib.rs @@ -112,7 +112,7 @@ pub struct OpenJtalkRc { /// ## Safety /// /// - `open_jtalk_dic_dir`は有効なヌル終端文字列を指していなければならない。 -/// - `out_open_jtalk`はアラインメントに沿っていなければならない。 +/// - `out_open_jtalk`は書き込みについて有効でなければならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_open_jtalk_rc_new( open_jtalk_dic_dir: *const c_char, @@ -215,7 +215,7 @@ pub type VoicevoxStyleId = u32; /// ## Safety /// /// - `path`は有効なヌル終端文字列を指す。 -/// - `out_model`はアラインメントに沿っていなければならない。 +/// - `out_model`は書き込みについて有効でなければならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_voice_model_new_from_path( path: *const c_char, @@ -291,6 +291,7 @@ pub struct VoicevoxSynthesizer { /// ## Safety /// /// - `open_jtalk`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また ::voicevox_open_jtalk_rc_new で解放されていてはいけない。 +/// - `out_synthesizer`は書き込みについて有効でなければならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_new_with_initialize( open_jtalk: &OpenJtalkRc, @@ -435,6 +436,10 @@ pub extern "C" fn voicevox_synthesizer_get_metas_json( /// char *supported_devices; /// VoicevoxResultCode result = voicevox_create_supported_devices_json(&supported_devices); /// ``` +/// +/// ## Safety +/// +/// - `output_supported_devices_json`は書き込みについて有効でなければならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_create_supported_devices_json( output_supported_devices_json: NonNull<*mut c_char>, @@ -476,6 +481,7 @@ pub static voicevox_default_audio_query_options: VoicevoxAudioQueryOptions = Con /// /// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 /// - `text`は有効なヌル終端文字列を指していなければならない。 +/// - `output_audio_query_json`は書き込みについて有効でなければならない。 /// /// ## Examples /// @@ -549,6 +555,7 @@ pub static voicevox_default_accent_phrases_options: VoicevoxAccentPhrasesOptions /// /// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 /// - `text`は有効なヌル終端文字列を指していなければならない。 +/// - `output_audio_query_json`は書き込みについて有効でなければならない。 /// /// ## Examples /// @@ -608,6 +615,7 @@ pub unsafe extern "C" fn voicevox_synthesizer_create_accent_phrases( /// /// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 /// - `accent_phrases_json`は有効なヌル終端文字列を指していなければならない。 +/// - `output_audio_query_json`は書き込みについて有効でなければならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_replace_mora_data( synthesizer: &VoicevoxSynthesizer, @@ -648,6 +656,7 @@ pub unsafe extern "C" fn voicevox_synthesizer_replace_mora_data( /// /// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 /// - `accent_phrases_json`は有効なヌル終端文字列を指していなければならない。 +/// - `output_audio_query_json`は書き込みについて有効でなければならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_replace_phoneme_length( synthesizer: &VoicevoxSynthesizer, @@ -688,6 +697,7 @@ pub unsafe extern "C" fn voicevox_synthesizer_replace_phoneme_length( /// /// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 /// - `accent_phrases_json`は有効なヌル終端文字列を指していなければならない。 +/// - `output_audio_query_json`は書き込みについて有効でなければならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_replace_mora_pitch( synthesizer: &VoicevoxSynthesizer, @@ -741,8 +751,8 @@ pub static voicevox_default_synthesis_options: VoicevoxSynthesisOptions = ConstD /// /// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 /// - `audio_query_json`は有効なヌル終端文字列を指していなければならない。 -/// - `output_wav_length`はアラインメントに沿っていなければならない。 -/// - `output_wav`はアラインメントに沿っていなければならない。 +/// - `output_wav_length`は書き込みについて有効でなければならない。 +/// - `output_wav`は書き込みについて有効でなければならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_synthesis( synthesizer: &VoicevoxSynthesizer, @@ -798,8 +808,8 @@ pub static voicevox_default_tts_options: VoicevoxTtsOptions = ConstDefault::DEFA /// /// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 /// - `text`は有効なヌル終端文字列を指していなければならない。 -/// - `output_wav_length`はアラインメントに沿っていなければならない。 -/// - `output_wav`はアラインメントに沿っていなければならない。 +/// - `output_wav_length`は書き込みについて有効でなければならない。 +/// - `output_wav`は書き込みについて有効でなければならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_tts( synthesizer: &VoicevoxSynthesizer, From a066ea524bd710af5daa99267a9d0756b68a579e Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sun, 2 Jul 2023 13:47:08 +0900 Subject: [PATCH 06/43] `cargo xtask update-c-header` --- .../include/voicevox_core.h | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/crates/voicevox_core_c_api/include/voicevox_core.h b/crates/voicevox_core_c_api/include/voicevox_core.h index dee351d37..78990a6af 100644 --- a/crates/voicevox_core_c_api/include/voicevox_core.h +++ b/crates/voicevox_core_c_api/include/voicevox_core.h @@ -268,7 +268,7 @@ extern const struct VoicevoxTtsOptions voicevox_default_tts_options; * ## Safety * * - `open_jtalk_dic_dir`は有効なヌル終端文字列を指していなければならない。 - * - `out_open_jtalk`はアラインメントに沿っていなければならない。 + * - `out_open_jtalk`は書き込みについて有効でなければならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -307,7 +307,7 @@ void voicevox_open_jtalk_rc_delete(struct OpenJtalkRc *open_jtalk); * ## Safety * * - `path`は有効なヌル終端文字列を指す。 - * - `out_model`はアラインメントに沿っていなければならない。 + * - `out_model`は書き込みについて有効でなければならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -373,6 +373,7 @@ void voicevox_voice_model_delete(struct VoicevoxVoiceModel *model); * ## Safety * * - `open_jtalk`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また ::voicevox_open_jtalk_rc_new で解放されていてはいけない。 + * - `out_synthesizer`は書き込みについて有効でなければならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -499,6 +500,10 @@ const char *voicevox_synthesizer_get_metas_json(const struct VoicevoxSynthesizer * char *supported_devices; * VoicevoxResultCode result = voicevox_create_supported_devices_json(&supported_devices); * ``` + * + * ## Safety + * + * - `output_supported_devices_json`は書き込みについて有効でなければならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -520,6 +525,7 @@ VoicevoxResultCode voicevox_create_supported_devices_json(char **output_supporte * * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 * - `text`は有効なヌル終端文字列を指していなければならない。 + * - `output_audio_query_json`は書き込みについて有効でなければならない。 * * ## Examples * @@ -567,6 +573,7 @@ VoicevoxResultCode voicevox_synthesizer_audio_query(const struct VoicevoxSynthes * * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 * - `text`は有効なヌル終端文字列を指していなければならない。 + * - `output_audio_query_json`は書き込みについて有効でなければならない。 * * ## Examples * @@ -613,6 +620,7 @@ VoicevoxResultCode voicevox_synthesizer_create_accent_phrases(const struct Voice * * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 * - `accent_phrases_json`は有効なヌル終端文字列を指していなければならない。 + * - `output_audio_query_json`は書き込みについて有効でなければならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -638,6 +646,7 @@ VoicevoxResultCode voicevox_synthesizer_replace_mora_data(const struct VoicevoxS * * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 * - `accent_phrases_json`は有効なヌル終端文字列を指していなければならない。 + * - `output_audio_query_json`は書き込みについて有効でなければならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -663,6 +672,7 @@ VoicevoxResultCode voicevox_synthesizer_replace_phoneme_length(const struct Voic * * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 * - `accent_phrases_json`は有効なヌル終端文字列を指していなければならない。 + * - `output_audio_query_json`は書き込みについて有効でなければならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -690,8 +700,8 @@ VoicevoxResultCode voicevox_synthesizer_replace_mora_pitch(const struct Voicevox * * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 * - `audio_query_json`は有効なヌル終端文字列を指していなければならない。 - * - `output_wav_length`はアラインメントに沿っていなければならない。 - * - `output_wav`はアラインメントに沿っていなければならない。 + * - `output_wav_length`は書き込みについて有効でなければならない。 + * - `output_wav`は書き込みについて有効でなければならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -721,8 +731,8 @@ VoicevoxResultCode voicevox_synthesizer_synthesis(const struct VoicevoxSynthesiz * * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 * - `text`は有効なヌル終端文字列を指していなければならない。 - * - `output_wav_length`はアラインメントに沿っていなければならない。 - * - `output_wav`はアラインメントに沿っていなければならない。 + * - `output_wav_length`は書き込みについて有効でなければならない。 + * - `output_wav`は書き込みについて有効でなければならない。 */ #ifdef _WIN32 __declspec(dllimport) From a4c895d83f2e14fb12260b4a7a88e34a1d2fe809 Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sun, 2 Jul 2023 17:42:16 +0900 Subject: [PATCH 07/43] =?UTF-8?q?safety=E3=82=92=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/voicevox_core_c_api/cbindgen.toml | 21 +++++ .../include/voicevox_core.h | 76 +++++++++++++------ crates/voicevox_core_c_api/src/lib.rs | 55 ++++++++------ 3 files changed, 104 insertions(+), 48 deletions(-) diff --git a/crates/voicevox_core_c_api/cbindgen.toml b/crates/voicevox_core_c_api/cbindgen.toml index 8a52bce63..2cae8ffca 100644 --- a/crates/voicevox_core_c_api/cbindgen.toml +++ b/crates/voicevox_core_c_api/cbindgen.toml @@ -7,6 +7,27 @@ header = """ * @file voicevox_core.h * * 無料で使える中品質なテキスト読み上げソフトウェア、VOICEVOXのコア。 + * + *

+ * Safety + *

+ * + * このライブラリの使用にあたっては次の条件を遵守しなければならない。違反は未定義動作(_undefined behavior_)である。 + * + * - 「読み込みについて有効」と説明されているポインタは次の条件を満たしていなければならない。 + * - 間接参照可能(_dereferenceable_)である。 + * - 参照先のメモリは他スレッドから書き込み中ではない。 + * - 「書き込みについて有効」と説明されているポインタは次の条件を満たしていなければならない。 + * - 参照先のメモリは有効である (ただしメモリアラインメントに沿っている必要は無い)。 + * - 参照先のメモリは他スレッドからアクセス中ではない。 + * - このライブラリで生成したオブジェクトの解放は、このライブラリが提供するAPIで行わなくてはならない(freeHeapFreeで行ってはならない)。 + * + * 次のことに注意すること。 + * + * - 次のポインタは読み込みにおいても書き込みにおいても有効ではない。 + * - ヌルポインタ。 + * - 解放されたポインタ。 + * - voicevox_coreをアンロードする場合、voicevox_coreが生成したポインタが有効であり続けることは保証されない。 */""" include_guard = "VOICEVOX_CORE_INCLUDE_GUARD" no_includes = true diff --git a/crates/voicevox_core_c_api/include/voicevox_core.h b/crates/voicevox_core_c_api/include/voicevox_core.h index 78990a6af..14bac99c5 100644 --- a/crates/voicevox_core_c_api/include/voicevox_core.h +++ b/crates/voicevox_core_c_api/include/voicevox_core.h @@ -2,6 +2,27 @@ * @file voicevox_core.h * * 無料で使える中品質なテキスト読み上げソフトウェア、VOICEVOXのコア。 + * + *

+ * Safety + *

+ * + * このライブラリの使用にあたっては次の条件を遵守しなければならない。違反は未定義動作(_undefined behavior_)である。 + * + * - 「読み込みについて有効」と説明されているポインタは次の条件を満たしていなければならない。 + * - 間接参照可能(_dereferenceable_)である。 + * - 参照先のメモリは他スレッドから書き込み中ではない。 + * - 「書き込みについて有効」と説明されているポインタは次の条件を満たしていなければならない。 + * - 参照先のメモリは有効である (ただしメモリアラインメントに沿っている必要は無い)。 + * - 参照先のメモリは他スレッドからアクセス中ではない。 + * - このライブラリで生成したオブジェクトの解放は、このライブラリが提供するAPIで行わなくてはならない(freeHeapFreeで行ってはならない)。 + * + * 次のことに注意すること。 + * + * - 次のポインタは読み込みにおいても書き込みにおいても有効ではない。 + * - ヌルポインタ。 + * - 解放されたポインタ。 + * - voicevox_coreをアンロードする場合、voicevox_coreが生成したポインタが有効であり続けることは保証されない。 */ #ifndef VOICEVOX_CORE_INCLUDE_GUARD @@ -267,8 +288,8 @@ extern const struct VoicevoxTtsOptions voicevox_default_tts_options; * * ## Safety * - * - `open_jtalk_dic_dir`は有効なヌル終端文字列を指していなければならない。 - * - `out_open_jtalk`は書き込みについて有効でなければならない。 + * - `open_jtalk_dic_dir`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 + * - `out_open_jtalk`は書き込みについて有効でなければならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -290,6 +311,7 @@ VoicevoxResultCode voicevox_open_jtalk_rc_new(const char *open_jtalk_dic_dir, * ## Safety * * - `open_jtalk`は ::voicevox_open_jtalk_rc_new で得たものでなければならず、また既にこの関数で解放されていてはいけない。 + * - `open_jtalk`は以後ダングリングポインタ(_dangling pointer_)として扱われなくてはならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -306,8 +328,8 @@ void voicevox_open_jtalk_rc_delete(struct OpenJtalkRc *open_jtalk); * * ## Safety * - * - `path`は有効なヌル終端文字列を指す。 - * - `out_model`は書き込みについて有効でなければならない。 + * - `path`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 + * - `out_model`は書き込みについて有効でなければならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -355,6 +377,7 @@ const char *voicevox_voice_model_get_metas_json(const struct VoicevoxVoiceModel * ## Safety * * - `model`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また既にこの関数で解放されていてはいけない。 + * - `model`は以後ダングリングポインタ(_dangling pointer_)として扱われなくてはならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -373,7 +396,7 @@ void voicevox_voice_model_delete(struct VoicevoxVoiceModel *model); * ## Safety * * - `open_jtalk`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また ::voicevox_open_jtalk_rc_new で解放されていてはいけない。 - * - `out_synthesizer`は書き込みについて有効でなければならない。 + * - `out_synthesizer`は書き込みについて有効でなければならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -390,6 +413,7 @@ VoicevoxResultCode voicevox_synthesizer_new_with_initialize(const struct OpenJta * ## Safety * * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また既にこの関数で解放されていてはいけない。 + * - `synthesizer`は以後ダングリングポインタ(_dangling pointer_)として扱われなくてはならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -426,7 +450,7 @@ VoicevoxResultCode voicevox_synthesizer_load_voice_model(struct VoicevoxSynthesi * ## Safety * * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 - * - `model_id`は有効なヌル終端文字列を指していなければならない。 + * - `model_id`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -461,7 +485,7 @@ bool voicevox_synthesizer_is_gpu_mode(const struct VoicevoxSynthesizer *synthesi * ## Safety * * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 - * - `model_id`は有効なヌル終端文字列を指していなければならない。 + * - `model_id`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -503,7 +527,7 @@ const char *voicevox_synthesizer_get_metas_json(const struct VoicevoxSynthesizer * * ## Safety * - * - `output_supported_devices_json`は書き込みについて有効でなければならない。 + * - `output_supported_devices_json`は書き込みについて有効でなければならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -524,8 +548,8 @@ VoicevoxResultCode voicevox_create_supported_devices_json(char **output_supporte * ## Safety * * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 - * - `text`は有効なヌル終端文字列を指していなければならない。 - * - `output_audio_query_json`は書き込みについて有効でなければならない。 + * - `text`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 + * - `output_audio_query_json`は書き込みについて有効でなければならない。 * * ## Examples * @@ -572,8 +596,8 @@ VoicevoxResultCode voicevox_synthesizer_audio_query(const struct VoicevoxSynthes * ## Safety * * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 - * - `text`は有効なヌル終端文字列を指していなければならない。 - * - `output_audio_query_json`は書き込みについて有効でなければならない。 + * - `text`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 + * - `output_audio_query_json`は書き込みについて有効でなければならない。 * * ## Examples * @@ -619,8 +643,8 @@ VoicevoxResultCode voicevox_synthesizer_create_accent_phrases(const struct Voice * ## Safety * * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 - * - `accent_phrases_json`は有効なヌル終端文字列を指していなければならない。 - * - `output_audio_query_json`は書き込みについて有効でなければならない。 + * - `accent_phrases_json`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 + * - `output_audio_query_json`は書き込みについて有効でなければならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -645,8 +669,8 @@ VoicevoxResultCode voicevox_synthesizer_replace_mora_data(const struct VoicevoxS * ## Safety * * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 - * - `accent_phrases_json`は有効なヌル終端文字列を指していなければならない。 - * - `output_audio_query_json`は書き込みについて有効でなければならない。 + * - `accent_phrases_json`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 + * - `output_audio_query_json`は書き込みについて有効でなければならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -671,8 +695,8 @@ VoicevoxResultCode voicevox_synthesizer_replace_phoneme_length(const struct Voic * ## Safety * * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 - * - `accent_phrases_json`は有効なヌル終端文字列を指していなければならない。 - * - `output_audio_query_json`は書き込みについて有効でなければならない。 + * - `accent_phrases_json`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 + * - `output_audio_query_json`は書き込みについて有効でなければならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -699,9 +723,9 @@ VoicevoxResultCode voicevox_synthesizer_replace_mora_pitch(const struct Voicevox * ## Safety * * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 - * - `audio_query_json`は有効なヌル終端文字列を指していなければならない。 - * - `output_wav_length`は書き込みについて有効でなければならない。 - * - `output_wav`は書き込みについて有効でなければならない。 + * - `audio_query_json`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 + * - `output_wav_length`は書き込みについて有効でなければならない。 + * - `output_wav`は書き込みについて有効でなければならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -730,9 +754,9 @@ VoicevoxResultCode voicevox_synthesizer_synthesis(const struct VoicevoxSynthesiz * ## Safety * * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 - * - `text`は有効なヌル終端文字列を指していなければならない。 - * - `output_wav_length`は書き込みについて有効でなければならない。 - * - `output_wav`は書き込みについて有効でなければならない。 + * - `text`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 + * - `output_wav_length`は書き込みについて有効でなければならない。 + * - `output_wav`は書き込みについて有効でなければならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -754,6 +778,8 @@ VoicevoxResultCode voicevox_synthesizer_tts(const struct VoicevoxSynthesizer *sy * - `json`は以下のAPIで得られたポインタでなくてはいけない。 * - * - 文字列の長さは生成時より変更されていてはならない。 + * - `json`は読み込みと書き込みについて有効でなければならない。 + * - `json`は以後ダングリングポインタ(_dangling pointer_)として扱われなくてはならない。 */ #ifdef _WIN32 __declspec(dllimport) @@ -770,6 +796,8 @@ void voicevox_json_free(char *json); * - `wav`は以下のAPIで得られたポインタでなくてはいけない。 * - ::voicevox_synthesizer_synthesis * - ::voicevox_synthesizer_tts + * - `wav`は読み込みと書き込みについて有効でなければならない。 + * - `wav`は以後ダングリングポインタ(_dangling pointer_)として扱われなくてはならない。 */ #ifdef _WIN32 __declspec(dllimport) diff --git a/crates/voicevox_core_c_api/src/lib.rs b/crates/voicevox_core_c_api/src/lib.rs index 148f61e11..93ee170aa 100644 --- a/crates/voicevox_core_c_api/src/lib.rs +++ b/crates/voicevox_core_c_api/src/lib.rs @@ -111,8 +111,8 @@ pub struct OpenJtalkRc { /// /// ## Safety /// -/// - `open_jtalk_dic_dir`は有効なヌル終端文字列を指していなければならない。 -/// - `out_open_jtalk`は書き込みについて有効でなければならない。 +/// - `open_jtalk_dic_dir`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 +/// - `out_open_jtalk`は書き込みについて有効でなければならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_open_jtalk_rc_new( open_jtalk_dic_dir: *const c_char, @@ -139,6 +139,7 @@ pub unsafe extern "C" fn voicevox_open_jtalk_rc_new( /// ## Safety /// /// - `open_jtalk`は ::voicevox_open_jtalk_rc_new で得たものでなければならず、また既にこの関数で解放されていてはいけない。 +/// - `open_jtalk`は以後ダングリングポインタ(_dangling pointer_)として扱われなくてはならない。 #[no_mangle] pub extern "C" fn voicevox_open_jtalk_rc_delete(open_jtalk: Box) { drop(open_jtalk); @@ -214,8 +215,8 @@ pub type VoicevoxStyleId = u32; /// /// ## Safety /// -/// - `path`は有効なヌル終端文字列を指す。 -/// - `out_model`は書き込みについて有効でなければならない。 +/// - `path`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 +/// - `out_model`は書き込みについて有効でなければならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_voice_model_new_from_path( path: *const c_char, @@ -266,6 +267,7 @@ pub extern "C" fn voicevox_voice_model_get_metas_json(model: &VoicevoxVoiceModel /// ## Safety /// /// - `model`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また既にこの関数で解放されていてはいけない。 +/// - `model`は以後ダングリングポインタ(_dangling pointer_)として扱われなくてはならない。 #[no_mangle] pub extern "C" fn voicevox_voice_model_delete(model: Box) { drop(model); @@ -291,7 +293,7 @@ pub struct VoicevoxSynthesizer { /// ## Safety /// /// - `open_jtalk`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また ::voicevox_open_jtalk_rc_new で解放されていてはいけない。 -/// - `out_synthesizer`は書き込みについて有効でなければならない。 +/// - `out_synthesizer`は書き込みについて有効でなければならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_new_with_initialize( open_jtalk: &OpenJtalkRc, @@ -318,6 +320,7 @@ pub unsafe extern "C" fn voicevox_synthesizer_new_with_initialize( /// ## Safety /// /// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また既にこの関数で解放されていてはいけない。 +/// - `synthesizer`は以後ダングリングポインタ(_dangling pointer_)として扱われなくてはならない。 #[no_mangle] pub extern "C" fn voicevox_synthesizer_delete(synthesizer: Box) { drop(synthesizer); @@ -356,7 +359,7 @@ pub extern "C" fn voicevox_synthesizer_load_voice_model( /// ## Safety /// /// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 -/// - `model_id`は有効なヌル終端文字列を指していなければならない。 +/// - `model_id`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_unload_voice_model( synthesizer: &mut VoicevoxSynthesizer, @@ -394,7 +397,7 @@ pub extern "C" fn voicevox_synthesizer_is_gpu_mode(synthesizer: &VoicevoxSynthes /// ## Safety /// /// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 -/// - `model_id`は有効なヌル終端文字列を指していなければならない。 +/// - `model_id`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_is_loaded_voice_model( synthesizer: &VoicevoxSynthesizer, @@ -439,7 +442,7 @@ pub extern "C" fn voicevox_synthesizer_get_metas_json( /// /// ## Safety /// -/// - `output_supported_devices_json`は書き込みについて有効でなければならない。 +/// - `output_supported_devices_json`は書き込みについて有効でなければならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_create_supported_devices_json( output_supported_devices_json: NonNull<*mut c_char>, @@ -480,8 +483,8 @@ pub static voicevox_default_audio_query_options: VoicevoxAudioQueryOptions = Con /// ## Safety /// /// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 -/// - `text`は有効なヌル終端文字列を指していなければならない。 -/// - `output_audio_query_json`は書き込みについて有効でなければならない。 +/// - `text`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 +/// - `output_audio_query_json`は書き込みについて有効でなければならない。 /// /// ## Examples /// @@ -554,8 +557,8 @@ pub static voicevox_default_accent_phrases_options: VoicevoxAccentPhrasesOptions /// ## Safety /// /// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 -/// - `text`は有効なヌル終端文字列を指していなければならない。 -/// - `output_audio_query_json`は書き込みについて有効でなければならない。 +/// - `text`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 +/// - `output_audio_query_json`は書き込みについて有効でなければならない。 /// /// ## Examples /// @@ -614,8 +617,8 @@ pub unsafe extern "C" fn voicevox_synthesizer_create_accent_phrases( /// ## Safety /// /// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 -/// - `accent_phrases_json`は有効なヌル終端文字列を指していなければならない。 -/// - `output_audio_query_json`は書き込みについて有効でなければならない。 +/// - `accent_phrases_json`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 +/// - `output_audio_query_json`は書き込みについて有効でなければならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_replace_mora_data( synthesizer: &VoicevoxSynthesizer, @@ -655,8 +658,8 @@ pub unsafe extern "C" fn voicevox_synthesizer_replace_mora_data( /// ## Safety /// /// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 -/// - `accent_phrases_json`は有効なヌル終端文字列を指していなければならない。 -/// - `output_audio_query_json`は書き込みについて有効でなければならない。 +/// - `accent_phrases_json`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 +/// - `output_audio_query_json`は書き込みについて有効でなければならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_replace_phoneme_length( synthesizer: &VoicevoxSynthesizer, @@ -696,8 +699,8 @@ pub unsafe extern "C" fn voicevox_synthesizer_replace_phoneme_length( /// ## Safety /// /// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 -/// - `accent_phrases_json`は有効なヌル終端文字列を指していなければならない。 -/// - `output_audio_query_json`は書き込みについて有効でなければならない。 +/// - `accent_phrases_json`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 +/// - `output_audio_query_json`は書き込みについて有効でなければならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_replace_mora_pitch( synthesizer: &VoicevoxSynthesizer, @@ -750,9 +753,9 @@ pub static voicevox_default_synthesis_options: VoicevoxSynthesisOptions = ConstD /// ## Safety /// /// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 -/// - `audio_query_json`は有効なヌル終端文字列を指していなければならない。 -/// - `output_wav_length`は書き込みについて有効でなければならない。 -/// - `output_wav`は書き込みについて有効でなければならない。 +/// - `audio_query_json`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 +/// - `output_wav_length`は書き込みについて有効でなければならない。 +/// - `output_wav`は書き込みについて有効でなければならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_synthesis( synthesizer: &VoicevoxSynthesizer, @@ -807,9 +810,9 @@ pub static voicevox_default_tts_options: VoicevoxTtsOptions = ConstDefault::DEFA /// ## Safety /// /// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 -/// - `text`は有効なヌル終端文字列を指していなければならない。 -/// - `output_wav_length`は書き込みについて有効でなければならない。 -/// - `output_wav`は書き込みについて有効でなければならない。 +/// - `text`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 +/// - `output_wav_length`は書き込みについて有効でなければならない。 +/// - `output_wav`は書き込みについて有効でなければならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_tts( synthesizer: &VoicevoxSynthesizer, @@ -840,6 +843,8 @@ pub unsafe extern "C" fn voicevox_synthesizer_tts( /// - `json`は以下のAPIで得られたポインタでなくてはいけない。 /// - /// - 文字列の長さは生成時より変更されていてはならない。 +/// - `json`は読み込みと書き込みについて有効でなければならない。 +/// - `json`は以後ダングリングポインタ(_dangling pointer_)として扱われなくてはならない。 #[no_mangle] pub unsafe extern "C" fn voicevox_json_free(json: *mut c_char) { drop(CString::from_raw(C_STRING_DROP_CHECKER.check(json))); @@ -854,6 +859,8 @@ pub unsafe extern "C" fn voicevox_json_free(json: *mut c_char) { /// - `wav`は以下のAPIで得られたポインタでなくてはいけない。 /// - ::voicevox_synthesizer_synthesis /// - ::voicevox_synthesizer_tts +/// - `wav`は読み込みと書き込みについて有効でなければならない。 +/// - `wav`は以後ダングリングポインタ(_dangling pointer_)として扱われなくてはならない。 #[no_mangle] pub extern "C" fn voicevox_wav_free(wav: *mut u8) { U8_SLICE_OWNER.drop_for(wav); From 9b1cbde781e9f0a7f68345c80add0bb688355119 Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sat, 8 Jul 2023 17:21:58 +0900 Subject: [PATCH 08/43] =?UTF-8?q?JSON=E9=96=A2=E4=BF=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/voicevox_core/src/devices.rs | 5 +++++ crates/voicevox_core/src/metas.rs | 4 ++-- crates/voicevox_core_c_api/include/voicevox_core.h | 2 ++ crates/voicevox_core_c_api/src/lib.rs | 2 ++ .../python/voicevox_core/_models.py | 11 ++++++++--- .../python/voicevox_core/_rust.pyi | 5 ++++- 6 files changed, 23 insertions(+), 6 deletions(-) diff --git a/crates/voicevox_core/src/devices.rs b/crates/voicevox_core/src/devices.rs index f1cae1d4a..e3b366fd0 100644 --- a/crates/voicevox_core/src/devices.rs +++ b/crates/voicevox_core/src/devices.rs @@ -3,6 +3,9 @@ use serde::{Deserialize, Serialize}; use super::*; /// このライブラリで利用可能なデバイスの情報。 +/// +/// あくまで本ライブラリが対応しているデバイスの情報であることに注意。GPUが使える環境ではなかったと +/// しても`cuda`や`dml`は`true`を示す。 #[derive(Getters, Debug, Serialize, Deserialize)] pub struct SupportedDevices { /// CPUが利用可能。 @@ -22,6 +25,8 @@ pub struct SupportedDevices { impl SupportedDevices { /// `SupportedDevices`をコンストラクトする。 /// + /// # Example + /// #[cfg_attr(windows, doc = "```no_run")] #[cfg_attr(not(windows), doc = "```")] /// use voicevox_core::SupportedDevices; diff --git a/crates/voicevox_core/src/metas.rs b/crates/voicevox_core/src/metas.rs index 1063ffbb5..c377d330c 100644 --- a/crates/voicevox_core/src/metas.rs +++ b/crates/voicevox_core/src/metas.rs @@ -54,7 +54,7 @@ impl Display for StyleVersion { /// 音声モデルのメタ情報。 pub type VoiceModelMeta = Vec; -/// 話者のメタ情報。 +/// **話者**(_speaker_)のメタ情報。 #[derive(Deserialize, Serialize, Getters, Clone)] pub struct SpeakerMeta { /// 話者名。 @@ -70,7 +70,7 @@ pub struct SpeakerMeta { speaker_uuid: String, } -/// スタイルのメタ情報。 +/// **スタイル**(_style_)のメタ情報。 #[derive(Deserialize, Serialize, Getters, Clone)] pub struct StyleMeta { /// スタイルID。 diff --git a/crates/voicevox_core_c_api/include/voicevox_core.h b/crates/voicevox_core_c_api/include/voicevox_core.h index 14bac99c5..61752e1a5 100644 --- a/crates/voicevox_core_c_api/include/voicevox_core.h +++ b/crates/voicevox_core_c_api/include/voicevox_core.h @@ -514,6 +514,8 @@ const char *voicevox_synthesizer_get_metas_json(const struct VoicevoxSynthesizer * * JSONの解放は ::voicevox_json_free で行う。 * + * あくまで本ライブラリが対応しているデバイスの情報であることに注意。GPUが使える環境ではなかったとしても`cuda`や`dml`は`true`を示す。 + * * @param [out] output_supported_devices_json サポートデバイス情報のJSON文字列 * * @returns 結果コード diff --git a/crates/voicevox_core_c_api/src/lib.rs b/crates/voicevox_core_c_api/src/lib.rs index 93ee170aa..7285b6e0d 100644 --- a/crates/voicevox_core_c_api/src/lib.rs +++ b/crates/voicevox_core_c_api/src/lib.rs @@ -429,6 +429,8 @@ pub extern "C" fn voicevox_synthesizer_get_metas_json( /// /// JSONの解放は ::voicevox_json_free で行う。 /// +/// あくまで本ライブラリが対応しているデバイスの情報であることに注意。GPUが使える環境ではなかったとしても`cuda`や`dml`は`true`を示す。 +/// /// @param [out] output_supported_devices_json サポートデバイス情報のJSON文字列 /// /// @returns 結果コード diff --git a/crates/voicevox_core_python_api/python/voicevox_core/_models.py b/crates/voicevox_core_python_api/python/voicevox_core/_models.py index d9c2df80c..dd651957e 100644 --- a/crates/voicevox_core_python_api/python/voicevox_core/_models.py +++ b/crates/voicevox_core_python_api/python/voicevox_core/_models.py @@ -6,7 +6,7 @@ @pydantic.dataclasses.dataclass class StyleMeta: - """スタイルのメタ情報。""" + """**スタイル** (_style_)のメタ情報。""" name: str """スタイル名。""" @@ -17,7 +17,7 @@ class StyleMeta: @pydantic.dataclasses.dataclass class SpeakerMeta: - """話者のメタ情報。""" + """**話者** (*speaker*)のメタ情報。""" name: str """話者名。""" @@ -34,7 +34,12 @@ class SpeakerMeta: @pydantic.dataclasses.dataclass class SupportedDevices: - """このライブラリで利用可能なデバイスの情報。""" + """ + このライブラリで利用可能なデバイスの情報。 + + あくまで本ライブラリが対応しているデバイスの情報であることに注意。GPUが使える環境ではなかったとしても + ``cuda`` や ``dml`` は ``True`` を示す。 + """ cpu: bool """ diff --git a/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi b/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi index bec8310e6..4f65f59c4 100644 --- a/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi +++ b/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi @@ -13,10 +13,13 @@ from voicevox_core import ( __version__: str def supported_devices() -> SupportedDevices: - """このライブラリで利用可能なデバイスの情報を取得する。 + """ + このライブラリで利用可能なデバイスの情報を取得する。 .. code-block:: + import voicevox_core + supported_devices = voicevox_core.supported_devices() """ ... From 246f05f8ba97506a82388535d63e67eca5db70bd Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sat, 8 Jul 2023 17:28:51 +0900 Subject: [PATCH 09/43] =?UTF-8?q?=E6=9B=B8=E3=81=8D=E3=81=8B=E3=81=91?= =?UTF-8?q?=E3=81=AE`OpenJtalkRc`=E3=82=92=E6=9B=B8=E3=81=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/voicevox_core_c_api/include/voicevox_core.h | 4 +++- crates/voicevox_core_c_api/src/lib.rs | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/crates/voicevox_core_c_api/include/voicevox_core.h b/crates/voicevox_core_c_api/include/voicevox_core.h index 61752e1a5..70cfbdc8c 100644 --- a/crates/voicevox_core_c_api/include/voicevox_core.h +++ b/crates/voicevox_core_c_api/include/voicevox_core.h @@ -152,13 +152,15 @@ typedef int32_t VoicevoxResultCode; * * コンストラクトは ::voicevox_open_jtalk_rc_new で行い、デストラクトは ::voicevox_open_jtalk_rc_delete で行う。 * - * 参照カウント方式のスマートポインタ (reference-counted smart pointer) + * 参照カウント方式のスマートポインタ(reference-counted smart pointer)であり、 + * ::voicevox_synthesizer_new_with_initialize に渡されるときには参照カウンタがインクリメントされる形でオブジェクトの共有が行われる。 * * ## Example * * ```c * OpenJtalkRc *open_jtalk; * voicevox_open_jtalk_rc_new("./open_jtalk_dic_utf_8-1.11", &open_jtalk); + * // ⋮ * voicevox_open_jtalk_rc_delete(open_jtalk); * ``` */ diff --git a/crates/voicevox_core_c_api/src/lib.rs b/crates/voicevox_core_c_api/src/lib.rs index 7285b6e0d..26997f8f3 100644 --- a/crates/voicevox_core_c_api/src/lib.rs +++ b/crates/voicevox_core_c_api/src/lib.rs @@ -80,13 +80,15 @@ static RUNTIME: Lazy = Lazy::new(|| { /// /// コンストラクトは ::voicevox_open_jtalk_rc_new で行い、デストラクトは ::voicevox_open_jtalk_rc_delete で行う。 /// -/// 参照カウント方式のスマートポインタ (reference-counted smart pointer) +/// 参照カウント方式のスマートポインタ(reference-counted smart pointer)であり、 +/// ::voicevox_synthesizer_new_with_initialize に渡されるときには参照カウンタがインクリメントされる形でオブジェクトの共有が行われる。 /// /// ## Example /// /// ```c /// OpenJtalkRc *open_jtalk; /// voicevox_open_jtalk_rc_new("./open_jtalk_dic_utf_8-1.11", &open_jtalk); +/// // ⋮ /// voicevox_open_jtalk_rc_delete(open_jtalk); /// ``` pub struct OpenJtalkRc { From 5ae4d09cf57827b5d16e1cc792630a9d7f3cf413 Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sat, 8 Jul 2023 17:39:00 +0900 Subject: [PATCH 10/43] =?UTF-8?q?"=E5=A3=B0"/"voice"=E3=81=A8=E3=81=84?= =?UTF-8?q?=E3=81=86=E8=A8=80=E8=91=89=E3=81=AF=E9=81=BF=E3=81=91=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/voicevox_core/src/metas.rs | 2 +- crates/voicevox_core_c_api/src/lib.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/voicevox_core/src/metas.rs b/crates/voicevox_core/src/metas.rs index c377d330c..021a7d377 100644 --- a/crates/voicevox_core/src/metas.rs +++ b/crates/voicevox_core/src/metas.rs @@ -11,7 +11,7 @@ pub type RawStyleId = u32; /// スタイルID。 /// -/// VOICEVOXにおける、ある[話者(speaker)]のある[スタイル(style)] (i.e. 声(voice))を指す。 +/// VOICEVOXにおける、ある[話者(speaker)]のある[スタイル(style)]を指す。 /// /// [話者(speaker)]: SpeakerMeta /// [スタイル(style)]: StyleMeta diff --git a/crates/voicevox_core_c_api/src/lib.rs b/crates/voicevox_core_c_api/src/lib.rs index 26997f8f3..46882e025 100644 --- a/crates/voicevox_core_c_api/src/lib.rs +++ b/crates/voicevox_core_c_api/src/lib.rs @@ -205,7 +205,7 @@ pub type VoicevoxVoiceModelId = *const c_char; /// スタイルID。 /// -/// VOICEVOXにおける、ある話者(speaker)のあるスタイル(style) (i.e. 声(voice))を指す。 +/// VOICEVOXにおける、ある話者(speaker)のあるスタイル(style)を指す。 pub type VoicevoxStyleId = u32; /// VVMファイルから ::VoicevoxVoiceModel をコンストラクトする。 From 8c0e803d4de84d10d2fd37b000656d213c3872b5 Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sat, 8 Jul 2023 17:47:13 +0900 Subject: [PATCH 11/43] =?UTF-8?q?`**=E6=97=A5=E6=9C=AC=E8=AA=9E**(=5F?= =?UTF-8?q?=E8=8B=B1=E8=AA=9E=5F)`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/voicevox_core/src/metas.rs | 6 +++--- crates/voicevox_core_c_api/src/lib.rs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/crates/voicevox_core/src/metas.rs b/crates/voicevox_core/src/metas.rs index 021a7d377..827022d03 100644 --- a/crates/voicevox_core/src/metas.rs +++ b/crates/voicevox_core/src/metas.rs @@ -11,10 +11,10 @@ pub type RawStyleId = u32; /// スタイルID。 /// -/// VOICEVOXにおける、ある[話者(speaker)]のある[スタイル(style)]を指す。 +/// VOICEVOXにおける、ある[**話者**(_speaker_)]のある[**スタイル**(_style_)]を指す。 /// -/// [話者(speaker)]: SpeakerMeta -/// [スタイル(style)]: StyleMeta +/// [**話者**(_speaker_)]: SpeakerMeta +/// [**スタイル**(_style_)]: StyleMeta #[derive(PartialEq, Eq, Clone, Copy, Ord, PartialOrd, Deserialize, Serialize, new, Debug)] pub struct StyleId(RawStyleId); diff --git a/crates/voicevox_core_c_api/src/lib.rs b/crates/voicevox_core_c_api/src/lib.rs index 46882e025..3c0521cf8 100644 --- a/crates/voicevox_core_c_api/src/lib.rs +++ b/crates/voicevox_core_c_api/src/lib.rs @@ -205,7 +205,7 @@ pub type VoicevoxVoiceModelId = *const c_char; /// スタイルID。 /// -/// VOICEVOXにおける、ある話者(speaker)のあるスタイル(style)を指す。 +/// VOICEVOXにおける、ある話者(_speaker_)のあるスタイル(_style_)を指す。 pub type VoicevoxStyleId = u32; /// VVMファイルから ::VoicevoxVoiceModel をコンストラクトする。 From 67e332530cd20fe5ceadb33ccb9335b0bfac74db Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sat, 8 Jul 2023 17:48:03 +0900 Subject: [PATCH 12/43] =?UTF-8?q?`voicevox=5Fjson=5Ffree`=E3=81=B8?= =?UTF-8?q?=E3=81=AE=E6=A1=88=E5=86=85=E3=81=8C=E4=B8=80=E3=81=A4=E6=8A=9C?= =?UTF-8?q?=E3=81=91=E3=81=A6=E3=81=84=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/voicevox_core_c_api/src/lib.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crates/voicevox_core_c_api/src/lib.rs b/crates/voicevox_core_c_api/src/lib.rs index 3c0521cf8..e4bb3bc17 100644 --- a/crates/voicevox_core_c_api/src/lib.rs +++ b/crates/voicevox_core_c_api/src/lib.rs @@ -476,6 +476,8 @@ pub static voicevox_default_audio_query_options: VoicevoxAudioQueryOptions = Con /// AudioQueryをJSONとして生成する。 /// +/// 生成したJSON文字列を解放するには ::voicevox_json_free を使う。 +/// /// @param [in] synthesizer 音声シンセサイザ /// @param [in] text UTF-8の日本語テキストまたはAquesTalk形式のkana /// @param [in] style_id スタイルID From b6172502db9569dedaef2df0fac4f64da0d086ee Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sat, 8 Jul 2023 17:51:39 +0900 Subject: [PATCH 13/43] =?UTF-8?q?`voicevox=5Fjson=5Ffree`=E3=81=AE?= =?UTF-8?q?=E5=AF=BE=E8=B1=A1=E3=82=92=E6=98=8E=E8=A8=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/voicevox_core_c_api/src/lib.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/crates/voicevox_core_c_api/src/lib.rs b/crates/voicevox_core_c_api/src/lib.rs index e4bb3bc17..67aaf3d8b 100644 --- a/crates/voicevox_core_c_api/src/lib.rs +++ b/crates/voicevox_core_c_api/src/lib.rs @@ -847,7 +847,12 @@ pub unsafe extern "C" fn voicevox_synthesizer_tts( /// ## Safety /// /// - `json`は以下のAPIで得られたポインタでなくてはいけない。 -/// - +/// - ::voicevox_create_supported_devices_json +/// - ::voicevox_synthesizer_audio_query +/// - ::voicevox_synthesizer_create_accent_phrases +/// - ::voicevox_synthesizer_replace_mora_data +/// - ::voicevox_synthesizer_replace_phoneme_length +/// - ::voicevox_synthesizer_replace_mora_pitch /// - 文字列の長さは生成時より変更されていてはならない。 /// - `json`は読み込みと書き込みについて有効でなければならない。 /// - `json`は以後ダングリングポインタ(_dangling pointer_)として扱われなくてはならない。 From 9bbb11d7220cad3c5c1116f9631bfc118cff6e0e Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sat, 8 Jul 2023 17:51:50 +0900 Subject: [PATCH 14/43] `cargo xtask update-c-header` --- crates/voicevox_core_c_api/include/voicevox_core.h | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/crates/voicevox_core_c_api/include/voicevox_core.h b/crates/voicevox_core_c_api/include/voicevox_core.h index 70cfbdc8c..34abc2015 100644 --- a/crates/voicevox_core_c_api/include/voicevox_core.h +++ b/crates/voicevox_core_c_api/include/voicevox_core.h @@ -207,7 +207,7 @@ typedef struct VoicevoxInitializeOptions { /** * スタイルID。 * - * VOICEVOXにおける、ある話者(speaker)のあるスタイル(style) (i.e. 声(voice))を指す。 + * VOICEVOXにおける、ある話者(_speaker_)のあるスタイル(_style_)を指す。 */ typedef uint32_t VoicevoxStyleId; @@ -541,6 +541,8 @@ VoicevoxResultCode voicevox_create_supported_devices_json(char **output_supporte /** * AudioQueryをJSONとして生成する。 * + * 生成したJSON文字列を解放するには ::voicevox_json_free を使う。 + * * @param [in] synthesizer 音声シンセサイザ * @param [in] text UTF-8の日本語テキストまたはAquesTalk形式のkana * @param [in] style_id スタイルID @@ -780,7 +782,12 @@ VoicevoxResultCode voicevox_synthesizer_tts(const struct VoicevoxSynthesizer *sy * ## Safety * * - `json`は以下のAPIで得られたポインタでなくてはいけない。 - * - + * - ::voicevox_create_supported_devices_json + * - ::voicevox_synthesizer_audio_query + * - ::voicevox_synthesizer_create_accent_phrases + * - ::voicevox_synthesizer_replace_mora_data + * - ::voicevox_synthesizer_replace_phoneme_length + * - ::voicevox_synthesizer_replace_mora_pitch * - 文字列の長さは生成時より変更されていてはならない。 * - `json`は読み込みと書き込みについて有効でなければならない。 * - `json`は以後ダングリングポインタ(_dangling pointer_)として扱われなくてはならない。 From 020561e5fb768eaf2fba37c9592baf9054a6a7d3 Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sat, 8 Jul 2023 19:59:56 +0900 Subject: [PATCH 15/43] =?UTF-8?q?`Error`=E3=81=AE=E8=AA=AC=E6=98=8E?= =?UTF-8?q?=E3=82=92=E3=83=9E=E3=82=B7=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/voicevox_core/src/error.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/voicevox_core/src/error.rs b/crates/voicevox_core/src/error.rs index f4cb537ea..90e30911c 100644 --- a/crates/voicevox_core/src/error.rs +++ b/crates/voicevox_core/src/error.rs @@ -5,7 +5,7 @@ use super::*; use std::path::PathBuf; use thiserror::Error; -/// エラー。 +/// VOICEVOX COREのエラー。 #[derive(Error, Debug)] pub enum Error { /* From 23733cb5946be625ee50daa051b3de4b2a455013 Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sat, 8 Jul 2023 22:54:39 +0900 Subject: [PATCH 16/43] =?UTF-8?q?"=E7=A4=BA=E3=81=99"=20=E2=86=92=20"?= =?UTF-8?q?=E7=A4=BA=E3=81=97=E3=81=86=E3=82=8B"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Hiroshiba --- crates/voicevox_core/src/devices.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/voicevox_core/src/devices.rs b/crates/voicevox_core/src/devices.rs index e3b366fd0..9a1d6da89 100644 --- a/crates/voicevox_core/src/devices.rs +++ b/crates/voicevox_core/src/devices.rs @@ -5,7 +5,7 @@ use super::*; /// このライブラリで利用可能なデバイスの情報。 /// /// あくまで本ライブラリが対応しているデバイスの情報であることに注意。GPUが使える環境ではなかったと -/// しても`cuda`や`dml`は`true`を示す。 +/// しても`cuda`や`dml`は`true`を示しうる。 #[derive(Getters, Debug, Serialize, Deserialize)] pub struct SupportedDevices { /// CPUが利用可能。 From 804542fe95d2b94b9063a7026185b7a0628a53f6 Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sat, 8 Jul 2023 22:57:32 +0900 Subject: [PATCH 17/43] =?UTF-8?q?"=E7=A4=BA=E3=81=99"=20=E2=86=92=20"?= =?UTF-8?q?=E7=A4=BA=E3=81=97=E3=81=86=E3=82=8B"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Hiroshiba --- crates/voicevox_core_c_api/include/voicevox_core.h | 2 +- crates/voicevox_core_c_api/src/lib.rs | 2 +- crates/voicevox_core_python_api/python/voicevox_core/_models.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/voicevox_core_c_api/include/voicevox_core.h b/crates/voicevox_core_c_api/include/voicevox_core.h index 34abc2015..461d46bdf 100644 --- a/crates/voicevox_core_c_api/include/voicevox_core.h +++ b/crates/voicevox_core_c_api/include/voicevox_core.h @@ -516,7 +516,7 @@ const char *voicevox_synthesizer_get_metas_json(const struct VoicevoxSynthesizer * * JSONの解放は ::voicevox_json_free で行う。 * - * あくまで本ライブラリが対応しているデバイスの情報であることに注意。GPUが使える環境ではなかったとしても`cuda`や`dml`は`true`を示す。 + * あくまで本ライブラリが対応しているデバイスの情報であることに注意。GPUが使える環境ではなかったとしても`cuda`や`dml`は`true`を示しうる。 * * @param [out] output_supported_devices_json サポートデバイス情報のJSON文字列 * diff --git a/crates/voicevox_core_c_api/src/lib.rs b/crates/voicevox_core_c_api/src/lib.rs index 67aaf3d8b..8d9048aa6 100644 --- a/crates/voicevox_core_c_api/src/lib.rs +++ b/crates/voicevox_core_c_api/src/lib.rs @@ -431,7 +431,7 @@ pub extern "C" fn voicevox_synthesizer_get_metas_json( /// /// JSONの解放は ::voicevox_json_free で行う。 /// -/// あくまで本ライブラリが対応しているデバイスの情報であることに注意。GPUが使える環境ではなかったとしても`cuda`や`dml`は`true`を示す。 +/// あくまで本ライブラリが対応しているデバイスの情報であることに注意。GPUが使える環境ではなかったとしても`cuda`や`dml`は`true`を示しうる。 /// /// @param [out] output_supported_devices_json サポートデバイス情報のJSON文字列 /// diff --git a/crates/voicevox_core_python_api/python/voicevox_core/_models.py b/crates/voicevox_core_python_api/python/voicevox_core/_models.py index dd651957e..5b57e1617 100644 --- a/crates/voicevox_core_python_api/python/voicevox_core/_models.py +++ b/crates/voicevox_core_python_api/python/voicevox_core/_models.py @@ -38,7 +38,7 @@ class SupportedDevices: このライブラリで利用可能なデバイスの情報。 あくまで本ライブラリが対応しているデバイスの情報であることに注意。GPUが使える環境ではなかったとしても - ``cuda`` や ``dml`` は ``True`` を示す。 + ``cuda`` や ``dml`` は ``True`` を示しうる。 """ cpu: bool From e37367b026949c034eb25417ea190a615e8d0577 Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sat, 8 Jul 2023 23:00:23 +0900 Subject: [PATCH 18/43] =?UTF-8?q?=E7=A9=BA=E8=A1=8C=E3=82=92=E5=89=8A?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/voicevox_core/src/metas.rs | 3 --- 1 file changed, 3 deletions(-) diff --git a/crates/voicevox_core/src/metas.rs b/crates/voicevox_core/src/metas.rs index 827022d03..e39bca9c8 100644 --- a/crates/voicevox_core/src/metas.rs +++ b/crates/voicevox_core/src/metas.rs @@ -59,13 +59,10 @@ pub type VoiceModelMeta = Vec; pub struct SpeakerMeta { /// 話者名。 name: String, - /// 話者に属するスタイル。 styles: Vec, - /// 話者のバージョン。 version: StyleVersion, - /// 話者のUUID。 speaker_uuid: String, } From f1da37254cbcd367288384c5c2917fefd2f43e9f Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sat, 8 Jul 2023 23:20:54 +0900 Subject: [PATCH 19/43] =?UTF-8?q?"wav=E3=83=87=E3=83=BC=E3=82=BF"=20?= =?UTF-8?q?=E2=86=92=20"WAV=E3=83=87=E3=83=BC=E3=82=BF"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/voicevox_core_c_api/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/voicevox_core_c_api/src/lib.rs b/crates/voicevox_core_c_api/src/lib.rs index 8d9048aa6..cbe31d764 100644 --- a/crates/voicevox_core_c_api/src/lib.rs +++ b/crates/voicevox_core_c_api/src/lib.rs @@ -861,9 +861,9 @@ pub unsafe extern "C" fn voicevox_json_free(json: *mut c_char) { drop(CString::from_raw(C_STRING_DROP_CHECKER.check(json))); } -/// wavデータを解放する。 +/// WAVデータを解放する。 /// -/// @param [in] wav 解放するwavデータ +/// @param [in] wav 解放するWAVデータ /// /// ## Safety /// From 353c8e2734facce00111c06d9e6ab6b4e873cad2 Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sat, 8 Jul 2023 23:29:11 +0900 Subject: [PATCH 20/43] =?UTF-8?q?"wav"=20=E2=86=92=20"WAV=E3=83=87?= =?UTF-8?q?=E3=83=BC=E3=82=BF"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/voicevox_core_c_api/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/voicevox_core_c_api/src/lib.rs b/crates/voicevox_core_c_api/src/lib.rs index cbe31d764..9e709e836 100644 --- a/crates/voicevox_core_c_api/src/lib.rs +++ b/crates/voicevox_core_c_api/src/lib.rs @@ -745,7 +745,7 @@ pub static voicevox_default_synthesis_options: VoicevoxSynthesisOptions = ConstD /// AudioQueryから音声合成を行う。 /// -/// 生成したwavを解放するには ::voicevox_wav_free を使う。 +/// 生成したWAVデータを解放するには ::voicevox_wav_free を使う。 /// /// @param [in] synthesizer 音声シンセサイザ /// @param [in] audio_query_json AudioQueryのJSON文字列 From d79ed0da65115840d8991464d4f333ce3333b88c Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sat, 8 Jul 2023 23:29:41 +0900 Subject: [PATCH 21/43] =?UTF-8?q?"wav"=20=E2=86=92=20"WAV=E3=83=87?= =?UTF-8?q?=E3=83=BC=E3=82=BF"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/voicevox_core_c_api/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/voicevox_core_c_api/src/lib.rs b/crates/voicevox_core_c_api/src/lib.rs index 9e709e836..f23a78993 100644 --- a/crates/voicevox_core_c_api/src/lib.rs +++ b/crates/voicevox_core_c_api/src/lib.rs @@ -802,7 +802,7 @@ pub static voicevox_default_tts_options: VoicevoxTtsOptions = ConstDefault::DEFA /// テキスト音声合成を行う。 /// -/// 生成したwavを解放するには ::voicevox_wav_free を使う。 +/// 生成したWAVデータを解放するには ::voicevox_wav_free を使う。 /// /// @param [in] synthesizer /// @param [in] text UTF-8の日本語テキストまたはAquesTalk形式のkana From 2e1f15405ecf8e1dee5bfba6840ed23a1d7fcb7e Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sat, 8 Jul 2023 23:50:30 +0900 Subject: [PATCH 22/43] `cargo xtask update-c-header` --- crates/voicevox_core_c_api/include/voicevox_core.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/crates/voicevox_core_c_api/include/voicevox_core.h b/crates/voicevox_core_c_api/include/voicevox_core.h index 461d46bdf..6cab49f42 100644 --- a/crates/voicevox_core_c_api/include/voicevox_core.h +++ b/crates/voicevox_core_c_api/include/voicevox_core.h @@ -715,7 +715,7 @@ VoicevoxResultCode voicevox_synthesizer_replace_mora_pitch(const struct Voicevox /** * AudioQueryから音声合成を行う。 * - * 生成したwavを解放するには ::voicevox_wav_free を使う。 + * 生成したWAVデータを解放するには ::voicevox_wav_free を使う。 * * @param [in] synthesizer 音声シンセサイザ * @param [in] audio_query_json AudioQueryのJSON文字列 @@ -746,7 +746,7 @@ VoicevoxResultCode voicevox_synthesizer_synthesis(const struct VoicevoxSynthesiz /** * テキスト音声合成を行う。 * - * 生成したwavを解放するには ::voicevox_wav_free を使う。 + * 生成したWAVデータを解放するには ::voicevox_wav_free を使う。 * * @param [in] synthesizer * @param [in] text UTF-8の日本語テキストまたはAquesTalk形式のkana @@ -798,9 +798,9 @@ __declspec(dllimport) void voicevox_json_free(char *json); /** - * wavデータを解放する。 + * WAVデータを解放する。 * - * @param [in] wav 解放するwavデータ + * @param [in] wav 解放するWAVデータ * * ## Safety * From 887b31c2b0b3c76f0ae5510b38ed48dd6a254e9d Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sat, 8 Jul 2023 23:55:11 +0900 Subject: [PATCH 23/43] =?UTF-8?q?doctest=E3=81=AE`no=5Frun`=E3=81=AB=20#53?= =?UTF-8?q?7=20=E3=81=B8=E3=81=AE=E3=83=AA=E3=83=B3=E3=82=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/voicevox_core/src/devices.rs | 2 +- crates/voicevox_core/src/voice_synthesizer.rs | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/crates/voicevox_core/src/devices.rs b/crates/voicevox_core/src/devices.rs index 9a1d6da89..46a0f1de0 100644 --- a/crates/voicevox_core/src/devices.rs +++ b/crates/voicevox_core/src/devices.rs @@ -27,7 +27,7 @@ impl SupportedDevices { /// /// # Example /// - #[cfg_attr(windows, doc = "```no_run")] + #[cfg_attr(windows, doc = "```no_run")] // https://github.com/VOICEVOX/voicevox_core/issues/537 #[cfg_attr(not(windows), doc = "```")] /// use voicevox_core::SupportedDevices; /// diff --git a/crates/voicevox_core/src/voice_synthesizer.rs b/crates/voicevox_core/src/voice_synthesizer.rs index b8591e87d..1794069c3 100644 --- a/crates/voicevox_core/src/voice_synthesizer.rs +++ b/crates/voicevox_core/src/voice_synthesizer.rs @@ -124,7 +124,7 @@ impl Synthesizer { /// /// # Example /// - #[cfg_attr(windows, doc = "```no_run")] + #[cfg_attr(windows, doc = "```no_run")] // https://github.com/VOICEVOX/voicevox_core/issues/537 #[cfg_attr(not(windows), doc = "```")] /// # #[tokio::main] /// # async fn main() -> anyhow::Result<()> { @@ -298,7 +298,7 @@ impl Synthesizer { /// /// # Examples /// - #[cfg_attr(windows, doc = "```no_run")] + #[cfg_attr(windows, doc = "```no_run")] // https://github.com/VOICEVOX/voicevox_core/issues/537 #[cfg_attr(not(windows), doc = "```")] /// # #[tokio::main] /// # async fn main() -> anyhow::Result<()> { @@ -343,7 +343,7 @@ impl Synthesizer { /// # } /// ``` /// - #[cfg_attr(windows, doc = "```no_run")] + #[cfg_attr(windows, doc = "```no_run")] // https://github.com/VOICEVOX/voicevox_core/issues/537 #[cfg_attr(not(windows), doc = "```")] /// # #[tokio::main] /// # async fn main() -> anyhow::Result<()> { @@ -449,7 +449,7 @@ impl Synthesizer { /// /// # Examples /// - #[cfg_attr(windows, doc = "```no_run")] + #[cfg_attr(windows, doc = "```no_run")] // https://github.com/VOICEVOX/voicevox_core/issues/537 #[cfg_attr(not(windows), doc = "```")] /// # #[tokio::main] /// # async fn main() -> anyhow::Result<()> { @@ -494,7 +494,7 @@ impl Synthesizer { /// # } /// ``` /// - #[cfg_attr(windows, doc = "```no_run")] + #[cfg_attr(windows, doc = "```no_run")] // https://github.com/VOICEVOX/voicevox_core/issues/537 #[cfg_attr(not(windows), doc = "```")] /// # #[tokio::main] /// # async fn main() -> anyhow::Result<()> { From f9a1869b9b5c35f3c4d2e9747ab494886da2ce31 Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sun, 9 Jul 2023 04:05:44 +0900 Subject: [PATCH 24/43] =?UTF-8?q?"=E5=88=97"=20=E2=86=92=20"=E9=85=8D?= =?UTF-8?q?=E5=88=97"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/voicevox_core/src/engine/model.rs | 4 ++-- crates/voicevox_core/src/voice_synthesizer.rs | 8 ++++---- crates/voicevox_core_c_api/include/voicevox_core.h | 14 +++++++------- crates/voicevox_core_c_api/src/lib.rs | 14 +++++++------- .../python/voicevox_core/_models.py | 4 ++-- .../python/voicevox_core/_rust.pyi | 4 ++-- 6 files changed, 24 insertions(+), 24 deletions(-) diff --git a/crates/voicevox_core/src/engine/model.rs b/crates/voicevox_core/src/engine/model.rs index 4b1f84986..37cd1fc71 100644 --- a/crates/voicevox_core/src/engine/model.rs +++ b/crates/voicevox_core/src/engine/model.rs @@ -24,7 +24,7 @@ pub struct MoraModel { /// AccentPhrase (アクセント句ごとの情報)。 #[derive(Clone, Debug, new, Getters, Deserialize, Serialize)] pub struct AccentPhraseModel { - /// モーラの列。 + /// モーラの配列。 moras: Vec, /// アクセント箇所。 accent: usize, @@ -49,7 +49,7 @@ impl AccentPhraseModel { #[allow(clippy::too_many_arguments)] #[derive(Clone, new, Getters, Deserialize, Serialize)] pub struct AudioQueryModel { - /// アクセント句の列。 + /// アクセント句の配列。 accent_phrases: Vec, /// 全体の話速。 speed_scale: f32, diff --git a/crates/voicevox_core/src/voice_synthesizer.rs b/crates/voicevox_core/src/voice_synthesizer.rs index 1794069c3..f53966f98 100644 --- a/crates/voicevox_core/src/voice_synthesizer.rs +++ b/crates/voicevox_core/src/voice_synthesizer.rs @@ -291,7 +291,7 @@ impl Synthesizer { .await } - /// AccentPhrase (アクセント句)の列を生成する。 + /// AccentPhrase (アクセント句)の配列を生成する。 /// /// `text`は[`options.kana`]が有効化されているときにはAquesTalk形式のkanaとして、そうでないと /// きには日本語のテキストとして解釈される。 @@ -409,7 +409,7 @@ impl Synthesizer { } } - /// AccentPhraseの列の音高・音素長を、特定の声で生成しなおす。 + /// AccentPhraseの配列の音高・音素長を、特定の声で生成しなおす。 pub async fn replace_mora_data( &self, accent_phrases: &[AccentPhraseModel], @@ -420,7 +420,7 @@ impl Synthesizer { .await } - /// AccentPhraseの列の音素長を、特定の声で生成しなおす。 + /// AccentPhraseの配列の音素長を、特定の声で生成しなおす。 pub async fn replace_phoneme_length( &self, accent_phrases: &[AccentPhraseModel], @@ -431,7 +431,7 @@ impl Synthesizer { .await } - /// AccentPhraseの列の音高を、特定の声で生成しなおす。 + /// AccentPhraseの配列の音高を、特定の声で生成しなおす。 pub async fn replace_mora_pitch( &self, accent_phrases: &[AccentPhraseModel], diff --git a/crates/voicevox_core_c_api/include/voicevox_core.h b/crates/voicevox_core_c_api/include/voicevox_core.h index 6cab49f42..bc1c23031 100644 --- a/crates/voicevox_core_c_api/include/voicevox_core.h +++ b/crates/voicevox_core_c_api/include/voicevox_core.h @@ -587,7 +587,7 @@ VoicevoxResultCode voicevox_synthesizer_audio_query(const struct VoicevoxSynthes char **output_audio_query_json); /** - * AccentPhrase (アクセント句)の列をJSON形式で生成する。 + * AccentPhrase (アクセント句)の配列をJSON形式で生成する。 * * 生成したJSON文字列を解放するには ::voicevox_json_free を使う。 * @@ -635,12 +635,12 @@ VoicevoxResultCode voicevox_synthesizer_create_accent_phrases(const struct Voice char **output_accent_phrases_json); /** - * AccentPhraseの列の音高・音素長を、特定の声で生成しなおす。 + * AccentPhraseの配列の音高・音素長を、特定の声で生成しなおす。 * * 生成したJSON文字列を解放するには ::voicevox_json_free を使う。 * * @param [in] synthesizer 音声シンセサイザ - * @param [in] accent_phrases_json AccentPhraseの列のJSON文字列 + * @param [in] accent_phrases_json AccentPhraseの配列のJSON文字列 * @param [in] style_id スタイルID * @param [out] output_accent_phrases_json 生成先 * @@ -661,12 +661,12 @@ VoicevoxResultCode voicevox_synthesizer_replace_mora_data(const struct VoicevoxS char **output_accent_phrases_json); /** - * AccentPhraseの列の音素長を、特定の声で生成しなおす。 + * AccentPhraseの配列の音素長を、特定の声で生成しなおす。 * * 生成したJSON文字列を解放するには ::voicevox_json_free を使う。 * * @param [in] synthesizer 音声シンセサイザ - * @param [in] accent_phrases_json AccentPhraseの列のJSON文字列 + * @param [in] accent_phrases_json AccentPhraseの配列のJSON文字列 * @param [in] style_id スタイルID * @param [out] output_accent_phrases_json 生成先 * @@ -687,12 +687,12 @@ VoicevoxResultCode voicevox_synthesizer_replace_phoneme_length(const struct Voic char **output_accent_phrases_json); /** - * AccentPhraseの列の音高を、特定の声で生成しなおす。 + * AccentPhraseの配列の音高を、特定の声で生成しなおす。 * * 生成したJSON文字列を解放するには ::voicevox_json_free を使う。 * * @param [in] synthesizer 音声シンセサイザ - * @param [in] accent_phrases_json AccentPhraseの列のJSON文字列 + * @param [in] accent_phrases_json AccentPhraseの配列のJSON文字列 * @param [in] style_id スタイルID * @param [out] output_accent_phrases_json 生成先 * diff --git a/crates/voicevox_core_c_api/src/lib.rs b/crates/voicevox_core_c_api/src/lib.rs index f23a78993..666a50208 100644 --- a/crates/voicevox_core_c_api/src/lib.rs +++ b/crates/voicevox_core_c_api/src/lib.rs @@ -548,7 +548,7 @@ pub struct VoicevoxAccentPhrasesOptions { pub static voicevox_default_accent_phrases_options: VoicevoxAccentPhrasesOptions = ConstDefault::DEFAULT; -/// AccentPhrase (アクセント句)の列をJSON形式で生成する。 +/// AccentPhrase (アクセント句)の配列をJSON形式で生成する。 /// /// 生成したJSON文字列を解放するには ::voicevox_json_free を使う。 /// @@ -609,12 +609,12 @@ pub unsafe extern "C" fn voicevox_synthesizer_create_accent_phrases( })()) } -/// AccentPhraseの列の音高・音素長を、特定の声で生成しなおす。 +/// AccentPhraseの配列の音高・音素長を、特定の声で生成しなおす。 /// /// 生成したJSON文字列を解放するには ::voicevox_json_free を使う。 /// /// @param [in] synthesizer 音声シンセサイザ -/// @param [in] accent_phrases_json AccentPhraseの列のJSON文字列 +/// @param [in] accent_phrases_json AccentPhraseの配列のJSON文字列 /// @param [in] style_id スタイルID /// @param [out] output_accent_phrases_json 生成先 /// @@ -650,12 +650,12 @@ pub unsafe extern "C" fn voicevox_synthesizer_replace_mora_data( })()) } -/// AccentPhraseの列の音素長を、特定の声で生成しなおす。 +/// AccentPhraseの配列の音素長を、特定の声で生成しなおす。 /// /// 生成したJSON文字列を解放するには ::voicevox_json_free を使う。 /// /// @param [in] synthesizer 音声シンセサイザ -/// @param [in] accent_phrases_json AccentPhraseの列のJSON文字列 +/// @param [in] accent_phrases_json AccentPhraseの配列のJSON文字列 /// @param [in] style_id スタイルID /// @param [out] output_accent_phrases_json 生成先 /// @@ -691,12 +691,12 @@ pub unsafe extern "C" fn voicevox_synthesizer_replace_phoneme_length( })()) } -/// AccentPhraseの列の音高を、特定の声で生成しなおす。 +/// AccentPhraseの配列の音高を、特定の声で生成しなおす。 /// /// 生成したJSON文字列を解放するには ::voicevox_json_free を使う。 /// /// @param [in] synthesizer 音声シンセサイザ -/// @param [in] accent_phrases_json AccentPhraseの列のJSON文字列 +/// @param [in] accent_phrases_json AccentPhraseの配列のJSON文字列 /// @param [in] style_id スタイルID /// @param [out] output_accent_phrases_json 生成先 /// diff --git a/crates/voicevox_core_python_api/python/voicevox_core/_models.py b/crates/voicevox_core_python_api/python/voicevox_core/_models.py index 5b57e1617..debdebd44 100644 --- a/crates/voicevox_core_python_api/python/voicevox_core/_models.py +++ b/crates/voicevox_core_python_api/python/voicevox_core/_models.py @@ -106,7 +106,7 @@ class AccentPhrase: """AccentPhrase (アクセント句ごとの情報)。""" moras: List[Mora] - """モーラの列。""" + """モーラの配列。""" accent: int """アクセント箇所。""" @@ -123,7 +123,7 @@ class AudioQuery: """AudioQuery (音声合成用のクエリ)。""" accent_phrases: List[AccentPhrase] - """アクセント句の列。""" + """アクセント句の配列。""" speed_scale: float """全体の話速。""" diff --git a/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi b/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi index 4f65f59c4..0001ed620 100644 --- a/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi +++ b/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi @@ -132,13 +132,13 @@ class Synthesizer: kana: bool = False, ) -> List[AccentPhrase]: """ - AccentPhrase (アクセント句)の列を生成する。 + AccentPhrase (アクセント句)の配列を生成する。 :param text: UTF-8の日本語テキストまたはAquesTalk形式のkana。 :param style_id: スタイルID。 :param kana: ``text`` をAquesTalk形式のkanaとして解釈する。 - :returns: :class:`AccentPhrase` の列。 + :returns: :class:`AccentPhrase` の配列。 """ ... async def replace_mora_data( From 03c8df0f42f3dafd7c57eff83bdea00da304e941 Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sun, 16 Jul 2023 00:27:30 +0900 Subject: [PATCH 25/43] =?UTF-8?q?=E5=86=92=E9=A0=AD=E3=81=AEsafety?= =?UTF-8?q?=E3=82=BB=E3=82=AF=E3=82=B7=E3=83=A7=E3=83=B3=E3=82=92=E6=98=8E?= =?UTF-8?q?=E7=A2=BA=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/voicevox_core_c_api/cbindgen.toml | 8 +++++++- crates/voicevox_core_c_api/include/voicevox_core.h | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/crates/voicevox_core_c_api/cbindgen.toml b/crates/voicevox_core_c_api/cbindgen.toml index 2cae8ffca..c3118f3b4 100644 --- a/crates/voicevox_core_c_api/cbindgen.toml +++ b/crates/voicevox_core_c_api/cbindgen.toml @@ -12,7 +12,13 @@ header = """ * Safety * * - * このライブラリの使用にあたっては次の条件を遵守しなければならない。違反は未定義動作(_undefined behavior_)である。 + * このライブラリを使用するにあたり、未定義動作(_undefined + * behavior_)を避けるために保たなれなければならない不変条件がいくつかある。本ドキュメントではこの不変条件を安全性不変条件(_safety + * invariant_)と呼び、"Safety"というセクションの下に安全性不変条件を記述している。 + * + * 安全性不変条件の違反は未定義動作である。未定義動作が発生した場合、それにより何が起きるかの保証もされない。 + * + * `voicevox_core`全体における安全性不変条件は以下の通りである。 * * - 「読み込みについて有効」と説明されているポインタは次の条件を満たしていなければならない。 * - 間接参照可能(_dereferenceable_)である。 diff --git a/crates/voicevox_core_c_api/include/voicevox_core.h b/crates/voicevox_core_c_api/include/voicevox_core.h index bc1c23031..36af10704 100644 --- a/crates/voicevox_core_c_api/include/voicevox_core.h +++ b/crates/voicevox_core_c_api/include/voicevox_core.h @@ -7,7 +7,13 @@ * Safety * * - * このライブラリの使用にあたっては次の条件を遵守しなければならない。違反は未定義動作(_undefined behavior_)である。 + * このライブラリを使用するにあたり、未定義動作(_undefined + * behavior_)を避けるために保たなれなければならない不変条件がいくつかある。本ドキュメントではこの不変条件を安全性不変条件(_safety + * invariant_)と呼び、"Safety"というセクションの下に安全性不変条件を記述している。 + * + * 安全性不変条件の違反は未定義動作である。未定義動作が発生した場合、それにより何が起きるかの保証もされない。 + * + * `voicevox_core`全体における安全性不変条件は以下の通りである。 * * - 「読み込みについて有効」と説明されているポインタは次の条件を満たしていなければならない。 * - 間接参照可能(_dereferenceable_)である。 From b4dbc8d181aebd479573f0ae41d70f8081b2e1fb Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sun, 16 Jul 2023 00:56:40 +0900 Subject: [PATCH 26/43] =?UTF-8?q?`true`=20=E2=86=92=20`True`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: wappon28dev --- crates/voicevox_core_python_api/python/voicevox_core/_models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/voicevox_core_python_api/python/voicevox_core/_models.py b/crates/voicevox_core_python_api/python/voicevox_core/_models.py index debdebd44..8a6a4008c 100644 --- a/crates/voicevox_core_python_api/python/voicevox_core/_models.py +++ b/crates/voicevox_core_python_api/python/voicevox_core/_models.py @@ -45,7 +45,7 @@ class SupportedDevices: """ CPUが利用可能。 - 常に ``true`` 。 + 常に ``True`` 。 """ cuda: bool From f8d575867bce07bfd037b89c0c91f4976b428b7c Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Mon, 17 Jul 2023 23:12:43 +0900 Subject: [PATCH 27/43] Update the header level doc --- crates/voicevox_core_c_api/cbindgen.toml | 10 +++++----- crates/voicevox_core_c_api/include/voicevox_core.h | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/crates/voicevox_core_c_api/cbindgen.toml b/crates/voicevox_core_c_api/cbindgen.toml index c3118f3b4..740bf9a89 100644 --- a/crates/voicevox_core_c_api/cbindgen.toml +++ b/crates/voicevox_core_c_api/cbindgen.toml @@ -12,13 +12,13 @@ header = """ * Safety * * - * このライブラリを使用するにあたり、未定義動作(_undefined - * behavior_)を避けるために保たなれなければならない不変条件がいくつかある。本ドキュメントではこの不変条件を安全性不変条件(_safety - * invariant_)と呼び、"Safety"というセクションの下に安全性不変条件を記述している。 + * このライブラリを正しく使用するためには、いくつかの不変条件が守られている必要がある。本ドキュメントではこの不変条件を安全性要件(_safety + * requirements_)と呼び、"Safety"というセクションの下に安全性要件を示す。 * - * 安全性不変条件の違反は未定義動作である。未定義動作が発生した場合、それにより何が起きるかの保証もされない。 + * 安全性要件の違反は本ライブラリにおける未定義動作(_undefined + * behavior_)である。未定義動作が発生した場合、それにより何が起きるかの保証もされない。 * - * `voicevox_core`全体における安全性不変条件は以下の通りである。 + * `voicevox_core`全体における安全性要件は以下の通りである。 * * - 「読み込みについて有効」と説明されているポインタは次の条件を満たしていなければならない。 * - 間接参照可能(_dereferenceable_)である。 diff --git a/crates/voicevox_core_c_api/include/voicevox_core.h b/crates/voicevox_core_c_api/include/voicevox_core.h index 36af10704..b4de790f2 100644 --- a/crates/voicevox_core_c_api/include/voicevox_core.h +++ b/crates/voicevox_core_c_api/include/voicevox_core.h @@ -7,13 +7,13 @@ * Safety * * - * このライブラリを使用するにあたり、未定義動作(_undefined - * behavior_)を避けるために保たなれなければならない不変条件がいくつかある。本ドキュメントではこの不変条件を安全性不変条件(_safety - * invariant_)と呼び、"Safety"というセクションの下に安全性不変条件を記述している。 + * このライブラリを正しく使用するためには、いくつかの不変条件が守られている必要がある。本ドキュメントではこの不変条件を安全性要件(_safety + * requirements_)と呼び、"Safety"というセクションの下に安全性要件を示す。 * - * 安全性不変条件の違反は未定義動作である。未定義動作が発生した場合、それにより何が起きるかの保証もされない。 + * 安全性要件の違反は本ライブラリにおける未定義動作(_undefined + * behavior_)である。未定義動作が発生した場合、それにより何が起きるかの保証もされない。 * - * `voicevox_core`全体における安全性不変条件は以下の通りである。 + * `voicevox_core`全体における安全性要件は以下の通りである。 * * - 「読み込みについて有効」と説明されているポインタは次の条件を満たしていなければならない。 * - 間接参照可能(_dereferenceable_)である。 From 27d067bffd52b154282cfaf3d5a546129ff5b68d Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Fri, 21 Jul 2023 02:32:31 +0900 Subject: [PATCH 28/43] =?UTF-8?q?safety=E3=82=92=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/voicevox_core_c_api/cbindgen.toml | 12 +++++++++--- crates/voicevox_core_c_api/include/voicevox_core.h | 12 +++++++++--- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/crates/voicevox_core_c_api/cbindgen.toml b/crates/voicevox_core_c_api/cbindgen.toml index 740bf9a89..5d5d05757 100644 --- a/crates/voicevox_core_c_api/cbindgen.toml +++ b/crates/voicevox_core_c_api/cbindgen.toml @@ -12,11 +12,17 @@ header = """ * Safety * * - * このライブラリを正しく使用するためには、いくつかの不変条件が守られている必要がある。本ドキュメントではこの不変条件を安全性要件(_safety + * このライブラリの利用にあたっては、いくつかの不変条件が守られている必要がある。本ドキュメントではこの不変条件を安全性要件(_safety * requirements_)と呼び、"Safety"というセクションの下に安全性要件を示す。 * - * 安全性要件の違反は本ライブラリにおける未定義動作(_undefined - * behavior_)である。未定義動作が発生した場合、それにより何が起きるかの保証もされない。 + * 安全性要件の違反は[Rust言語における未定義動作(_undefined behavior_; 通称UB)]( + * https://doc.rust-lang.org/reference/behavior-considered-undefined.html)を引き起こす。 + * Rustの未定義動作は、Cのそれや[C++のそれ]( + * https://cpprefjp.github.io/implementation-compliance.html#nasal-demon)や[Zigのそれ]( + * https://ziglang.org/documentation/0.10.1/#Undefined-Behavior)などとおおよそ同じである。プログラム全体のどこかに未定義動作が含まれるなら、処理系はそれについて何をしてもよいとされる。[変数は同時にtrueでもfalseでもあってもよいし]( + * https://markshroyer.com/2012/06/c-both-true-and-false/)、あなたの鼻から悪魔が飛び出してもよい。このことは通称鼻から悪魔(_nasal + * demons_)と呼ばれる。「鼻から悪魔」は、このライブラリの呼び出し側も含めたプログラム全体に影響する。運が良ければセグメンテーション違反(_segmentation + * fault_)などで異常終了するだけだが、そうでない場合は挙動の予測やデバッグは困難である。ゆえに未定義動作は普通、引き起こしてはならないものとされる。 * * `voicevox_core`全体における安全性要件は以下の通りである。 * diff --git a/crates/voicevox_core_c_api/include/voicevox_core.h b/crates/voicevox_core_c_api/include/voicevox_core.h index b4de790f2..da6a8be36 100644 --- a/crates/voicevox_core_c_api/include/voicevox_core.h +++ b/crates/voicevox_core_c_api/include/voicevox_core.h @@ -7,11 +7,17 @@ * Safety * * - * このライブラリを正しく使用するためには、いくつかの不変条件が守られている必要がある。本ドキュメントではこの不変条件を安全性要件(_safety + * このライブラリの利用にあたっては、いくつかの不変条件が守られている必要がある。本ドキュメントではこの不変条件を安全性要件(_safety * requirements_)と呼び、"Safety"というセクションの下に安全性要件を示す。 * - * 安全性要件の違反は本ライブラリにおける未定義動作(_undefined - * behavior_)である。未定義動作が発生した場合、それにより何が起きるかの保証もされない。 + * 安全性要件の違反は[Rust言語における未定義動作(_undefined behavior_; 通称UB)]( + * https://doc.rust-lang.org/reference/behavior-considered-undefined.html)を引き起こす。 + * Rustの未定義動作は、Cのそれや[C++のそれ]( + * https://cpprefjp.github.io/implementation-compliance.html#nasal-demon)や[Zigのそれ]( + * https://ziglang.org/documentation/0.10.1/#Undefined-Behavior)などとおおよそ同じである。プログラム全体のどこかに未定義動作が含まれるなら、処理系はそれについて何をしてもよいとされる。[変数は同時にtrueでもfalseでもあってもよいし]( + * https://markshroyer.com/2012/06/c-both-true-and-false/)、あなたの鼻から悪魔が飛び出してもよい。このことは通称鼻から悪魔(_nasal + * demons_)と呼ばれる。「鼻から悪魔」は、このライブラリの呼び出し側も含めたプログラム全体に影響する。運が良ければセグメンテーション違反(_segmentation + * fault_)などで異常終了するだけだが、そうでない場合は挙動の予測やデバッグは困難である。ゆえに未定義動作は普通、引き起こしてはならないものとされる。 * * `voicevox_core`全体における安全性要件は以下の通りである。 * From 271bbaa6ab183e5f68986402a7cc5005e7a5df69 Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sat, 22 Jul 2023 16:54:59 +0900 Subject: [PATCH 29/43] =?UTF-8?q?safety=E3=81=A9example(s)=E3=82=92`
`?= =?UTF-8?q?=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/voicevox_core_c_api/cbindgen.toml | 10 +- .../include/voicevox_core.h | 147 +++++++++--------- crates/voicevox_core_c_api/src/lib.rs | 141 +++++++++-------- docs/apis/c_api/doxygen/Doxyfile | 6 + 4 files changed, 162 insertions(+), 142 deletions(-) diff --git a/crates/voicevox_core_c_api/cbindgen.toml b/crates/voicevox_core_c_api/cbindgen.toml index 5d5d05757..7d9e29205 100644 --- a/crates/voicevox_core_c_api/cbindgen.toml +++ b/crates/voicevox_core_c_api/cbindgen.toml @@ -8,10 +8,12 @@ header = """ * * 無料で使える中品質なテキスト読み上げソフトウェア、VOICEVOXのコア。 * - *

- * Safety - *

+ *
+ *
+ * ⚠️ Safety + *
* + *
* このライブラリの利用にあたっては、いくつかの不変条件が守られている必要がある。本ドキュメントではこの不変条件を安全性要件(_safety * requirements_)と呼び、"Safety"というセクションの下に安全性要件を示す。 * @@ -40,6 +42,8 @@ header = """ * - ヌルポインタ。 * - 解放されたポインタ。 * - voicevox_coreをアンロードする場合、voicevox_coreが生成したポインタが有効であり続けることは保証されない。 + *
+ *
*/""" include_guard = "VOICEVOX_CORE_INCLUDE_GUARD" no_includes = true diff --git a/crates/voicevox_core_c_api/include/voicevox_core.h b/crates/voicevox_core_c_api/include/voicevox_core.h index da6a8be36..e65a47a13 100644 --- a/crates/voicevox_core_c_api/include/voicevox_core.h +++ b/crates/voicevox_core_c_api/include/voicevox_core.h @@ -3,10 +3,12 @@ * * 無料で使える中品質なテキスト読み上げソフトウェア、VOICEVOXのコア。 * - *

- * Safety - *

+ *
+ *
+ * ⚠️ Safety + *
* + *
* このライブラリの利用にあたっては、いくつかの不変条件が守られている必要がある。本ドキュメントではこの不変条件を安全性要件(_safety * requirements_)と呼び、"Safety"というセクションの下に安全性要件を示す。 * @@ -35,6 +37,8 @@ * - ヌルポインタ。 * - 解放されたポインタ。 * - voicevox_coreをアンロードする場合、voicevox_coreが生成したポインタが有効であり続けることは保証されない。 + *
+ *
*/ #ifndef VOICEVOX_CORE_INCLUDE_GUARD @@ -167,14 +171,14 @@ typedef int32_t VoicevoxResultCode; * 参照カウント方式のスマートポインタ(reference-counted smart pointer)であり、 * ::voicevox_synthesizer_new_with_initialize に渡されるときには参照カウンタがインクリメントされる形でオブジェクトの共有が行われる。 * - * ## Example - * + * \example{ * ```c * OpenJtalkRc *open_jtalk; * voicevox_open_jtalk_rc_new("./open_jtalk_dic_utf_8-1.11", &open_jtalk); * // ⋮ * voicevox_open_jtalk_rc_delete(open_jtalk); * ``` + * } */ typedef struct OpenJtalkRc OpenJtalkRc; @@ -293,17 +297,17 @@ extern const struct VoicevoxTtsOptions voicevox_default_tts_options; * * @returns 結果コード * - * ## Example - * + * \example{ * ```c * OpenJtalkRc *open_jtalk; * voicevox_open_jtalk_rc_new("./open_jtalk_dic_utf_8-1.11", &open_jtalk); * ``` + * } * - * ## Safety - * + * \safety{ * - `open_jtalk_dic_dir`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 * - `out_open_jtalk`は書き込みについて有効でなければならない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -316,16 +320,16 @@ VoicevoxResultCode voicevox_open_jtalk_rc_new(const char *open_jtalk_dic_dir, * * @param [in] open_jtalk デストラクト対象 * - * ## Example - * + * \example{ * ```c * voicevox_open_jtalk_rc_delete(open_jtalk); * ``` + * } * - * ## Safety - * + * \safety{ * - `open_jtalk`は ::voicevox_open_jtalk_rc_new で得たものでなければならず、また既にこの関数で解放されていてはいけない。 * - `open_jtalk`は以後ダングリングポインタ(_dangling pointer_)として扱われなくてはならない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -340,10 +344,10 @@ void voicevox_open_jtalk_rc_delete(struct OpenJtalkRc *open_jtalk); * * @returns 結果コード * - * ## Safety - * + * \safety{ * - `path`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 * - `out_model`は書き込みについて有効でなければならない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -358,9 +362,9 @@ VoicevoxResultCode voicevox_voice_model_new_from_path(const char *path, * * @returns 音声モデルID * - * ## Safety - * + * \safety{ * - `model`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また ::voicevox_voice_model_delete で解放されていてはいけない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -374,9 +378,9 @@ VoicevoxVoiceModelId voicevox_voice_model_id(const struct VoicevoxVoiceModel *mo * * @returns メタ情報のJSON文字列 * - * ## Safety - * + * \safety{ * - `model`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また ::voicevox_voice_model_delete で解放されていてはいけない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -388,10 +392,10 @@ const char *voicevox_voice_model_get_metas_json(const struct VoicevoxVoiceModel * * @param [in] model 破棄する音声モデル * - * ## Safety - * + * \safety{ * - `model`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また既にこの関数で解放されていてはいけない。 * - `model`は以後ダングリングポインタ(_dangling pointer_)として扱われなくてはならない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -407,10 +411,10 @@ void voicevox_voice_model_delete(struct VoicevoxVoiceModel *model); * * @returns 結果コード * - * ## Safety - * + * \safety{ * - `open_jtalk`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また ::voicevox_open_jtalk_rc_new で解放されていてはいけない。 * - `out_synthesizer`は書き込みについて有効でなければならない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -424,10 +428,10 @@ VoicevoxResultCode voicevox_synthesizer_new_with_initialize(const struct OpenJta * * @param [in] synthesizer デストラクト対象 * - * ## Safety - * + * \safety{ * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また既にこの関数で解放されていてはいけない。 * - `synthesizer`は以後ダングリングポインタ(_dangling pointer_)として扱われなくてはならない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -442,10 +446,10 @@ void voicevox_synthesizer_delete(struct VoicevoxSynthesizer *synthesizer); * * @returns 結果コード * - * ## Safety - * + * \safety{ * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 * - `model`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また ::voicevox_voice_model_delete で解放されていてはいけない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -461,10 +465,10 @@ VoicevoxResultCode voicevox_synthesizer_load_voice_model(struct VoicevoxSynthesi * * @returns 結果コード * - * ## Safety - * + * \safety{ * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 * - `model_id`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -479,9 +483,9 @@ VoicevoxResultCode voicevox_synthesizer_unload_voice_model(struct VoicevoxSynthe * * @returns GPUモードかどうか * - * ## Safety - * + * \safety{ * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -496,10 +500,10 @@ bool voicevox_synthesizer_is_gpu_mode(const struct VoicevoxSynthesizer *synthesi * * @returns モデルが読み込まれているかどうか * - * ## Safety - * + * \safety{ * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 * - `model_id`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -514,9 +518,9 @@ bool voicevox_synthesizer_is_loaded_voice_model(const struct VoicevoxSynthesizer * * @return メタ情報のJSON文字列 * - * ## Safety - * + * \safety{ * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -534,16 +538,16 @@ const char *voicevox_synthesizer_get_metas_json(const struct VoicevoxSynthesizer * * @returns 結果コード * - * ## Example - * + * \example{ * ```c * char *supported_devices; * VoicevoxResultCode result = voicevox_create_supported_devices_json(&supported_devices); * ``` + * } * - * ## Safety - * + * \safety{ * - `output_supported_devices_json`は書き込みについて有効でなければならない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -563,14 +567,7 @@ VoicevoxResultCode voicevox_create_supported_devices_json(char **output_supporte * * @returns 結果コード * - * ## Safety - * - * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 - * - `text`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 - * - `output_audio_query_json`は書き込みについて有効でなければならない。 - * - * ## Examples - * + * \examples{ * ```c * char *audio_query; * voicevox_synthesizer_audio_query(synthesizer, @@ -588,6 +585,14 @@ VoicevoxResultCode voicevox_create_supported_devices_json(char **output_supporte * (VoicevoxAudioQueryOptions){.kana = true}, * &audio_query); * ``` + * } + * + * + * \safety{ + * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 + * - `text`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 + * - `output_audio_query_json`は書き込みについて有効でなければならない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -611,14 +616,7 @@ VoicevoxResultCode voicevox_synthesizer_audio_query(const struct VoicevoxSynthes * * @returns 結果コード * - * ## Safety - * - * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 - * - `text`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 - * - `output_audio_query_json`は書き込みについて有効でなければならない。 - * - * ## Examples - * + * \examples{ * ```c * char *accent_phrases; * voicevox_synthesizer_create_accent_phrases( @@ -636,6 +634,13 @@ VoicevoxResultCode voicevox_synthesizer_audio_query(const struct VoicevoxSynthes * 2, // "四国めたん (ノーマル)" * (VoicevoxAccentPhrasesOptions){.kana = true}, &accent_phrases); * ``` + * } + * + * \safety{ + * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 + * - `text`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 + * - `output_audio_query_json`は書き込みについて有効でなければならない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -658,11 +663,11 @@ VoicevoxResultCode voicevox_synthesizer_create_accent_phrases(const struct Voice * * @returns 結果コード * - * ## Safety - * + * \safety{ * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 * - `accent_phrases_json`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 * - `output_audio_query_json`は書き込みについて有効でなければならない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -684,11 +689,11 @@ VoicevoxResultCode voicevox_synthesizer_replace_mora_data(const struct VoicevoxS * * @returns 結果コード * - * ## Safety - * + * \safety{ * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 * - `accent_phrases_json`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 * - `output_audio_query_json`は書き込みについて有効でなければならない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -710,11 +715,11 @@ VoicevoxResultCode voicevox_synthesizer_replace_phoneme_length(const struct Voic * * @returns 結果コード * - * ## Safety - * + * \safety{ * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 * - `accent_phrases_json`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 * - `output_audio_query_json`は書き込みについて有効でなければならない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -738,12 +743,12 @@ VoicevoxResultCode voicevox_synthesizer_replace_mora_pitch(const struct Voicevox * * @returns 結果コード * - * ## Safety - * + * \safety{ * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 * - `audio_query_json`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 * - `output_wav_length`は書き込みについて有効でなければならない。 * - `output_wav`は書き込みについて有効でなければならない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -769,12 +774,12 @@ VoicevoxResultCode voicevox_synthesizer_synthesis(const struct VoicevoxSynthesiz * * @returns 結果コード * - * ## Safety - * + * \safety{ * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 * - `text`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 * - `output_wav_length`は書き込みについて有効でなければならない。 * - `output_wav`は書き込みについて有効でなければならない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -791,8 +796,7 @@ VoicevoxResultCode voicevox_synthesizer_tts(const struct VoicevoxSynthesizer *sy * * @param [in] json 解放するJSON文字列 * - * ## Safety - * + * \safety{ * - `json`は以下のAPIで得られたポインタでなくてはいけない。 * - ::voicevox_create_supported_devices_json * - ::voicevox_synthesizer_audio_query @@ -803,6 +807,7 @@ VoicevoxResultCode voicevox_synthesizer_tts(const struct VoicevoxSynthesizer *sy * - 文字列の長さは生成時より変更されていてはならない。 * - `json`は読み込みと書き込みについて有効でなければならない。 * - `json`は以後ダングリングポインタ(_dangling pointer_)として扱われなくてはならない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -814,13 +819,13 @@ void voicevox_json_free(char *json); * * @param [in] wav 解放するWAVデータ * - * ## Safety - * + * \safety{ * - `wav`は以下のAPIで得られたポインタでなくてはいけない。 * - ::voicevox_synthesizer_synthesis * - ::voicevox_synthesizer_tts * - `wav`は読み込みと書き込みについて有効でなければならない。 * - `wav`は以後ダングリングポインタ(_dangling pointer_)として扱われなくてはならない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -834,8 +839,7 @@ void voicevox_wav_free(uint8_t *wav); * * @returns 結果コードに対応したメッセージ文字列 * - * ## Examples - * + * \examples{ * ```c * const char *actual = voicevox_error_result_to_message(VOICEVOX_RESULT_OK); * const char *EXPECTED = "エラーが発生しませんでした"; @@ -848,6 +852,7 @@ void voicevox_wav_free(uint8_t *wav); * const char *EXPECTED = "modelデータ読み込みに失敗しました"; * assert(strcmp(actual, EXPECTED) == 0); * ``` + * } */ #ifdef _WIN32 __declspec(dllimport) diff --git a/crates/voicevox_core_c_api/src/lib.rs b/crates/voicevox_core_c_api/src/lib.rs index 666a50208..b463eb1ef 100644 --- a/crates/voicevox_core_c_api/src/lib.rs +++ b/crates/voicevox_core_c_api/src/lib.rs @@ -1,3 +1,7 @@ +// ここにあるRustdocはcbindgen向けのものである。safety documentation自体は書くが、Doxygenの慣習に従 +// い`
`で書く。 +#![allow(clippy::missing_safety_doc)] + mod c_impls; /// cbindgen:ignore mod compatible_engine; @@ -83,14 +87,14 @@ static RUNTIME: Lazy = Lazy::new(|| { /// 参照カウント方式のスマートポインタ(reference-counted smart pointer)であり、 /// ::voicevox_synthesizer_new_with_initialize に渡されるときには参照カウンタがインクリメントされる形でオブジェクトの共有が行われる。 /// -/// ## Example -/// +/// \example{ /// ```c /// OpenJtalkRc *open_jtalk; /// voicevox_open_jtalk_rc_new("./open_jtalk_dic_utf_8-1.11", &open_jtalk); /// // ⋮ /// voicevox_open_jtalk_rc_delete(open_jtalk); /// ``` +/// } pub struct OpenJtalkRc { open_jtalk: Arc, } @@ -104,17 +108,17 @@ pub struct OpenJtalkRc { /// /// @returns 結果コード /// -/// ## Example -/// +/// \example{ /// ```c /// OpenJtalkRc *open_jtalk; /// voicevox_open_jtalk_rc_new("./open_jtalk_dic_utf_8-1.11", &open_jtalk); /// ``` +/// } /// -/// ## Safety -/// +/// \safety{ /// - `open_jtalk_dic_dir`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 /// - `out_open_jtalk`は書き込みについて有効でなければならない。 +/// } #[no_mangle] pub unsafe extern "C" fn voicevox_open_jtalk_rc_new( open_jtalk_dic_dir: *const c_char, @@ -132,16 +136,16 @@ pub unsafe extern "C" fn voicevox_open_jtalk_rc_new( /// /// @param [in] open_jtalk デストラクト対象 /// -/// ## Example -/// +/// \example{ /// ```c /// voicevox_open_jtalk_rc_delete(open_jtalk); /// ``` +/// } /// -/// ## Safety -/// +/// \safety{ /// - `open_jtalk`は ::voicevox_open_jtalk_rc_new で得たものでなければならず、また既にこの関数で解放されていてはいけない。 /// - `open_jtalk`は以後ダングリングポインタ(_dangling pointer_)として扱われなくてはならない。 +/// } #[no_mangle] pub extern "C" fn voicevox_open_jtalk_rc_delete(open_jtalk: Box) { drop(open_jtalk); @@ -215,10 +219,10 @@ pub type VoicevoxStyleId = u32; /// /// @returns 結果コード /// -/// ## Safety -/// +/// \safety{ /// - `path`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 /// - `out_model`は書き込みについて有効でなければならない。 +/// } #[no_mangle] pub unsafe extern "C" fn voicevox_voice_model_new_from_path( path: *const c_char, @@ -240,9 +244,9 @@ pub unsafe extern "C" fn voicevox_voice_model_new_from_path( /// /// @returns 音声モデルID /// -/// ## Safety -/// +/// \safety{ /// - `model`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また ::voicevox_voice_model_delete で解放されていてはいけない。 +/// } #[no_mangle] pub extern "C" fn voicevox_voice_model_id(model: &VoicevoxVoiceModel) -> VoicevoxVoiceModelId { model.id().as_ptr() @@ -254,9 +258,9 @@ pub extern "C" fn voicevox_voice_model_id(model: &VoicevoxVoiceModel) -> Voicevo /// /// @returns メタ情報のJSON文字列 /// -/// ## Safety -/// +/// \safety{ /// - `model`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また ::voicevox_voice_model_delete で解放されていてはいけない。 +/// } #[no_mangle] pub extern "C" fn voicevox_voice_model_get_metas_json(model: &VoicevoxVoiceModel) -> *const c_char { model.metas().as_ptr() @@ -266,10 +270,10 @@ pub extern "C" fn voicevox_voice_model_get_metas_json(model: &VoicevoxVoiceModel /// /// @param [in] model 破棄する音声モデル /// -/// ## Safety -/// +/// \safety{ /// - `model`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また既にこの関数で解放されていてはいけない。 /// - `model`は以後ダングリングポインタ(_dangling pointer_)として扱われなくてはならない。 +/// } #[no_mangle] pub extern "C" fn voicevox_voice_model_delete(model: Box) { drop(model); @@ -292,10 +296,10 @@ pub struct VoicevoxSynthesizer { /// /// @returns 結果コード /// -/// ## Safety -/// +/// \safety{ /// - `open_jtalk`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また ::voicevox_open_jtalk_rc_new で解放されていてはいけない。 /// - `out_synthesizer`は書き込みについて有効でなければならない。 +/// } #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_new_with_initialize( open_jtalk: &OpenJtalkRc, @@ -319,10 +323,10 @@ pub unsafe extern "C" fn voicevox_synthesizer_new_with_initialize( /// /// @param [in] synthesizer デストラクト対象 /// -/// ## Safety -/// +/// \safety{ /// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また既にこの関数で解放されていてはいけない。 /// - `synthesizer`は以後ダングリングポインタ(_dangling pointer_)として扱われなくてはならない。 +/// } #[no_mangle] pub extern "C" fn voicevox_synthesizer_delete(synthesizer: Box) { drop(synthesizer); @@ -335,10 +339,10 @@ pub extern "C" fn voicevox_synthesizer_delete(synthesizer: Box読み込みについて有効でなければならない。 +/// } #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_unload_voice_model( synthesizer: &mut VoicevoxSynthesizer, @@ -381,9 +385,9 @@ pub unsafe extern "C" fn voicevox_synthesizer_unload_voice_model( /// /// @returns GPUモードかどうか /// -/// ## Safety -/// +/// \safety{ /// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 +/// } #[no_mangle] pub extern "C" fn voicevox_synthesizer_is_gpu_mode(synthesizer: &VoicevoxSynthesizer) -> bool { synthesizer.synthesizer().is_gpu_mode() @@ -396,10 +400,10 @@ pub extern "C" fn voicevox_synthesizer_is_gpu_mode(synthesizer: &VoicevoxSynthes /// /// @returns モデルが読み込まれているかどうか /// -/// ## Safety -/// +/// \safety{ /// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 /// - `model_id`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 +/// } #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_is_loaded_voice_model( synthesizer: &VoicevoxSynthesizer, @@ -417,9 +421,9 @@ pub unsafe extern "C" fn voicevox_synthesizer_is_loaded_voice_model( /// /// @return メタ情報のJSON文字列 /// -/// ## Safety -/// +/// \safety{ /// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 +/// } #[no_mangle] pub extern "C" fn voicevox_synthesizer_get_metas_json( synthesizer: &VoicevoxSynthesizer, @@ -437,16 +441,16 @@ pub extern "C" fn voicevox_synthesizer_get_metas_json( /// /// @returns 結果コード /// -/// ## Example -/// +/// \example{ /// ```c /// char *supported_devices; /// VoicevoxResultCode result = voicevox_create_supported_devices_json(&supported_devices); /// ``` +/// } /// -/// ## Safety -/// +/// \safety{ /// - `output_supported_devices_json`は書き込みについて有効でなければならない。 +/// } #[no_mangle] pub unsafe extern "C" fn voicevox_create_supported_devices_json( output_supported_devices_json: NonNull<*mut c_char>, @@ -486,14 +490,7 @@ pub static voicevox_default_audio_query_options: VoicevoxAudioQueryOptions = Con /// /// @returns 結果コード /// -/// ## Safety -/// -/// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 -/// - `text`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 -/// - `output_audio_query_json`は書き込みについて有効でなければならない。 -/// -/// ## Examples -/// +/// \examples{ /// ```c /// char *audio_query; /// voicevox_synthesizer_audio_query(synthesizer, @@ -511,6 +508,14 @@ pub static voicevox_default_audio_query_options: VoicevoxAudioQueryOptions = Con /// (VoicevoxAudioQueryOptions){.kana = true}, /// &audio_query); /// ``` +/// } +/// +/// +/// \safety{ +/// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 +/// - `text`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 +/// - `output_audio_query_json`は書き込みについて有効でなければならない。 +/// } #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_audio_query( synthesizer: &VoicevoxSynthesizer, @@ -560,14 +565,7 @@ pub static voicevox_default_accent_phrases_options: VoicevoxAccentPhrasesOptions /// /// @returns 結果コード /// -/// ## Safety -/// -/// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 -/// - `text`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 -/// - `output_audio_query_json`は書き込みについて有効でなければならない。 -/// -/// ## Examples -/// +/// \examples{ /// ```c /// char *accent_phrases; /// voicevox_synthesizer_create_accent_phrases( @@ -585,6 +583,13 @@ pub static voicevox_default_accent_phrases_options: VoicevoxAccentPhrasesOptions /// 2, // "四国めたん (ノーマル)" /// (VoicevoxAccentPhrasesOptions){.kana = true}, &accent_phrases); /// ``` +/// } +/// +/// \safety{ +/// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 +/// - `text`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 +/// - `output_audio_query_json`は書き込みについて有効でなければならない。 +/// } #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_create_accent_phrases( synthesizer: &VoicevoxSynthesizer, @@ -620,11 +625,11 @@ pub unsafe extern "C" fn voicevox_synthesizer_create_accent_phrases( /// /// @returns 結果コード /// -/// ## Safety -/// +/// \safety{ /// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 /// - `accent_phrases_json`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 /// - `output_audio_query_json`は書き込みについて有効でなければならない。 +/// } #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_replace_mora_data( synthesizer: &VoicevoxSynthesizer, @@ -661,11 +666,11 @@ pub unsafe extern "C" fn voicevox_synthesizer_replace_mora_data( /// /// @returns 結果コード /// -/// ## Safety -/// +/// \safety{ /// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 /// - `accent_phrases_json`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 /// - `output_audio_query_json`は書き込みについて有効でなければならない。 +/// } #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_replace_phoneme_length( synthesizer: &VoicevoxSynthesizer, @@ -702,11 +707,11 @@ pub unsafe extern "C" fn voicevox_synthesizer_replace_phoneme_length( /// /// @returns 結果コード /// -/// ## Safety -/// +/// \safety{ /// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 /// - `accent_phrases_json`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 /// - `output_audio_query_json`は書き込みについて有効でなければならない。 +/// } #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_replace_mora_pitch( synthesizer: &VoicevoxSynthesizer, @@ -756,12 +761,12 @@ pub static voicevox_default_synthesis_options: VoicevoxSynthesisOptions = ConstD /// /// @returns 結果コード /// -/// ## Safety -/// +/// \safety{ /// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 /// - `audio_query_json`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 /// - `output_wav_length`は書き込みについて有効でなければならない。 /// - `output_wav`は書き込みについて有効でなければならない。 +/// } #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_synthesis( synthesizer: &VoicevoxSynthesizer, @@ -813,12 +818,12 @@ pub static voicevox_default_tts_options: VoicevoxTtsOptions = ConstDefault::DEFA /// /// @returns 結果コード /// -/// ## Safety -/// +/// \safety{ /// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 /// - `text`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 /// - `output_wav_length`は書き込みについて有効でなければならない。 /// - `output_wav`は書き込みについて有効でなければならない。 +/// } #[no_mangle] pub unsafe extern "C" fn voicevox_synthesizer_tts( synthesizer: &VoicevoxSynthesizer, @@ -844,8 +849,7 @@ pub unsafe extern "C" fn voicevox_synthesizer_tts( /// /// @param [in] json 解放するJSON文字列 /// -/// ## Safety -/// +/// \safety{ /// - `json`は以下のAPIで得られたポインタでなくてはいけない。 /// - ::voicevox_create_supported_devices_json /// - ::voicevox_synthesizer_audio_query @@ -856,6 +860,7 @@ pub unsafe extern "C" fn voicevox_synthesizer_tts( /// - 文字列の長さは生成時より変更されていてはならない。 /// - `json`は読み込みと書き込みについて有効でなければならない。 /// - `json`は以後ダングリングポインタ(_dangling pointer_)として扱われなくてはならない。 +/// } #[no_mangle] pub unsafe extern "C" fn voicevox_json_free(json: *mut c_char) { drop(CString::from_raw(C_STRING_DROP_CHECKER.check(json))); @@ -865,13 +870,13 @@ pub unsafe extern "C" fn voicevox_json_free(json: *mut c_char) { /// /// @param [in] wav 解放するWAVデータ /// -/// ## Safety -/// +/// \safety{ /// - `wav`は以下のAPIで得られたポインタでなくてはいけない。 /// - ::voicevox_synthesizer_synthesis /// - ::voicevox_synthesizer_tts /// - `wav`は読み込みと書き込みについて有効でなければならない。 /// - `wav`は以後ダングリングポインタ(_dangling pointer_)として扱われなくてはならない。 +/// } #[no_mangle] pub extern "C" fn voicevox_wav_free(wav: *mut u8) { U8_SLICE_OWNER.drop_for(wav); @@ -883,8 +888,7 @@ pub extern "C" fn voicevox_wav_free(wav: *mut u8) { /// /// @returns 結果コードに対応したメッセージ文字列 /// -/// ## Examples -/// +/// \examples{ /// ```c /// const char *actual = voicevox_error_result_to_message(VOICEVOX_RESULT_OK); /// const char *EXPECTED = "エラーが発生しませんでした"; @@ -897,6 +901,7 @@ pub extern "C" fn voicevox_wav_free(wav: *mut u8) { /// const char *EXPECTED = "modelデータ読み込みに失敗しました"; /// assert(strcmp(actual, EXPECTED) == 0); /// ``` +/// } #[no_mangle] pub extern "C" fn voicevox_error_result_to_message( result_code: VoicevoxResultCode, diff --git a/docs/apis/c_api/doxygen/Doxyfile b/docs/apis/c_api/doxygen/Doxyfile index 62e4aafbc..d8495c6be 100644 --- a/docs/apis/c_api/doxygen/Doxyfile +++ b/docs/apis/c_api/doxygen/Doxyfile @@ -2657,3 +2657,9 @@ GENERATE_LEGEND = YES # The default value is: YES. DOT_CLEANUP = YES + +ALIASES += example{1}="
Example
\1
" +ALIASES += examples{1}="
Examples
\1
" + +# 中身は箇条書きで、素の文章からは始まらない想定 +ALIASES += safety{1}="
⚠️ Safety
安全性要件は以下の通りである。\1
" From 2355d305ecb7157fcf9d29398df4aa5c53290de1 Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sat, 22 Jul 2023 17:20:01 +0900 Subject: [PATCH 30/43] =?UTF-8?q?safety=E3=82=92=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/voicevox_core_c_api/cbindgen.toml | 10 +++++----- crates/voicevox_core_c_api/include/voicevox_core.h | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/crates/voicevox_core_c_api/cbindgen.toml b/crates/voicevox_core_c_api/cbindgen.toml index 7d9e29205..7615280f6 100644 --- a/crates/voicevox_core_c_api/cbindgen.toml +++ b/crates/voicevox_core_c_api/cbindgen.toml @@ -18,13 +18,13 @@ header = """ * requirements_)と呼び、"Safety"というセクションの下に安全性要件を示す。 * * 安全性要件の違反は[Rust言語における未定義動作(_undefined behavior_; 通称UB)]( - * https://doc.rust-lang.org/reference/behavior-considered-undefined.html)を引き起こす。 - * Rustの未定義動作は、Cのそれや[C++のそれ]( + * https://doc.rust-lang.org/reference/behavior-considered-undefined.html)を引き起こす。Rustの未定義動作は、Cのそれや[C++のそれ]( * https://cpprefjp.github.io/implementation-compliance.html#nasal-demon)や[Zigのそれ]( - * https://ziglang.org/documentation/0.10.1/#Undefined-Behavior)などとおおよそ同じである。プログラム全体のどこかに未定義動作が含まれるなら、処理系はそれについて何をしてもよいとされる。[変数は同時にtrueでもfalseでもあってもよいし]( + * https://ziglang.org/documentation/0.10.1/#Undefined-Behavior)などとおおよそ同じであり、引き起こしてはならないものとされる。プログラム全体のどこかに未定義動作が含まれるなら、一般的に、処理系はそれについて何をしてもよい。[変数は同時にtrueでもfalseでもあってもよいし]( * https://markshroyer.com/2012/06/c-both-true-and-false/)、あなたの鼻から悪魔が飛び出してもよい。このことは通称鼻から悪魔(_nasal - * demons_)と呼ばれる。「鼻から悪魔」は、このライブラリの呼び出し側も含めたプログラム全体に影響する。運が良ければセグメンテーション違反(_segmentation - * fault_)などで異常終了するだけだが、そうでない場合は挙動の予測やデバッグは困難である。ゆえに未定義動作は普通、引き起こしてはならないものとされる。 + * demons_)と呼ばれる。 + * + * 未定義動作はプログラム全体に影響する。運が良ければセグメンテーション違反などで異常終了するだけだが、ライブラリを呼び出している部分から離れた所で「鼻から悪魔」が起こることもある。そうなったら挙動の予測もデバッグも困難である。これが未定義動作が禁忌とされる所以である。 * * `voicevox_core`全体における安全性要件は以下の通りである。 * diff --git a/crates/voicevox_core_c_api/include/voicevox_core.h b/crates/voicevox_core_c_api/include/voicevox_core.h index e65a47a13..bb2c2f7c0 100644 --- a/crates/voicevox_core_c_api/include/voicevox_core.h +++ b/crates/voicevox_core_c_api/include/voicevox_core.h @@ -13,13 +13,13 @@ * requirements_)と呼び、"Safety"というセクションの下に安全性要件を示す。 * * 安全性要件の違反は[Rust言語における未定義動作(_undefined behavior_; 通称UB)]( - * https://doc.rust-lang.org/reference/behavior-considered-undefined.html)を引き起こす。 - * Rustの未定義動作は、Cのそれや[C++のそれ]( + * https://doc.rust-lang.org/reference/behavior-considered-undefined.html)を引き起こす。Rustの未定義動作は、Cのそれや[C++のそれ]( * https://cpprefjp.github.io/implementation-compliance.html#nasal-demon)や[Zigのそれ]( - * https://ziglang.org/documentation/0.10.1/#Undefined-Behavior)などとおおよそ同じである。プログラム全体のどこかに未定義動作が含まれるなら、処理系はそれについて何をしてもよいとされる。[変数は同時にtrueでもfalseでもあってもよいし]( + * https://ziglang.org/documentation/0.10.1/#Undefined-Behavior)などとおおよそ同じであり、引き起こしてはならないものとされる。プログラム全体のどこかに未定義動作が含まれるなら、一般的に、処理系はそれについて何をしてもよい。[変数は同時にtrueでもfalseでもあってもよいし]( * https://markshroyer.com/2012/06/c-both-true-and-false/)、あなたの鼻から悪魔が飛び出してもよい。このことは通称鼻から悪魔(_nasal - * demons_)と呼ばれる。「鼻から悪魔」は、このライブラリの呼び出し側も含めたプログラム全体に影響する。運が良ければセグメンテーション違反(_segmentation - * fault_)などで異常終了するだけだが、そうでない場合は挙動の予測やデバッグは困難である。ゆえに未定義動作は普通、引き起こしてはならないものとされる。 + * demons_)と呼ばれる。 + * + * 未定義動作はプログラム全体に影響する。運が良ければセグメンテーション違反などで異常終了するだけだが、ライブラリを呼び出している部分から離れた所で「鼻から悪魔」が起こることもある。そうなったら挙動の予測もデバッグも困難である。これが未定義動作が禁忌とされる所以である。 * * `voicevox_core`全体における安全性要件は以下の通りである。 * From bc0f5a299070f3c139070a10c0a0dd3f2d50ca63 Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Wed, 26 Jul 2023 02:59:59 +0900 Subject: [PATCH 31/43] =?UTF-8?q?=E8=BE=9E=E6=9B=B8API=E3=81=AB=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/voicevox_core/src/engine/open_jtalk.rs | 5 +- crates/voicevox_core/src/user_dict/dict.rs | 2 + .../src/user_dict/part_of_speech_data.rs | 20 +-- .../include/voicevox_core.h | 132 ++++++++++------- crates/voicevox_core_c_api/src/lib.rs | 136 +++++++++++------- .../python/voicevox_core/_rust.pyi | 2 +- 6 files changed, 178 insertions(+), 119 deletions(-) diff --git a/crates/voicevox_core/src/engine/open_jtalk.rs b/crates/voicevox_core/src/engine/open_jtalk.rs index 0cb07bf43..4f8d6df00 100644 --- a/crates/voicevox_core/src/engine/open_jtalk.rs +++ b/crates/voicevox_core/src/engine/open_jtalk.rs @@ -58,9 +58,10 @@ impl OpenJtalk { Ok(s) } + // 先に`load`を呼ぶ必要がある。 /// ユーザー辞書を設定する。 - /// 先に [`Self::load`] を呼ぶ必要がある。 - /// この関数を読んだ後にユーザー辞書を変更した場合は、再度この関数を呼ぶ必要がある。 + /// + /// この関数を呼び出した後にユーザー辞書を変更した場合は、再度この関数を呼ぶ必要がある。 pub fn use_user_dict(&self, user_dict: &UserDict) -> crate::result::Result<()> { let dict_dir = self .dict_dir diff --git a/crates/voicevox_core/src/user_dict/dict.rs b/crates/voicevox_core/src/user_dict/dict.rs index 380a8ac24..c923db44f 100644 --- a/crates/voicevox_core/src/user_dict/dict.rs +++ b/crates/voicevox_core/src/user_dict/dict.rs @@ -22,6 +22,8 @@ impl UserDict { /// ユーザー辞書をファイルから読み込む。 /// + /// # Errors + /// /// ファイルが読めなかった、または内容が不正だった場合はエラーを返す。 pub fn load(&mut self, store_path: &str) -> Result<()> { let store_path = std::path::Path::new(store_path); diff --git a/crates/voicevox_core/src/user_dict/part_of_speech_data.rs b/crates/voicevox_core/src/user_dict/part_of_speech_data.rs index 712cef885..76e36e389 100644 --- a/crates/voicevox_core/src/user_dict/part_of_speech_data.rs +++ b/crates/voicevox_core/src/user_dict/part_of_speech_data.rs @@ -4,29 +4,29 @@ use std::collections::HashMap; use crate::UserDictWordType; -/// 最小の優先度 +/// 最小の優先度。 pub static MIN_PRIORITY: u32 = 0; -/// 最大の優先度 +/// 最大の優先度。 pub static MAX_PRIORITY: u32 = 10; -/// 品詞ごとの情報 +/// 品詞ごとの情報。 #[derive(Debug, Getters)] pub struct PartOfSpeechDetail { - /// 品詞 + /// 品詞。 pub part_of_speech: &'static str, - /// 品詞細分類1 + /// 品詞細分類1。 pub part_of_speech_detail_1: &'static str, - /// 品詞細分類2 + /// 品詞細分類2。 pub part_of_speech_detail_2: &'static str, - /// 品詞細分類3 + /// 品詞細分類3。 pub part_of_speech_detail_3: &'static str, - /// 文脈IDは辞書の左・右文脈IDのこと + /// 文脈IDは辞書の左・右文脈IDのこと。 /// /// 参考: pub context_id: i32, - /// コストのパーセンタイル + /// コストのパーセンタイル。 pub cost_candidates: Vec, - /// アクセント結合規則の一覧 + /// アクセント結合規則の一覧。 pub accent_associative_rules: Vec<&'static str>, } diff --git a/crates/voicevox_core_c_api/include/voicevox_core.h b/crates/voicevox_core_c_api/include/voicevox_core.h index 48bc61611..35227b87d 100644 --- a/crates/voicevox_core_c_api/include/voicevox_core.h +++ b/crates/voicevox_core_c_api/include/voicevox_core.h @@ -188,7 +188,7 @@ typedef int32_t VoicevoxResultCode; #endif // __cplusplus /** - * ユーザー辞書の単語の種類 + * ユーザー辞書の単語の種類。 */ enum VoicevoxUserDictWordType #ifdef __cplusplus @@ -247,7 +247,7 @@ typedef struct OpenJtalkRc OpenJtalkRc; typedef struct VoicevoxSynthesizer VoicevoxSynthesizer; /** - * ユーザー辞書 + * ユーザー辞書。 */ typedef struct VoicevoxUserDict VoicevoxUserDict; @@ -334,7 +334,7 @@ typedef struct VoicevoxTtsOptions { } VoicevoxTtsOptions; /** - * ユーザー辞書の単語 + * ユーザー辞書の単語。 */ typedef struct VoicevoxUserDictWord { /** @@ -404,14 +404,17 @@ VoicevoxResultCode voicevox_open_jtalk_rc_new(const char *open_jtalk_dic_dir, struct OpenJtalkRc **out_open_jtalk); /** - * OpenJtalkの使うユーザー辞書を設定する + * OpenJtalkの使うユーザー辞書を設定する。 + * * この関数を呼び出した後にユーザー辞書を変更した場合、再度この関数を呼び出す必要がある。 - * @param [in] open_jtalk 参照カウントで管理されたOpenJtalk + * + * @param [in] open_jtalk Open JTalkのオブジェクト * @param [in] user_dict ユーザー辞書 * - * # Safety - * @open_jtalk 有効な :OpenJtalkRc のポインタであること - * @user_dict 有効な :VoicevoxUserDict のポインタであること + * \safety{ + * - `open_jtalk`は ::voicevox_open_jtalk_rc_new で得たものでなければならず、また ::voicevox_open_jtalk_rc_delete で解放されていてはいけない。 + * - `user_dict`は ::voicevox_user_dict_new で得たものでなければならず、また ::voicevox_user_dict_delete で解放されていてはいけない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -964,13 +967,11 @@ __declspec(dllimport) const char *voicevox_error_result_to_message(VoicevoxResultCode result_code); /** - * VoicevoxUserDictWordを最低限のパラメータで作成する。 + * ::VoicevoxUserDictWord を最低限のパラメータで作成する。 + * * @param [in] surface 表記 * @param [in] pronunciation 読み - * @return VoicevoxUserDictWord - * - * # Safety - * @param surface, pronunciation は有効な文字列へのポインタであること + * @returns ::VoicevoxUserDictWord */ #ifdef _WIN32 __declspec(dllimport) @@ -979,11 +980,9 @@ struct VoicevoxUserDictWord voicevox_user_dict_word_make(const char *surface, const char *pronunciation); /** - * ユーザー辞書を作成する - * @return VoicevoxUserDict + * ユーザー辞書を作成する。 * - * # Safety - * @return 自動で解放されることはないので、呼び出し側で :voicevox_user_dict_delete で解放する必要がある + * @returns ::VoicevoxUserDict */ #ifdef _WIN32 __declspec(dllimport) @@ -991,14 +990,16 @@ __declspec(dllimport) struct VoicevoxUserDict *voicevox_user_dict_new(void); /** - * ユーザー辞書にファイルを読み込ませる - * @param [in] user_dict VoicevoxUserDictのポインタ + * ユーザー辞書にファイルを読み込ませる。 + * + * @param [in] user_dict ユーザー辞書 * @param [in] dict_path 読み込む辞書ファイルのパス - * @return 結果コード #VoicevoxResultCode + * @returns 結果コード * - * # Safety - * @param user_dict は有効な :VoicevoxUserDict のポインタであること - * @param dict_path パスが有効な文字列を指していること + * \safety{ + * - `user_dict`は ::voicevox_user_dict_new で得たものでなければならず、また ::voicevox_user_dict_delete で解放されていてはいけない。 + * - `dict_path`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -1007,15 +1008,21 @@ VoicevoxResultCode voicevox_user_dict_load(const struct VoicevoxUserDict *user_d const char *dict_path); /** - * ユーザー辞書に単語を追加する - * @param [in] user_dict VoicevoxUserDictのポインタ + * ユーザー辞書に単語を追加する。 + * + * @param [in] ユーザー辞書 * @param [in] word 追加する単語 * @param [out] output_word_uuid 追加した単語のUUID - * @return 結果コード #VoicevoxResultCode + * @returns 結果コード * * # Safety * @param user_dict は有効な :VoicevoxUserDict のポインタであること * + * \safety{ + * - `user_dict`は ::voicevox_user_dict_new で得たものでなければならず、また ::voicevox_user_dict_delete で解放されていてはいけない。 + * - `word->surface`と`word->pronunciation`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 + * - `output_word_uuid`は書き込みについて有効でなければならない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -1025,14 +1032,18 @@ VoicevoxResultCode voicevox_user_dict_add_word(const struct VoicevoxUserDict *us uint8_t (*output_word_uuid)[16]); /** - * ユーザー辞書の単語を更新する - * @param [in] user_dict VoicevoxUserDictのポインタ + * ユーザー辞書の単語を更新する。 + * + * @param [in] user_dict ユーザー辞書 * @param [in] word_uuid 更新する単語のUUID * @param [in] word 新しい単語のデータ - * @return 結果コード #VoicevoxResultCode + * @returns 結果コード * - * # Safety - * @param user_dict は有効な :VoicevoxUserDict のポインタであること + * \safety{ + * - `user_dict`は ::voicevox_user_dict_new で得たものでなければならず、また ::voicevox_user_dict_delete で解放されていてはいけない。 + * - `word_uuid`は読み込みについて有効でなければならない。 + * - `word->surface`と`word->pronunciation`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -1042,10 +1053,16 @@ VoicevoxResultCode voicevox_user_dict_update_word(const struct VoicevoxUserDict const struct VoicevoxUserDictWord *word); /** - * ユーザー辞書から単語を削除する - * @param [in] user_dict VoicevoxUserDictのポインタ + * ユーザー辞書から単語を削除する。 + * + * @param [in] user_dict ユーザー辞書 * @param [in] word_uuid 削除する単語のUUID - * @return 結果コード #VoicevoxResultCode + * @returns 結果コード + * + * \safety{ + * - `user_dict`は ::voicevox_user_dict_new で得たものでなければならず、また ::voicevox_user_dict_delete で解放されていてはいけない。 + * - `word_uuid`は読み込みについて有効でなければならない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -1054,14 +1071,16 @@ VoicevoxResultCode voicevox_user_dict_remove_word(const struct VoicevoxUserDict const uint8_t (*word_uuid)[16]); /** - * ユーザー辞書の単語をJSON形式で出力する - * @param [in] user_dict VoicevoxUserDictのポインタ - * @param [out] output_json JSON形式の文字列 - * @return 結果コード #VoicevoxResultCode + * ユーザー辞書の単語をJSON形式で出力する。 * - * # Safety - * @param user_dict は有効な :VoicevoxUserDict のポインタであること - * @param output_json 自動でheapメモリが割り当てられるので ::voicevox_json_free で解放する必要がある + * @param [in] user_dict ユーザー辞書 + * @param [out] output_json 出力先 + * @returns 結果コード + * + * \safety{ + * - `user_dict`は ::voicevox_user_dict_new で得たものでなければならず、また ::voicevox_user_dict_delete で解放されていてはいけない。 + * - `output_json`は書き込みについて有効でなければならない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -1070,10 +1089,15 @@ VoicevoxResultCode voicevox_user_dict_to_json(const struct VoicevoxUserDict *use char **output_json); /** - * 他のユーザー辞書をインポートする - * @param [in] user_dict VoicevoxUserDictのポインタ + * 他のユーザー辞書をインポートする。 + * + * @param [in] user_dict ユーザー辞書 * @param [in] other_dict インポートするユーザー辞書 - * @return 結果コード #VoicevoxResultCode + * @returns 結果コード + * + * \safety{ + * - `user_dict`と`other_dict`は ::voicevox_user_dict_new で得たものでなければならず、また ::voicevox_user_dict_delete で解放されていてはいけない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -1082,13 +1106,15 @@ VoicevoxResultCode voicevox_user_dict_import(const struct VoicevoxUserDict *user const struct VoicevoxUserDict *other_dict); /** - * ユーザー辞書をファイルに保存する - * @param [in] user_dict VoicevoxUserDictのポインタ + * ユーザー辞書をファイルに保存する。 + * + * @param [in] user_dict ユーザー辞書 * @param [in] path 保存先のファイルパス * - * # Safety - * @param user_dict は有効な :VoicevoxUserDict のポインタであること - * @param path は有効なUTF-8文字列であること + * \safety{ + * - `user_dict`は ::voicevox_user_dict_new で得たものでなければならず、また ::voicevox_user_dict_delete で解放されていてはいけない。 + * - `path`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 + * } */ #ifdef _WIN32 __declspec(dllimport) @@ -1098,10 +1124,12 @@ VoicevoxResultCode voicevox_user_dict_save(const struct VoicevoxUserDict *user_d /** * ユーザー辞書を廃棄する。 - * @param [in] user_dict VoicevoxUserDictのポインタ * - * # Safety - * @param user_dict は有効な :VoicevoxUserDict のポインタであること + * @param [in] user_dict ユーザー辞書 + * + * \safety{ + * - `user_dict`は ::voicevox_user_dict_new で得たものでなければならず、また既にこの関数で解放されていてはいけない。 + * } */ #ifdef _WIN32 __declspec(dllimport) diff --git a/crates/voicevox_core_c_api/src/lib.rs b/crates/voicevox_core_c_api/src/lib.rs index d062bd8b0..8dbea64c4 100644 --- a/crates/voicevox_core_c_api/src/lib.rs +++ b/crates/voicevox_core_c_api/src/lib.rs @@ -133,14 +133,17 @@ pub unsafe extern "C" fn voicevox_open_jtalk_rc_new( })()) } -/// OpenJtalkの使うユーザー辞書を設定する +/// OpenJtalkの使うユーザー辞書を設定する。 +/// /// この関数を呼び出した後にユーザー辞書を変更した場合、再度この関数を呼び出す必要がある。 -/// @param [in] open_jtalk 参照カウントで管理されたOpenJtalk +/// +/// @param [in] open_jtalk Open JTalkのオブジェクト /// @param [in] user_dict ユーザー辞書 /// -/// # Safety -/// @open_jtalk 有効な :OpenJtalkRc のポインタであること -/// @user_dict 有効な :VoicevoxUserDict のポインタであること +/// \safety{ +/// - `open_jtalk`は ::voicevox_open_jtalk_rc_new で得たものでなければならず、また ::voicevox_open_jtalk_rc_delete で解放されていてはいけない。 +/// - `user_dict`は ::voicevox_user_dict_new で得たものでなければならず、また ::voicevox_user_dict_delete で解放されていてはいけない。 +/// } #[no_mangle] pub extern "C" fn voicevox_open_jtalk_rc_use_user_dict( open_jtalk: &OpenJtalkRc, @@ -938,13 +941,13 @@ pub extern "C" fn voicevox_error_result_to_message( C_STRING_DROP_CHECKER.blacklist(message).as_ptr() } -/// ユーザー辞書 +/// ユーザー辞書。 #[derive(Default)] pub struct VoicevoxUserDict { dict: Arc>, } -/// ユーザー辞書の単語 +/// ユーザー辞書の単語。 #[repr(C)] pub struct VoicevoxUserDictWord { /// 表記 @@ -959,7 +962,7 @@ pub struct VoicevoxUserDictWord { priority: u32, } -/// ユーザー辞書の単語の種類 +/// ユーザー辞書の単語の種類。 #[repr(i32)] #[allow(non_camel_case_types)] #[derive(Copy, Clone)] @@ -976,13 +979,11 @@ pub enum VoicevoxUserDictWordType { VOICEVOX_USER_DICT_WORD_TYPE_SUFFIX = 4, } -/// VoicevoxUserDictWordを最低限のパラメータで作成する。 +/// ::VoicevoxUserDictWord を最低限のパラメータで作成する。 +/// /// @param [in] surface 表記 /// @param [in] pronunciation 読み -/// @return VoicevoxUserDictWord -/// -/// # Safety -/// @param surface, pronunciation は有効な文字列へのポインタであること +/// @returns ::VoicevoxUserDictWord #[no_mangle] pub extern "C" fn voicevox_user_dict_word_make( surface: *const c_char, @@ -997,24 +998,24 @@ pub extern "C" fn voicevox_user_dict_word_make( } } -/// ユーザー辞書を作成する -/// @return VoicevoxUserDict +/// ユーザー辞書を作成する。 /// -/// # Safety -/// @return 自動で解放されることはないので、呼び出し側で :voicevox_user_dict_delete で解放する必要がある +/// @returns ::VoicevoxUserDict #[no_mangle] pub extern "C" fn voicevox_user_dict_new() -> Box { Default::default() } -/// ユーザー辞書にファイルを読み込ませる -/// @param [in] user_dict VoicevoxUserDictのポインタ +/// ユーザー辞書にファイルを読み込ませる。 +/// +/// @param [in] user_dict ユーザー辞書 /// @param [in] dict_path 読み込む辞書ファイルのパス -/// @return 結果コード #VoicevoxResultCode +/// @returns 結果コード /// -/// # Safety -/// @param user_dict は有効な :VoicevoxUserDict のポインタであること -/// @param dict_path パスが有効な文字列を指していること +/// \safety{ +/// - `user_dict`は ::voicevox_user_dict_new で得たものでなければならず、また ::voicevox_user_dict_delete で解放されていてはいけない。 +/// - `dict_path`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 +/// } #[no_mangle] pub unsafe extern "C" fn voicevox_user_dict_load( user_dict: &VoicevoxUserDict, @@ -1029,19 +1030,25 @@ pub unsafe extern "C" fn voicevox_user_dict_load( })()) } -/// ユーザー辞書に単語を追加する -/// @param [in] user_dict VoicevoxUserDictのポインタ +/// ユーザー辞書に単語を追加する。 +/// +/// @param [in] ユーザー辞書 /// @param [in] word 追加する単語 /// @param [out] output_word_uuid 追加した単語のUUID -/// @return 結果コード #VoicevoxResultCode +/// @returns 結果コード /// /// # Safety /// @param user_dict は有効な :VoicevoxUserDict のポインタであること /// +/// \safety{ +/// - `user_dict`は ::voicevox_user_dict_new で得たものでなければならず、また ::voicevox_user_dict_delete で解放されていてはいけない。 +/// - `word->surface`と`word->pronunciation`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 +/// - `output_word_uuid`は書き込みについて有効でなければならない。 +/// } #[no_mangle] pub unsafe extern "C" fn voicevox_user_dict_add_word( user_dict: &VoicevoxUserDict, - word: &VoicevoxUserDictWord, + word: &VoicevoxUserDictWord, // FIXME: に従う output_word_uuid: NonNull<[u8; 16]>, ) -> VoicevoxResultCode { into_result_code_with_error((|| { @@ -1056,19 +1063,23 @@ pub unsafe extern "C" fn voicevox_user_dict_add_word( })()) } -/// ユーザー辞書の単語を更新する -/// @param [in] user_dict VoicevoxUserDictのポインタ +/// ユーザー辞書の単語を更新する。 +/// +/// @param [in] user_dict ユーザー辞書 /// @param [in] word_uuid 更新する単語のUUID /// @param [in] word 新しい単語のデータ -/// @return 結果コード #VoicevoxResultCode +/// @returns 結果コード /// -/// # Safety -/// @param user_dict は有効な :VoicevoxUserDict のポインタであること +/// \safety{ +/// - `user_dict`は ::voicevox_user_dict_new で得たものでなければならず、また ::voicevox_user_dict_delete で解放されていてはいけない。 +/// - `word_uuid`は読み込みについて有効でなければならない。 +/// - `word->surface`と`word->pronunciation`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 +/// } #[no_mangle] pub unsafe extern "C" fn voicevox_user_dict_update_word( user_dict: &VoicevoxUserDict, word_uuid: &[u8; 16], - word: &VoicevoxUserDictWord, + word: &VoicevoxUserDictWord, // FIXME: に従う ) -> VoicevoxResultCode { into_result_code_with_error((|| { let word_uuid = Uuid::from_slice(word_uuid).map_err(CApiError::InvalidUuid)?; @@ -1082,10 +1093,16 @@ pub unsafe extern "C" fn voicevox_user_dict_update_word( })()) } -/// ユーザー辞書から単語を削除する -/// @param [in] user_dict VoicevoxUserDictのポインタ +/// ユーザー辞書から単語を削除する。 +/// +/// @param [in] user_dict ユーザー辞書 /// @param [in] word_uuid 削除する単語のUUID -/// @return 結果コード #VoicevoxResultCode +/// @returns 結果コード +/// +/// \safety{ +/// - `user_dict`は ::voicevox_user_dict_new で得たものでなければならず、また ::voicevox_user_dict_delete で解放されていてはいけない。 +/// - `word_uuid`は読み込みについて有効でなければならない。 +/// } #[no_mangle] pub extern "C" fn voicevox_user_dict_remove_word( user_dict: &VoicevoxUserDict, @@ -1102,14 +1119,16 @@ pub extern "C" fn voicevox_user_dict_remove_word( })()) } -/// ユーザー辞書の単語をJSON形式で出力する -/// @param [in] user_dict VoicevoxUserDictのポインタ -/// @param [out] output_json JSON形式の文字列 -/// @return 結果コード #VoicevoxResultCode +/// ユーザー辞書の単語をJSON形式で出力する。 /// -/// # Safety -/// @param user_dict は有効な :VoicevoxUserDict のポインタであること -/// @param output_json 自動でheapメモリが割り当てられるので ::voicevox_json_free で解放する必要がある +/// @param [in] user_dict ユーザー辞書 +/// @param [out] output_json 出力先 +/// @returns 結果コード +/// +/// \safety{ +/// - `user_dict`は ::voicevox_user_dict_new で得たものでなければならず、また ::voicevox_user_dict_delete で解放されていてはいけない。 +/// - `output_json`は書き込みについて有効でなければならない。 +/// } #[no_mangle] pub unsafe extern "C" fn voicevox_user_dict_to_json( user_dict: &VoicevoxUserDict, @@ -1124,10 +1143,15 @@ pub unsafe extern "C" fn voicevox_user_dict_to_json( VoicevoxResultCode::VOICEVOX_RESULT_OK } -/// 他のユーザー辞書をインポートする -/// @param [in] user_dict VoicevoxUserDictのポインタ +/// 他のユーザー辞書をインポートする。 +/// +/// @param [in] user_dict ユーザー辞書 /// @param [in] other_dict インポートするユーザー辞書 -/// @return 結果コード #VoicevoxResultCode +/// @returns 結果コード +/// +/// \safety{ +/// - `user_dict`と`other_dict`は ::voicevox_user_dict_new で得たものでなければならず、また ::voicevox_user_dict_delete で解放されていてはいけない。 +/// } #[no_mangle] pub extern "C" fn voicevox_user_dict_import( user_dict: &VoicevoxUserDict, @@ -1144,13 +1168,15 @@ pub extern "C" fn voicevox_user_dict_import( })()) } -/// ユーザー辞書をファイルに保存する -/// @param [in] user_dict VoicevoxUserDictのポインタ +/// ユーザー辞書をファイルに保存する。 +/// +/// @param [in] user_dict ユーザー辞書 /// @param [in] path 保存先のファイルパス /// -/// # Safety -/// @param user_dict は有効な :VoicevoxUserDict のポインタであること -/// @param path は有効なUTF-8文字列であること +/// \safety{ +/// - `user_dict`は ::voicevox_user_dict_new で得たものでなければならず、また ::voicevox_user_dict_delete で解放されていてはいけない。 +/// - `path`はヌル終端文字列を指し、かつ読み込みについて有効でなければならない。 +/// } #[no_mangle] pub unsafe extern "C" fn voicevox_user_dict_save( user_dict: &VoicevoxUserDict, @@ -1168,10 +1194,12 @@ pub unsafe extern "C" fn voicevox_user_dict_save( } /// ユーザー辞書を廃棄する。 -/// @param [in] user_dict VoicevoxUserDictのポインタ /// -/// # Safety -/// @param user_dict は有効な :VoicevoxUserDict のポインタであること +/// @param [in] user_dict ユーザー辞書 +/// +/// \safety{ +/// - `user_dict`は ::voicevox_user_dict_new で得たものでなければならず、また既にこの関数で解放されていてはいけない。 +/// } #[no_mangle] pub unsafe extern "C" fn voicevox_user_dict_delete(user_dict: Box) { drop(user_dict); diff --git a/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi b/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi index 2a8ee5f4a..f5efe85de 100644 --- a/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi +++ b/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi @@ -59,7 +59,7 @@ class OpenJtalk: def use_user_dict(self, user_dict: UserDict) -> None: """ユーザー辞書を設定する。 - この関数を読んだ後にユーザー辞書を変更した場合は、再度この関数を呼ぶ必要がある。 + この関数を呼び出した後にユーザー辞書を変更した場合は、再度この関数を呼ぶ必要がある。 Parameters ---------- From 5bf35f4247d8478d1e204a32e9d23c5945bd66dc Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Wed, 26 Jul 2023 03:22:01 +0900 Subject: [PATCH 32/43] =?UTF-8?q?"=E6=A7=8B=E7=AF=89"/"=E7=A0=B4=E6=A3=84"?= =?UTF-8?q?=E3=81=A7=E7=B5=B1=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../include/voicevox_core.h | 36 +++++++++---------- crates/voicevox_core_c_api/src/lib.rs | 36 +++++++++---------- 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/crates/voicevox_core_c_api/include/voicevox_core.h b/crates/voicevox_core_c_api/include/voicevox_core.h index 35227b87d..dcf6b47a1 100644 --- a/crates/voicevox_core_c_api/include/voicevox_core.h +++ b/crates/voicevox_core_c_api/include/voicevox_core.h @@ -223,7 +223,7 @@ typedef int32_t VoicevoxUserDictWordType; /** * テキスト解析器としてのOpen JTalk。 * - * コンストラクトは ::voicevox_open_jtalk_rc_new で行い、デストラクトは ::voicevox_open_jtalk_rc_delete で行う。 + * 構築(_construction_)は ::voicevox_open_jtalk_rc_new で行い、破棄(_destruction_)は ::voicevox_open_jtalk_rc_delete で行う。 * * 参照カウント方式のスマートポインタ(reference-counted smart pointer)であり、 * ::voicevox_synthesizer_new_with_initialize に渡されるときには参照カウンタがインクリメントされる形でオブジェクトの共有が行われる。 @@ -242,7 +242,7 @@ typedef struct OpenJtalkRc OpenJtalkRc; /** * 音声シンセサイザ。 * - * コンストラクトは ::voicevox_synthesizer_new_with_initialize で行い、デストラクトは ::voicevox_synthesizer_delete で行う。 + * 構築(_construction_)は ::voicevox_synthesizer_new_with_initialize で行い、破棄(_destruction_)は ::voicevox_synthesizer_delete で行う。 */ typedef struct VoicevoxSynthesizer VoicevoxSynthesizer; @@ -254,7 +254,7 @@ typedef struct VoicevoxUserDict VoicevoxUserDict; /** * 音声モデル。 * - * コンストラクトは ::voicevox_voice_model_new_from_path で行い、デストラクトは ::voicevox_voice_model_delete で行う。 + * 構築(_construction_)は ::voicevox_voice_model_new_from_path で行い、破棄(_destruction_)は ::voicevox_voice_model_delete で行う。 */ typedef struct VoicevoxVoiceModel VoicevoxVoiceModel; @@ -376,12 +376,12 @@ extern const struct VoicevoxSynthesisOptions voicevox_default_synthesis_options; extern const struct VoicevoxTtsOptions voicevox_default_tts_options; /** - * ::OpenJtalkRc をコンストラクトする。 + * ::OpenJtalkRc を構築(_construct_)する。 * * 解放は ::voicevox_open_jtalk_rc_delete で行う。 * * @param [in] open_jtalk_dic_dir 辞書ディレクトリを指すUTF-8のパス - * @param [out] out_open_jtalk 生成先 + * @param [out] out_open_jtalk 構築先 * * @returns 結果コード * @@ -423,9 +423,9 @@ VoicevoxResultCode voicevox_open_jtalk_rc_use_user_dict(const struct OpenJtalkRc const struct VoicevoxUserDict *user_dict); /** - * ::OpenJtalkRc をデストラクトする。 + * ::OpenJtalkRc を破棄(_destruct_)する。 * - * @param [in] open_jtalk デストラクト対象 + * @param [in] open_jtalk 破棄対象 * * \example{ * ```c @@ -444,10 +444,10 @@ __declspec(dllimport) void voicevox_open_jtalk_rc_delete(struct OpenJtalkRc *open_jtalk); /** - * VVMファイルから ::VoicevoxVoiceModel をコンストラクトする。 + * VVMファイルから ::VoicevoxVoiceModel を構築(_construct_)する。 * * @param [in] path vvmファイルへのUTF-8のファイルパス - * @param [out] out_model 生成先 + * @param [out] out_model 構築先 * * @returns 結果コード * @@ -495,9 +495,9 @@ __declspec(dllimport) const char *voicevox_voice_model_get_metas_json(const struct VoicevoxVoiceModel *model); /** - * ::VoicevoxVoiceModel をデストラクトする。 + * ::VoicevoxVoiceModel を破棄(_destruct_)する。 * - * @param [in] model 破棄する音声モデル + * @param [in] model 破棄対象 * * \safety{ * - `model`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また既にこの関数で解放されていてはいけない。 @@ -510,11 +510,11 @@ __declspec(dllimport) void voicevox_voice_model_delete(struct VoicevoxVoiceModel *model); /** - * ::VoicevoxSynthesizer をコンストラクトする。 + * ::VoicevoxSynthesizer を構築(_construct_)する。 * * @param [in] open_jtalk Open JTalkのオブジェクト * @param [in] options オプション - * @param [out] out_synthesizer 生成先 + * @param [out] out_synthesizer 構築先 * * @returns 結果コード * @@ -531,9 +531,9 @@ VoicevoxResultCode voicevox_synthesizer_new_with_initialize(const struct OpenJta struct VoicevoxSynthesizer **out_synthesizer); /** - * ::VoicevoxSynthesizer をデストラクトする。 + * ::VoicevoxSynthesizer を破棄(_destruct_)する。 * - * @param [in] synthesizer デストラクト対象 + * @param [in] synthesizer 破棄対象 * * \safety{ * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また既にこの関数で解放されていてはいけない。 @@ -980,7 +980,7 @@ struct VoicevoxUserDictWord voicevox_user_dict_word_make(const char *surface, const char *pronunciation); /** - * ユーザー辞書を作成する。 + * ユーザー辞書をb>構築(_construct_)する。 * * @returns ::VoicevoxUserDict */ @@ -1123,9 +1123,9 @@ VoicevoxResultCode voicevox_user_dict_save(const struct VoicevoxUserDict *user_d const char *path); /** - * ユーザー辞書を廃棄する。 + * ユーザー辞書を破棄(_destruct_)する。 * - * @param [in] user_dict ユーザー辞書 + * @param [in] user_dict 破棄対象 * * \safety{ * - `user_dict`は ::voicevox_user_dict_new で得たものでなければならず、また既にこの関数で解放されていてはいけない。 diff --git a/crates/voicevox_core_c_api/src/lib.rs b/crates/voicevox_core_c_api/src/lib.rs index 8dbea64c4..502b5c25a 100644 --- a/crates/voicevox_core_c_api/src/lib.rs +++ b/crates/voicevox_core_c_api/src/lib.rs @@ -83,7 +83,7 @@ static RUNTIME: Lazy = Lazy::new(|| { /// テキスト解析器としてのOpen JTalk。 /// -/// コンストラクトは ::voicevox_open_jtalk_rc_new で行い、デストラクトは ::voicevox_open_jtalk_rc_delete で行う。 +/// 構築(_construction_)は ::voicevox_open_jtalk_rc_new で行い、破棄(_destruction_)は ::voicevox_open_jtalk_rc_delete で行う。 /// /// 参照カウント方式のスマートポインタ(reference-counted smart pointer)であり、 /// ::voicevox_synthesizer_new_with_initialize に渡されるときには参照カウンタがインクリメントされる形でオブジェクトの共有が行われる。 @@ -100,12 +100,12 @@ pub struct OpenJtalkRc { open_jtalk: Arc, } -/// ::OpenJtalkRc をコンストラクトする。 +/// ::OpenJtalkRc を構築(_construct_)する。 /// /// 解放は ::voicevox_open_jtalk_rc_delete で行う。 /// /// @param [in] open_jtalk_dic_dir 辞書ディレクトリを指すUTF-8のパス -/// @param [out] out_open_jtalk 生成先 +/// @param [out] out_open_jtalk 構築先 /// /// @returns 結果コード /// @@ -159,9 +159,9 @@ pub extern "C" fn voicevox_open_jtalk_rc_use_user_dict( })()) } -/// ::OpenJtalkRc をデストラクトする。 +/// ::OpenJtalkRc を破棄(_destruct_)する。 /// -/// @param [in] open_jtalk デストラクト対象 +/// @param [in] open_jtalk 破棄対象 /// /// \example{ /// ```c @@ -223,7 +223,7 @@ pub static voicevox_version: &c_char = { /// 音声モデル。 /// -/// コンストラクトは ::voicevox_voice_model_new_from_path で行い、デストラクトは ::voicevox_voice_model_delete で行う。 +/// 構築(_construction_)は ::voicevox_voice_model_new_from_path で行い、破棄(_destruction_)は ::voicevox_voice_model_delete で行う。 #[derive(Getters)] pub struct VoicevoxVoiceModel { model: VoiceModel, @@ -239,10 +239,10 @@ pub type VoicevoxVoiceModelId = *const c_char; /// VOICEVOXにおける、ある話者(_speaker_)のあるスタイル(_style_)を指す。 pub type VoicevoxStyleId = u32; -/// VVMファイルから ::VoicevoxVoiceModel をコンストラクトする。 +/// VVMファイルから ::VoicevoxVoiceModel を構築(_construct_)する。 /// /// @param [in] path vvmファイルへのUTF-8のファイルパス -/// @param [out] out_model 生成先 +/// @param [out] out_model 構築先 /// /// @returns 結果コード /// @@ -293,9 +293,9 @@ pub extern "C" fn voicevox_voice_model_get_metas_json(model: &VoicevoxVoiceModel model.metas().as_ptr() } -/// ::VoicevoxVoiceModel をデストラクトする。 +/// ::VoicevoxVoiceModel を破棄(_destruct_)する。 /// -/// @param [in] model 破棄する音声モデル +/// @param [in] model 破棄対象 /// /// \safety{ /// - `model`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また既にこの関数で解放されていてはいけない。 @@ -308,18 +308,18 @@ pub extern "C" fn voicevox_voice_model_delete(model: Box) { /// 音声シンセサイザ。 /// -/// コンストラクトは ::voicevox_synthesizer_new_with_initialize で行い、デストラクトは ::voicevox_synthesizer_delete で行う。 +/// 構築(_construction_)は ::voicevox_synthesizer_new_with_initialize で行い、破棄(_destruction_)は ::voicevox_synthesizer_delete で行う。 #[derive(Getters)] pub struct VoicevoxSynthesizer { synthesizer: Synthesizer, metas_cstring: CString, } -/// ::VoicevoxSynthesizer をコンストラクトする。 +/// ::VoicevoxSynthesizer を構築(_construct_)する。 /// /// @param [in] open_jtalk Open JTalkのオブジェクト /// @param [in] options オプション -/// @param [out] out_synthesizer 生成先 +/// @param [out] out_synthesizer 構築先 /// /// @returns 結果コード /// @@ -346,9 +346,9 @@ pub unsafe extern "C" fn voicevox_synthesizer_new_with_initialize( })()) } -/// ::VoicevoxSynthesizer をデストラクトする。 +/// ::VoicevoxSynthesizer を破棄(_destruct_)する。 /// -/// @param [in] synthesizer デストラクト対象 +/// @param [in] synthesizer 破棄対象 /// /// \safety{ /// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また既にこの関数で解放されていてはいけない。 @@ -998,7 +998,7 @@ pub extern "C" fn voicevox_user_dict_word_make( } } -/// ユーザー辞書を作成する。 +/// ユーザー辞書をb>構築(_construct_)する。 /// /// @returns ::VoicevoxUserDict #[no_mangle] @@ -1193,9 +1193,9 @@ pub unsafe extern "C" fn voicevox_user_dict_save( })()) } -/// ユーザー辞書を廃棄する。 +/// ユーザー辞書を破棄(_destruct_)する。 /// -/// @param [in] user_dict ユーザー辞書 +/// @param [in] user_dict 破棄対象 /// /// \safety{ /// - `user_dict`は ::voicevox_user_dict_new で得たものでなければならず、また既にこの関数で解放されていてはいけない。 From b33bcb503a65b4452fd5b776c169b38c6d2eda57 Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Wed, 26 Jul 2023 05:07:45 +0900 Subject: [PATCH 33/43] =?UTF-8?q?`get=5Fmetas=5Fjson`=E3=81=AEsafety=20doc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/voicevox_core_c_api/src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/voicevox_core_c_api/src/lib.rs b/crates/voicevox_core_c_api/src/lib.rs index 502b5c25a..93e4a5e0e 100644 --- a/crates/voicevox_core_c_api/src/lib.rs +++ b/crates/voicevox_core_c_api/src/lib.rs @@ -287,6 +287,7 @@ pub extern "C" fn voicevox_voice_model_id(model: &VoicevoxVoiceModel) -> Voicevo /// /// \safety{ /// - `model`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また ::voicevox_voice_model_delete で解放されていてはいけない。 +/// - 戻り値の文字列は`model`の生存期間(_lifetime_)を越えてアクセスされてはならない。 /// } #[no_mangle] pub extern "C" fn voicevox_voice_model_get_metas_json(model: &VoicevoxVoiceModel) -> *const c_char { From a35750bac6621cd86f1c2d4d911bf8b1c955c731 Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Thu, 27 Jul 2023 01:38:50 +0900 Subject: [PATCH 34/43] `cargo xtask update-c-header` --- crates/voicevox_core_c_api/include/voicevox_core.h | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/voicevox_core_c_api/include/voicevox_core.h b/crates/voicevox_core_c_api/include/voicevox_core.h index dcf6b47a1..c17789dee 100644 --- a/crates/voicevox_core_c_api/include/voicevox_core.h +++ b/crates/voicevox_core_c_api/include/voicevox_core.h @@ -487,6 +487,7 @@ VoicevoxVoiceModelId voicevox_voice_model_id(const struct VoicevoxVoiceModel *mo * * \safety{ * - `model`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また ::voicevox_voice_model_delete で解放されていてはいけない。 + * - 戻り値の文字列は`model`の生存期間(_lifetime_)を越えてアクセスされてはならない。 * } */ #ifdef _WIN32 From f8b8c9dde215f79440eb20899c3638e67d787c57 Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Thu, 27 Jul 2023 01:40:37 +0900 Subject: [PATCH 35/43] =?UTF-8?q?Python=20API=E3=81=AE"=E3=82=B3=E3=83=B3?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=83=A9=E3=82=AF=E3=83=88"=E3=82=92"?= =?UTF-8?q?=E7=94=9F=E6=88=90"=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../voicevox_core_python_api/python/voicevox_core/_rust.pyi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi b/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi index f5efe85de..1b5f985bd 100644 --- a/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi +++ b/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi @@ -34,7 +34,7 @@ class VoiceModel: @staticmethod async def from_path(path: Union[Path, str]) -> "VoiceModel": """ - VVMファイルから ``VoiceModel`` をコンストラクトする。 + VVMファイルから ``VoiceModel`` を生成する。 :param path: VVMファイルへのパス。 """ @@ -81,7 +81,7 @@ class Synthesizer: load_all_models: bool = False, ) -> "Synthesizer": """ - :class:`Synthesizer` をコンストラクトする。 + :class:`Synthesizer` を生成する。 :param open_jtalk: Open JTalk。 :param acceleration_mode: ハードウェアアクセラレーションモード。 From 2509a6ad0a434fe54a8f9c2644671986aa160732 Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Thu, 27 Jul 2023 01:46:52 +0900 Subject: [PATCH 36/43] =?UTF-8?q?"=E7=94=9F=E5=AD=98=E6=9C=9F=E9=96=93"?= =?UTF-8?q?=E3=81=AE=E8=A8=98=E8=BF=B0=E3=82=92=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/voicevox_core_c_api/include/voicevox_core.h | 3 ++- crates/voicevox_core_c_api/src/lib.rs | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/crates/voicevox_core_c_api/include/voicevox_core.h b/crates/voicevox_core_c_api/include/voicevox_core.h index c17789dee..6adcab95f 100644 --- a/crates/voicevox_core_c_api/include/voicevox_core.h +++ b/crates/voicevox_core_c_api/include/voicevox_core.h @@ -487,7 +487,7 @@ VoicevoxVoiceModelId voicevox_voice_model_id(const struct VoicevoxVoiceModel *mo * * \safety{ * - `model`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また ::voicevox_voice_model_delete で解放されていてはいけない。 - * - 戻り値の文字列は`model`の生存期間(_lifetime_)を越えてアクセスされてはならない。 + * - 戻り値の文字列の生存期間(_lifetime_)は次にこの関数が呼ばれるか、`model`が破棄されるまでである。この生存期間を越えて文字列にアクセスしてはならない。 * } */ #ifdef _WIN32 @@ -628,6 +628,7 @@ bool voicevox_synthesizer_is_loaded_voice_model(const struct VoicevoxSynthesizer * * \safety{ * - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 + * - 戻り値の文字列の生存期間(_lifetime_)は次にこの関数が呼ばれるか、`synthesizer`が破棄されるまでである。この生存期間を越えて文字列にアクセスしてはならない。 * } */ #ifdef _WIN32 diff --git a/crates/voicevox_core_c_api/src/lib.rs b/crates/voicevox_core_c_api/src/lib.rs index 93e4a5e0e..f317f0a87 100644 --- a/crates/voicevox_core_c_api/src/lib.rs +++ b/crates/voicevox_core_c_api/src/lib.rs @@ -287,7 +287,7 @@ pub extern "C" fn voicevox_voice_model_id(model: &VoicevoxVoiceModel) -> Voicevo /// /// \safety{ /// - `model`は ::voicevox_voice_model_new_from_path で得たものでなければならず、また ::voicevox_voice_model_delete で解放されていてはいけない。 -/// - 戻り値の文字列は`model`の生存期間(_lifetime_)を越えてアクセスされてはならない。 +/// - 戻り値の文字列の生存期間(_lifetime_)は次にこの関数が呼ばれるか、`model`が破棄されるまでである。この生存期間を越えて文字列にアクセスしてはならない。 /// } #[no_mangle] pub extern "C" fn voicevox_voice_model_get_metas_json(model: &VoicevoxVoiceModel) -> *const c_char { @@ -451,6 +451,7 @@ pub unsafe extern "C" fn voicevox_synthesizer_is_loaded_voice_model( /// /// \safety{ /// - `synthesizer`は ::voicevox_synthesizer_new_with_initialize で得たものでなければならず、また ::voicevox_synthesizer_delete で解放されていてはいけない。 +/// - 戻り値の文字列の生存期間(_lifetime_)は次にこの関数が呼ばれるか、`synthesizer`が破棄されるまでである。この生存期間を越えて文字列にアクセスしてはならない。 /// } #[no_mangle] pub extern "C" fn voicevox_synthesizer_get_metas_json( From 9d4432e53a8a815bd144a190de048a50531be373 Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Thu, 27 Jul 2023 01:52:26 +0900 Subject: [PATCH 37/43] =?UTF-8?q?`VoiceModel`=E3=81=AEdoc=E3=81=A7VVM?= =?UTF-8?q?=E3=81=AB=E3=81=A4=E3=81=84=E3=81=A6=E8=A8=80=E5=8F=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Hiroshiba --- crates/voicevox_core/src/voice_model.rs | 2 ++ crates/voicevox_core_c_api/src/lib.rs | 1 + 2 files changed, 3 insertions(+) diff --git a/crates/voicevox_core/src/voice_model.rs b/crates/voicevox_core/src/voice_model.rs index 2530aacc9..fc20c652e 100644 --- a/crates/voicevox_core/src/voice_model.rs +++ b/crates/voicevox_core/src/voice_model.rs @@ -21,6 +21,8 @@ pub struct VoiceModelId { } /// 音声モデル。 +/// +/// VVMファイルと対応する。 #[derive(Getters, Clone)] pub struct VoiceModel { /// ID。 diff --git a/crates/voicevox_core_c_api/src/lib.rs b/crates/voicevox_core_c_api/src/lib.rs index f317f0a87..6cc340b10 100644 --- a/crates/voicevox_core_c_api/src/lib.rs +++ b/crates/voicevox_core_c_api/src/lib.rs @@ -223,6 +223,7 @@ pub static voicevox_version: &c_char = { /// 音声モデル。 /// +/// VVMファイルと対応する。 /// 構築(_construction_)は ::voicevox_voice_model_new_from_path で行い、破棄(_destruction_)は ::voicevox_voice_model_delete で行う。 #[derive(Getters)] pub struct VoicevoxVoiceModel { From e532d7c7790113bb1cc94e59aabeb5a716b74d34 Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Thu, 27 Jul 2023 02:05:59 +0900 Subject: [PATCH 38/43] `cargo xtask update-c-header` --- crates/voicevox_core_c_api/include/voicevox_core.h | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/voicevox_core_c_api/include/voicevox_core.h b/crates/voicevox_core_c_api/include/voicevox_core.h index 6adcab95f..aa16e5992 100644 --- a/crates/voicevox_core_c_api/include/voicevox_core.h +++ b/crates/voicevox_core_c_api/include/voicevox_core.h @@ -254,6 +254,7 @@ typedef struct VoicevoxUserDict VoicevoxUserDict; /** * 音声モデル。 * + * VVMファイルと対応する。 * 構築(_construction_)は ::voicevox_voice_model_new_from_path で行い、破棄(_destruction_)は ::voicevox_voice_model_delete で行う。 */ typedef struct VoicevoxVoiceModel VoicevoxVoiceModel; From d3910318d9701b5e404f7c30665780935f8c2297 Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Fri, 28 Jul 2023 02:45:21 +0900 Subject: [PATCH 39/43] =?UTF-8?q?safety=20doc=E3=82=92`
`=E3=81=A7?= =?UTF-8?q?=E5=8C=85=E3=82=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/apis/c_api/doxygen/Doxyfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/apis/c_api/doxygen/Doxyfile b/docs/apis/c_api/doxygen/Doxyfile index d8495c6be..c319ae7d8 100644 --- a/docs/apis/c_api/doxygen/Doxyfile +++ b/docs/apis/c_api/doxygen/Doxyfile @@ -2662,4 +2662,4 @@ ALIASES += example{1}="
Example
\1
" ALIASES += examples{1}="
Examples
\1
" # 中身は箇条書きで、素の文章からは始まらない想定 -ALIASES += safety{1}="
⚠️ Safety
安全性要件は以下の通りである。\1
" +ALIASES += safety{1}="
Safety
⚠️安全性要件安全性要件は以下の通りである。\1
" From 67e2507f6e7e8b7cabe1ec4542d99490dfaf41bb Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sun, 30 Jul 2023 11:01:37 +0900 Subject: [PATCH 40/43] =?UTF-8?q?`class=20VoicevoxError`=E3=81=AEdoc?= =?UTF-8?q?=E3=82=92=E3=81=93=E3=81=A1=E3=82=89=E5=81=B4=E3=81=AB=E5=90=88?= =?UTF-8?q?=E3=82=8F=E3=81=9B=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi b/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi index b5db49313..19935e7d2 100644 --- a/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi +++ b/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi @@ -295,7 +295,7 @@ class UserDict: ... class VoicevoxError(Exception): - """VOICEVOXで発生したエラー。""" + """VOICEVOX COREのエラー。""" ... From 79d96fe522e9b352594f5d91a862ed0cd42eed7c Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sun, 30 Jul 2023 11:15:47 +0900 Subject: [PATCH 41/43] =?UTF-8?q?`SupportedDevices`=E3=81=AE=E8=AA=AC?= =?UTF-8?q?=E6=98=8E=E3=82=92=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/voicevox_core/src/devices.rs | 10 ++++++++-- .../python/voicevox_core/_models.py | 12 ++++++++---- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/crates/voicevox_core/src/devices.rs b/crates/voicevox_core/src/devices.rs index 46a0f1de0..b8ba51bf2 100644 --- a/crates/voicevox_core/src/devices.rs +++ b/crates/voicevox_core/src/devices.rs @@ -12,11 +12,17 @@ pub struct SupportedDevices { /// /// 常に`true`。 cpu: bool, - /// [CUDA Execution Provider] (`CUDAExecutionProvider`)が利用可能。 + /// CUDAが利用可能。 + /// + /// ONNX Runtimeの[CUDA Execution Provider] (`CUDAExecutionProvider`)に対応する。必要な環境につ + /// いてはそちらを参照。 /// /// [CUDA Execution Provider]: https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html cuda: bool, - /// [DirectML Execution Provider] (`DmlExecutionProvider`)が利用可能。 + /// DirectMLが利用可能。 + /// + /// ONNX Runtimeの[DirectML Execution Provider] (`DmlExecutionProvider`)に対応する。必要な環境に + /// ついてはそちらを参照。 /// /// [DirectML Execution Provider]: https://onnxruntime.ai/docs/execution-providers/DirectML-ExecutionProvider.html dml: bool, diff --git a/crates/voicevox_core_python_api/python/voicevox_core/_models.py b/crates/voicevox_core_python_api/python/voicevox_core/_models.py index a74675210..53aeeb9d3 100644 --- a/crates/voicevox_core_python_api/python/voicevox_core/_models.py +++ b/crates/voicevox_core_python_api/python/voicevox_core/_models.py @@ -53,14 +53,18 @@ class SupportedDevices: cuda: bool """ - `CUDA Execution Provider `_ - (``CUDAExecutionProvider``)が利用可能。 + CUDAが利用可能。 + + ONNX Runtimeの `CUDA Execution Provider `_ + (``CUDAExecutionProvider``)に対応する。必要な環境についてはそちらを参照。 """ dml: bool """ - `DirectML Execution Provider `_ - (``DmlExecutionProvider``)が利用可能。 + DirectMLが利用可能。 + + ONNX Runtimeの `DirectML Execution Provider `_ + (``DmlExecutionProvider``)に対応する。必要な環境についてはそちらを参照。 """ From 570d78247ba910f24236f9568d05b61408e648bc Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Wed, 2 Aug 2023 00:15:24 +0900 Subject: [PATCH 42/43] =?UTF-8?q?"AquesTalk=E9=A2=A8=E8=A8=98=E6=B3=95"?= =?UTF-8?q?=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/voicevox_core/src/engine/model.rs | 2 +- crates/voicevox_core/src/result_code.rs | 4 ++-- crates/voicevox_core/src/voice_synthesizer.rs | 22 +++++++++---------- .../include/voicevox_core.h | 18 +++++++-------- crates/voicevox_core_c_api/src/lib.rs | 16 +++++++------- .../python/voicevox_core/_models.py | 2 +- .../python/voicevox_core/_rust.pyi | 10 ++++----- 7 files changed, 37 insertions(+), 37 deletions(-) diff --git a/crates/voicevox_core/src/engine/model.rs b/crates/voicevox_core/src/engine/model.rs index 37cd1fc71..d403d60ec 100644 --- a/crates/voicevox_core/src/engine/model.rs +++ b/crates/voicevox_core/src/engine/model.rs @@ -67,7 +67,7 @@ pub struct AudioQueryModel { output_sampling_rate: u32, /// 音声データをステレオ出力するか否か。 output_stereo: bool, - /// \[読み取り専用\] AquesTalkライクな読み仮名。 + /// \[読み取り専用\] AquesTalk風記法。 /// /// [`Synthesizer::audio_query`]が返すもののみ`Some`となる。入力としてのAudioQueryでは無視され /// る。 diff --git a/crates/voicevox_core/src/result_code.rs b/crates/voicevox_core/src/result_code.rs index e7eb4fafe..faaaf8df2 100644 --- a/crates/voicevox_core/src/result_code.rs +++ b/crates/voicevox_core/src/result_code.rs @@ -29,7 +29,7 @@ pub enum VoicevoxResultCode { VOICEVOX_RESULT_EXTRACT_FULL_CONTEXT_LABEL_ERROR = 11, /// 無効なutf8文字列が入力された VOICEVOX_RESULT_INVALID_UTF8_INPUT_ERROR = 12, - /// aquestalk形式のテキストの解析に失敗した + /// AquesTalk風記法のテキストの解析に失敗した VOICEVOX_RESULT_PARSE_KANA_ERROR = 13, /// 無効なAudioQuery VOICEVOX_RESULT_INVALID_AUDIO_QUERY_ERROR = 14, @@ -81,7 +81,7 @@ pub const fn error_result_to_message(result_code: VoicevoxResultCode) -> &'stati } VOICEVOX_RESULT_INVALID_UTF8_INPUT_ERROR => "入力テキストが無効なUTF-8データでした\0", VOICEVOX_RESULT_PARSE_KANA_ERROR => { - "入力テキストをAquesTalkライクな読み仮名としてパースすることに失敗しました\0" + "入力テキストをAquesTalk風記法としてパースすることに失敗しました\0" } VOICEVOX_RESULT_INVALID_AUDIO_QUERY_ERROR => "無効なaudio_queryです\0", VOICEVOX_RESULT_INVALID_ACCENT_PHRASE_ERROR => "無効なaccent_phraseです\0", diff --git a/crates/voicevox_core/src/voice_synthesizer.rs b/crates/voicevox_core/src/voice_synthesizer.rs index f53966f98..5c975c0a6 100644 --- a/crates/voicevox_core/src/voice_synthesizer.rs +++ b/crates/voicevox_core/src/voice_synthesizer.rs @@ -33,7 +33,7 @@ impl From<&TtsOptions> for SynthesisOptions { /// [`Synthesizer::create_accent_phrases`]: Synthesizer::create_accent_phrases #[derive(ConstDefault)] pub struct AccentPhrasesOptions { - /// AquesTalk形式のkanaとしてテキストを解釈する。 + /// AquesTalk風記法としてテキストを解釈する。 pub kana: bool, } @@ -42,7 +42,7 @@ pub struct AccentPhrasesOptions { /// [`Synthesizer::audio_query`]: Synthesizer::audio_query #[derive(ConstDefault)] pub struct AudioQueryOptions { - /// AquesTalk形式のkanaとしてテキストを解釈する。 + /// AquesTalk風記法としてテキストを解釈する。 pub kana: bool, } @@ -56,7 +56,7 @@ impl From<&TtsOptions> for AudioQueryOptions { /// /// [`Synthesizer::tts`]: Synthesizer::tts pub struct TtsOptions { - /// AquesTalk形式のkanaとしてテキストを解釈する。 + /// AquesTalk風記法としてテキストを解釈する。 pub kana: bool, pub enable_interrogative_upspeak: bool, } @@ -293,8 +293,8 @@ impl Synthesizer { /// AccentPhrase (アクセント句)の配列を生成する。 /// - /// `text`は[`options.kana`]が有効化されているときにはAquesTalk形式のkanaとして、そうでないと - /// きには日本語のテキストとして解釈される。 + /// `text`は[`options.kana`]が有効化されているときにはAquesTalk風記法として、そうでないときには + /// 日本語のテキストとして解釈される。 /// /// # Examples /// @@ -378,7 +378,7 @@ impl Synthesizer { /// /// let accent_phrases = syntesizer /// .create_accent_phrases( - /// "コンニチワ'", // AquesTalk形式のkana + /// "コンニチワ'", // AquesTalk風記法 /// StyleId::new(2), // "四国めたん (ノーマル)", /// &AccentPhrasesOptions { kana: true }, /// ) @@ -444,8 +444,8 @@ impl Synthesizer { /// [AudioQuery]を生成する。 /// - /// `text`は[`options.kana`]が有効化されているときにはAquesTalk形式のkanaとして、そうでないと - /// きには日本語のテキストとして解釈される。 + /// `text`は[`options.kana`]が有効化されているときにはAquesTalk風記法として、そうでないときには + /// 日本語のテキストとして解釈される。 /// /// # Examples /// @@ -529,7 +529,7 @@ impl Synthesizer { /// /// let audio_query = syntesizer /// .audio_query( - /// "コンニチワ'", // AquesTalk形式のkana + /// "コンニチワ'", // AquesTalk風記法 /// StyleId::new(2), // "四国めたん (ノーマル)", /// &AudioQueryOptions { kana: true }, /// ) @@ -567,8 +567,8 @@ impl Synthesizer { /// テキスト音声合成を行う。 /// - /// `text`は[`options.kana`]が有効化されているときにはAquesTalk形式のkanaとして、そうでないと - /// きには日本語のテキストとして解釈される。 + /// `text`は[`options.kana`]が有効化されているときにはAquesTalk風記法として、そうでないときには + /// 日本語のテキストとして解釈される。 /// /// [`options.kana`]: crate::TtsOptions::kana pub async fn tts( diff --git a/crates/voicevox_core_c_api/include/voicevox_core.h b/crates/voicevox_core_c_api/include/voicevox_core.h index aa16e5992..d5564616c 100644 --- a/crates/voicevox_core_c_api/include/voicevox_core.h +++ b/crates/voicevox_core_c_api/include/voicevox_core.h @@ -131,7 +131,7 @@ enum VoicevoxResultCode */ VOICEVOX_RESULT_INVALID_UTF8_INPUT_ERROR = 12, /** - * aquestalk形式のテキストの解析に失敗した + * AquesTalk風記法のテキストの解析に失敗した */ VOICEVOX_RESULT_PARSE_KANA_ERROR = 13, /** @@ -295,7 +295,7 @@ typedef uint32_t VoicevoxStyleId; */ typedef struct VoicevoxAudioQueryOptions { /** - * aquestalk形式のkanaとしてテキストを解釈する + * AquesTalk風記法としてテキストを解釈する */ bool kana; } VoicevoxAudioQueryOptions; @@ -305,7 +305,7 @@ typedef struct VoicevoxAudioQueryOptions { */ typedef struct VoicevoxAccentPhrasesOptions { /** - * AquesTalk形式のkanaとしてテキストを解釈する + * AquesTalk風記法としてテキストを解釈する */ bool kana; } VoicevoxAccentPhrasesOptions; @@ -325,7 +325,7 @@ typedef struct VoicevoxSynthesisOptions { */ typedef struct VoicevoxTtsOptions { /** - * AquesTalk形式のkanaとしてテキストを解釈する + * AquesTalk風記法としてテキストを解釈する */ bool kana; /** @@ -670,7 +670,7 @@ VoicevoxResultCode voicevox_create_supported_devices_json(char **output_supporte * 生成したJSON文字列を解放するには ::voicevox_json_free を使う。 * * @param [in] synthesizer 音声シンセサイザ - * @param [in] text UTF-8の日本語テキストまたはAquesTalk形式のkana + * @param [in] text UTF-8の日本語テキストまたはAquesTalk風記法 * @param [in] style_id スタイルID * @param [in] options オプション * @param [out] output_audio_query_json 生成先 @@ -690,7 +690,7 @@ VoicevoxResultCode voicevox_create_supported_devices_json(char **output_supporte * ```c * char *audio_query; * voicevox_synthesizer_audio_query(synthesizer, - * "コンニチワ'", // AquesTalk形式のkana + * "コンニチワ'", // AquesTalk風記法 * 2, // "四国めたん (ノーマル)" * (VoicevoxAudioQueryOptions){.kana = true}, * &audio_query); @@ -719,7 +719,7 @@ VoicevoxResultCode voicevox_synthesizer_audio_query(const struct VoicevoxSynthes * 生成したJSON文字列を解放するには ::voicevox_json_free を使う。 * * @param [in] synthesizer 音声シンセサイザ - * @param [in] text UTF-8の日本語テキストまたはAquesTalk形式のkana + * @param [in] text UTF-8の日本語テキストまたはAquesTalk風記法 * @param [in] style_id スタイルID * @param [in] options オプション * @param [out] output_accent_phrases_json 生成先 @@ -740,7 +740,7 @@ VoicevoxResultCode voicevox_synthesizer_audio_query(const struct VoicevoxSynthes * char *accent_phrases; * voicevox_synthesizer_create_accent_phrases( * synthesizer, - * "コンニチワ'", // AquesTalk形式のkana + * "コンニチワ'", // AquesTalk風記法 * 2, // "四国めたん (ノーマル)" * (VoicevoxAccentPhrasesOptions){.kana = true}, &accent_phrases); * ``` @@ -876,7 +876,7 @@ VoicevoxResultCode voicevox_synthesizer_synthesis(const struct VoicevoxSynthesiz * 生成したWAVデータを解放するには ::voicevox_wav_free を使う。 * * @param [in] synthesizer - * @param [in] text UTF-8の日本語テキストまたはAquesTalk形式のkana + * @param [in] text UTF-8の日本語テキストまたはAquesTalk風記法 * @param [in] style_id スタイルID * @param [in] options オプション * @param [out] output_wav_length 出力のバイト長 diff --git a/crates/voicevox_core_c_api/src/lib.rs b/crates/voicevox_core_c_api/src/lib.rs index 6cc340b10..23d7d6c9b 100644 --- a/crates/voicevox_core_c_api/src/lib.rs +++ b/crates/voicevox_core_c_api/src/lib.rs @@ -500,7 +500,7 @@ pub unsafe extern "C" fn voicevox_create_supported_devices_json( /// ::voicevox_synthesizer_audio_query のオプション。 #[repr(C)] pub struct VoicevoxAudioQueryOptions { - /// aquestalk形式のkanaとしてテキストを解釈する + /// AquesTalk風記法としてテキストを解釈する kana: bool, } @@ -513,7 +513,7 @@ pub static voicevox_default_audio_query_options: VoicevoxAudioQueryOptions = Con /// 生成したJSON文字列を解放するには ::voicevox_json_free を使う。 /// /// @param [in] synthesizer 音声シンセサイザ -/// @param [in] text UTF-8の日本語テキストまたはAquesTalk形式のkana +/// @param [in] text UTF-8の日本語テキストまたはAquesTalk風記法 /// @param [in] style_id スタイルID /// @param [in] options オプション /// @param [out] output_audio_query_json 生成先 @@ -533,7 +533,7 @@ pub static voicevox_default_audio_query_options: VoicevoxAudioQueryOptions = Con /// ```c /// char *audio_query; /// voicevox_synthesizer_audio_query(synthesizer, -/// "コンニチワ'", // AquesTalk形式のkana +/// "コンニチワ'", // AquesTalk風記法 /// 2, // "四国めたん (ノーマル)" /// (VoicevoxAudioQueryOptions){.kana = true}, /// &audio_query); @@ -574,7 +574,7 @@ pub unsafe extern "C" fn voicevox_synthesizer_audio_query( /// ::voicevox_synthesizer_create_accent_phrases のオプション。 #[repr(C)] pub struct VoicevoxAccentPhrasesOptions { - /// AquesTalk形式のkanaとしてテキストを解釈する + /// AquesTalk風記法としてテキストを解釈する kana: bool, } @@ -588,7 +588,7 @@ pub static voicevox_default_accent_phrases_options: VoicevoxAccentPhrasesOptions /// 生成したJSON文字列を解放するには ::voicevox_json_free を使う。 /// /// @param [in] synthesizer 音声シンセサイザ -/// @param [in] text UTF-8の日本語テキストまたはAquesTalk形式のkana +/// @param [in] text UTF-8の日本語テキストまたはAquesTalk風記法 /// @param [in] style_id スタイルID /// @param [in] options オプション /// @param [out] output_accent_phrases_json 生成先 @@ -609,7 +609,7 @@ pub static voicevox_default_accent_phrases_options: VoicevoxAccentPhrasesOptions /// char *accent_phrases; /// voicevox_synthesizer_create_accent_phrases( /// synthesizer, -/// "コンニチワ'", // AquesTalk形式のkana +/// "コンニチワ'", // AquesTalk風記法 /// 2, // "四国めたん (ノーマル)" /// (VoicevoxAccentPhrasesOptions){.kana = true}, &accent_phrases); /// ``` @@ -825,7 +825,7 @@ pub unsafe extern "C" fn voicevox_synthesizer_synthesis( /// ::voicevox_synthesizer_tts のオプション。 #[repr(C)] pub struct VoicevoxTtsOptions { - /// AquesTalk形式のkanaとしてテキストを解釈する + /// AquesTalk風記法としてテキストを解釈する kana: bool, /// 疑問文の調整を有効にする enable_interrogative_upspeak: bool, @@ -840,7 +840,7 @@ pub static voicevox_default_tts_options: VoicevoxTtsOptions = ConstDefault::DEFA /// 生成したWAVデータを解放するには ::voicevox_wav_free を使う。 /// /// @param [in] synthesizer -/// @param [in] text UTF-8の日本語テキストまたはAquesTalk形式のkana +/// @param [in] text UTF-8の日本語テキストまたはAquesTalk風記法 /// @param [in] style_id スタイルID /// @param [in] options オプション /// @param [out] output_wav_length 出力のバイト長 diff --git a/crates/voicevox_core_python_api/python/voicevox_core/_models.py b/crates/voicevox_core_python_api/python/voicevox_core/_models.py index 53aeeb9d3..6dfd1aa37 100644 --- a/crates/voicevox_core_python_api/python/voicevox_core/_models.py +++ b/crates/voicevox_core_python_api/python/voicevox_core/_models.py @@ -158,7 +158,7 @@ class AudioQuery: kana: Optional[str] """ - [読み取り専用] AquesTalkライクな読み仮名。 + [読み取り専用] AquesTalk風記法。 :func:`Synthesizer.audio_query` が返すもののみ ``str`` となる。入力としてのAudioQueryでは無視さ れる。 diff --git a/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi b/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi index 19935e7d2..345f483be 100644 --- a/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi +++ b/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi @@ -129,7 +129,7 @@ class Synthesizer: :param text: テキスト。文字コードはUTF-8。 :param style_id: スタイルID。 - :param kana: ``text`` をAquesTalk形式のkanaとして解釈する。 + :param kana: ``text`` をAquesTalk風記法として解釈する。 :returns: 話者とテキストから生成された :class:`AudioQuery` 。 """ @@ -143,9 +143,9 @@ class Synthesizer: """ AccentPhrase (アクセント句)の配列を生成する。 - :param text: UTF-8の日本語テキストまたはAquesTalk形式のkana。 + :param text: UTF-8の日本語テキストまたはAquesTalk風記法。 :param style_id: スタイルID。 - :param kana: ``text`` をAquesTalk形式のkanaとして解釈する。 + :param kana: ``text`` をAquesTalk風記法として解釈する。 :returns: :class:`AccentPhrase` の配列。 """ @@ -211,9 +211,9 @@ class Synthesizer: """ テキスト音声合成を実行する。 - :param text: UTF-8の日本語テキストまたはAquesTalk形式のkana。 + :param text: UTF-8の日本語テキストまたはAquesTalk風記法。 :param style_id: スタイルID。 - :param kana: ``text`` をAquesTalk形式のkanaとして解釈する。 + :param kana: ``text`` をAquesTalk風記法として解釈する。 :param enable_interrogative_upspeak: 疑問文の調整を有効にする。 :returns: WAVデータ。 From e45db259ed371a348189b2e274981257a13cdc4b Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Wed, 2 Aug 2023 00:19:59 +0900 Subject: [PATCH 43/43] =?UTF-8?q?options=E3=81=AE=E5=AE=9A=E6=95=B0?= =?UTF-8?q?=E3=81=AB=E5=AF=BE=E3=81=99=E3=82=8B=E5=A4=89=E6=9B=B4=E3=82=92?= =?UTF-8?q?=E5=8F=96=E3=82=8A=E6=B6=88=E3=81=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://github.com/VOICEVOX/voicevox_core/pull/557 のため。 --- crates/voicevox_core_c_api/src/lib.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/voicevox_core_c_api/src/lib.rs b/crates/voicevox_core_c_api/src/lib.rs index 23d7d6c9b..827654da5 100644 --- a/crates/voicevox_core_c_api/src/lib.rs +++ b/crates/voicevox_core_c_api/src/lib.rs @@ -205,7 +205,7 @@ pub struct VoicevoxInitializeOptions { load_all_models: bool, } -/// ::VoicevoxInitializeOptions のデフォルト値。 +/// デフォルトの初期化オプション #[no_mangle] pub static voicevox_default_initialize_options: VoicevoxInitializeOptions = ConstDefault::DEFAULT; @@ -504,7 +504,7 @@ pub struct VoicevoxAudioQueryOptions { kana: bool, } -/// ::VoicevoxAudioQueryOptions のデフォルト値。 +/// デフォルトの AudioQuery のオプション #[no_mangle] pub static voicevox_default_audio_query_options: VoicevoxAudioQueryOptions = ConstDefault::DEFAULT; @@ -578,7 +578,7 @@ pub struct VoicevoxAccentPhrasesOptions { kana: bool, } -/// デフォルトの ::VoicevoxAccentPhrasesOptions。 +/// デフォルトの `accent_phrases` のオプション #[no_mangle] pub static voicevox_default_accent_phrases_options: VoicevoxAccentPhrasesOptions = ConstDefault::DEFAULT; @@ -774,7 +774,7 @@ pub struct VoicevoxSynthesisOptions { enable_interrogative_upspeak: bool, } -/// ::VoicevoxSynthesisOptions のデフォルト値。 +/// デフォルトの `voicevox_synthesizer_synthesis` のオプション #[no_mangle] pub static voicevox_default_synthesis_options: VoicevoxSynthesisOptions = ConstDefault::DEFAULT; @@ -831,7 +831,7 @@ pub struct VoicevoxTtsOptions { enable_interrogative_upspeak: bool, } -/// ::VoicevoxTtsOptions のデフォルト値 +/// デフォルトのテキスト音声合成オプション #[no_mangle] pub static voicevox_default_tts_options: VoicevoxTtsOptions = ConstDefault::DEFAULT;