Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ドキュメントを刷新する #532

Merged
merged 47 commits into from
Aug 2, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
fb19061
ドキュメントを刷新する
qryxip Jun 21, 2023
43fab14
Fix typo
qryxip Jun 25, 2023
e75f8af
Windowsではdoctestは`no_run`にする
qryxip Jun 25, 2023
2a480c7
"無料で使える中品質なテキスト読み上げソフトウェア、VOICEVOXのコア"
qryxip Jul 1, 2023
806597d
Merge branch 'project-vvm-async-api' into project-vvm-async-api-rewri…
qryxip Jul 2, 2023
7637da5
ドキュメントを #534 に合わせる
qryxip Jul 2, 2023
a066ea5
`cargo xtask update-c-header`
qryxip Jul 2, 2023
a4c895d
safetyを更新
qryxip Jul 2, 2023
f71379c
Merge branch 'project-vvm-async-api' into project-vvm-async-api-rewri…
qryxip Jul 4, 2023
9b1cbde
JSON関係
qryxip Jul 8, 2023
246f05f
書きかけの`OpenJtalkRc`を書く
qryxip Jul 8, 2023
5ae4d09
"声"/"voice"という言葉は避ける
qryxip Jul 8, 2023
8c0e803
`**日本語**(_英語_)`
qryxip Jul 8, 2023
67e3325
`voicevox_json_free`への案内が一つ抜けていた
qryxip Jul 8, 2023
b617250
`voicevox_json_free`の対象を明記
qryxip Jul 8, 2023
9bbb11d
`cargo xtask update-c-header`
qryxip Jul 8, 2023
020561e
`Error`の説明をマシに
qryxip Jul 8, 2023
23733cb
"示す" → "示しうる"
qryxip Jul 8, 2023
804542f
"示す" → "示しうる"
qryxip Jul 8, 2023
e37367b
空行を削る
qryxip Jul 8, 2023
f1da372
"wavデータ" → "WAVデータ"
qryxip Jul 8, 2023
353c8e2
"wav" → "WAVデータ"
qryxip Jul 8, 2023
d79ed0d
"wav" → "WAVデータ"
qryxip Jul 8, 2023
2e1f154
`cargo xtask update-c-header`
qryxip Jul 8, 2023
887b31c
doctestの`no_run`に #537 へのリンク
qryxip Jul 8, 2023
f9a1869
"列" → "配列"
qryxip Jul 8, 2023
03c8df0
冒頭のsafetyセクションを明確に
qryxip Jul 15, 2023
b4dbc8d
`true` → `True`
qryxip Jul 15, 2023
f8d5758
Update the header level doc
qryxip Jul 17, 2023
27d067b
safetyを更新
qryxip Jul 20, 2023
271bbaa
safetyどexample(s)を`<dl>`にする
qryxip Jul 22, 2023
2355d30
safetyを更新
qryxip Jul 22, 2023
941bc65
Merge branch 'main' into project-vvm-async-api-rewrite-docs
qryxip Jul 25, 2023
bc0f5a2
辞書APIに対応
qryxip Jul 25, 2023
5bf35f4
"構築"/"破棄"で統一
qryxip Jul 25, 2023
b33bcb5
`get_metas_json`のsafety doc
qryxip Jul 25, 2023
a35750b
`cargo xtask update-c-header`
qryxip Jul 26, 2023
f8b8c9d
Python APIの"コンストラクト"を"生成"に
qryxip Jul 26, 2023
2509a6a
"生存期間"の記述を更新
qryxip Jul 26, 2023
9d4432e
`VoiceModel`のdocでVVMについて言及
qryxip Jul 26, 2023
e532d7c
`cargo xtask update-c-header`
qryxip Jul 26, 2023
d391031
safety docを`<details>`で包む
qryxip Jul 27, 2023
252bcc5
Merge branch 'main' into project-vvm-async-api-rewrite-docs
qryxip Jul 30, 2023
67e2507
`class VoicevoxError`のdocをこちら側に合わせる
qryxip Jul 30, 2023
79d96fe
`SupportedDevices`の説明を更新
qryxip Jul 30, 2023
570d782
"AquesTalk風記法"にする
qryxip Aug 1, 2023
e45db25
optionsの定数に対する変更を取り消し
qryxip Aug 1, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 31 additions & 1 deletion crates/voicevox_core/src/devices.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,45 @@ use serde::{Deserialize, Serialize};

use super::*;

/// このライブラリで利用可能なデバイスの情報。
///
/// あくまで本ライブラリが対応しているデバイスの情報であることに注意。GPUが使える環境ではなかったと
/// しても`cuda`や`dml`は`true`を示しうる。
#[derive(Getters, Debug, Serialize, Deserialize)]
pub struct SupportedDevices {
/// CPUが利用可能。
///
/// 常に`true`。
cpu: bool,
/// CUDAが利用可能。
///
/// ONNX Runtimeの[CUDA Execution Provider] (`CUDAExecutionProvider`)に対応する。必要な環境につ
/// いてはそちらを参照。
///
/// [CUDA Execution Provider]: https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html
cuda: bool,
/// DirectMLが利用可能。
///
/// ONNX Runtimeの[DirectML Execution Provider] (`DmlExecutionProvider`)に対応する。必要な環境に
/// ついてはそちらを参照。
///
/// [DirectML Execution Provider]: https://onnxruntime.ai/docs/execution-providers/DirectML-ExecutionProvider.html
dml: bool,
}

impl SupportedDevices {
/// サポートされているデバイス情報を取得する
/// `SupportedDevices`をコンストラクトする。
///
/// # Example
///
#[cfg_attr(windows, doc = "```no_run")] // https://github.com/VOICEVOX/voicevox_core/issues/537
#[cfg_attr(not(windows), doc = "```")]
/// use voicevox_core::SupportedDevices;
///
/// let supported_devices = SupportedDevices::create()?;
/// #
/// # Result::<_, anyhow::Error>::Ok(())
/// ```
pub fn create() -> Result<Self> {
let mut cuda_support = false;
let mut dml_support = false;
Expand Down
28 changes: 28 additions & 0 deletions crates/voicevox_core/src/engine/model.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<String>,
/// 子音の音長。
consonant_length: Option<f32>,
/// 母音の音素。
vowel: String,
/// 母音の音長。
vowel_length: f32,
/// 音高。
pitch: f32,
}

/// AccentPhrase (アクセント句ごとの情報)。
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AudioQueryがドメイン用語として運用してもよかった記憶があったのでAccentPhraseもそうしたが、こっちは「アクセント句」のままでもよかったかも。

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

エンジンだとAudioQueryは「クエリ」、AccentPhraseは「アクセント句」にしてました。
ちょっとわかりづらそうだなと思ったらこっち側で改修しようと思います。(たぶんそのままで行くと思います。)

#[derive(Clone, Debug, new, Getters, Deserialize, Serialize)]
pub struct AccentPhraseModel {
/// モーラの配列。
moras: Vec<MoraModel>,
/// アクセント箇所。
accent: usize,
/// 後ろに無音を付けるかどうか。
pause_mora: Option<MoraModel>,
/// 疑問系かどうか。
#[serde(default)]
is_interrogative: bool,
}
Expand All @@ -33,18 +45,34 @@ impl AccentPhraseModel {
}
}

/// AudioQuery (音声合成用のクエリ)。
#[allow(clippy::too_many_arguments)]
#[derive(Clone, new, Getters, Deserialize, Serialize)]
pub struct AudioQueryModel {
/// アクセント句の配列。
accent_phrases: Vec<AccentPhraseModel>,
/// 全体の話速。
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<String>,
}

Expand Down
6 changes: 4 additions & 2 deletions crates/voicevox_core/src/engine/open_jtalk.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ pub enum OpenJtalkError {

pub type Result<T> = std::result::Result<T, OpenJtalkError>;

/// テキスト解析器としてのOpen JTalk。
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

VOICEVOXにおけるOpen JTalkの役割を明記。
(Open JTalkは"text-to-speech system"であるため)

pub struct OpenJtalk {
resources: Mutex<Resources>,
dict_dir: Option<PathBuf>,
Expand Down Expand Up @@ -57,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
Expand Down
6 changes: 1 addition & 5 deletions crates/voicevox_core/src/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,7 @@ use std::path::PathBuf;
use thiserror::Error;
use uuid::Uuid;

/*
* 新しいエラーを定義したら、必ずresult_code.rsにあるVoicevoxResultCodeに対応するコードを定義し、
* internal.rsにある変換関数に変換処理を加えること
*/

Comment on lines -9 to -13
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

今となっては嘘コメントとなってしまっているため、削除。

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mainの方に「嘘コメント一掃」みたいなPRをだしてもいいのかも。

/// VOICEVOX COREのエラー。
#[derive(Error, Debug)]
pub enum Error {
/*
Expand Down
2 changes: 2 additions & 0 deletions crates/voicevox_core/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
//! 無料で使える中品質なテキスト読み上げソフトウェア、VOICEVOXのコア。
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

このリポジトリのdescriptionをそのまま。


#![deny(unsafe_code)]

mod devices;
Expand Down
28 changes: 23 additions & 5 deletions crates/voicevox_core/src/metas.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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_)]を指す。
///
/// [**話者**(_speaker_)]: SpeakerMeta
/// [**スタイル**(_style_)]: StyleMeta
Comment on lines +12 to +17
Copy link
Member Author

@qryxip qryxip Jul 8, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

APIとしては「声」("voice")を指し示すのにスタイルを指定しているため、これは明記しておかないと混乱をまねくかと思い、こう記述。

#[derive(PartialEq, Eq, Clone, Copy, Ord, PartialOrd, Deserialize, Serialize, new, Debug)]
pub struct StyleId(RawStyleId);

Expand All @@ -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);

Expand All @@ -39,21 +51,27 @@ impl Display for StyleVersion {
}
}

/// 音声モデルのメタ情報
/// 音声モデルのメタ情報
pub type VoiceModelMeta = Vec<SpeakerMeta>;

/// スピーカーのメタ情報
/// **話者**(_speaker_)のメタ情報。
#[derive(Deserialize, Serialize, Getters, Clone)]
pub struct SpeakerMeta {
/// 話者名。
name: String,
/// 話者に属するスタイル。
styles: Vec<StyleMeta>,
/// 話者のバージョン。
version: StyleVersion,
/// 話者のUUID。
speaker_uuid: String,
}

/// スタイルのメタ情報
/// **スタイル**(_style_)のメタ情報。
#[derive(Deserialize, Serialize, Getters, Clone)]
pub struct StyleMeta {
/// スタイルID。
id: StyleId,
/// スタイル名。
name: String,
}
6 changes: 3 additions & 3 deletions crates/voicevox_core/src/result_code.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use strum::EnumIter;

/// 処理結果を示す結果コード
/// 処理結果を示す結果コード
#[repr(i32)]
#[derive(Debug, PartialEq, Eq, Clone, Copy, EnumIter)]
#[allow(non_camel_case_types)]
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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",
Expand Down
2 changes: 2 additions & 0 deletions crates/voicevox_core/src/user_dict/dict.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
20 changes: 10 additions & 10 deletions crates/voicevox_core/src/user_dict/part_of_speech_data.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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のこと
///
/// 参考: <https://github.com/VOICEVOX/open_jtalk/blob/427cfd761b78efb6094bea3c5bb8c968f0d711ab/src/mecab-naist-jdic/_left-id.def>
pub context_id: i32,
/// コストのパーセンタイル
/// コストのパーセンタイル
pub cost_candidates: Vec<i32>,
/// アクセント結合規則の一覧
/// アクセント結合規則の一覧
pub accent_associative_rules: Vec<&'static str>,
}

Expand Down
14 changes: 10 additions & 4 deletions crates/voicevox_core/src/voice_model.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,26 @@ 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,
}

/// 音声モデル
/// 音声モデル。
qryxip marked this conversation as resolved.
Show resolved Hide resolved
///
/// VVMファイルと対応する。
#[derive(Getters, Clone)]
pub struct VoiceModel {
/// ID。
id: VoiceModelId,
manifest: Manifest,
/// メタ情報。
metas: VoiceModelMeta,
path: PathBuf,
}
Expand Down Expand Up @@ -51,7 +57,7 @@ impl VoiceModel {
decode_model: decode_model_result?,
})
}
/// 与えられたパスからモデルを取得する
/// VVMファイルから`VoiceModel`をコンストラクトする。
Hiroshiba marked this conversation as resolved.
Show resolved Hide resolved
pub async fn from_path(path: impl AsRef<Path>) -> Result<Self> {
let reader = VvmEntryReader::open(&path).await?;
let manifest = reader.read_vvm_json::<Manifest>("manifest.json").await?;
Expand Down
Loading