/// <summary>
        /// VOICEROID識別IDに対応する TItem インスタンスを設定する。
        /// </summary>
        /// <param name="id">VOICEROID識別ID。</param>
        /// <param name="item">TItem インスタンス。</param>
        protected void SetItem(VoiceroidId id, TItem item)
        {
            if (item == null)
            {
                throw new ArgumentNullException(nameof(item));
            }
            if (item.VoiceroidId != id)
            {
                throw new ArgumentException(
                          nameof(id) + @" != " + nameof(item) + @"." + nameof(VoiceroidId));
            }

            int index = this.Table.IndexOf(id);

            if (index < 0)
            {
                // 有効なIDか?
                if (!this.VoiceroidIds.Contains(id))
                {
                    throw new InvalidEnumArgumentException(
                              nameof(item) + @"." + nameof(VoiceroidId),
                              (int)id,
                              id.GetType());
                }

                // 新規追加
                this.Table.Add(item);
            }
            else
            {
                // 更新
                this.Table[index] = item;
            }
        }
        /// <summary>
        /// VOICEROID識別IDに対応する TItem インスタンスを取得する。
        /// </summary>
        /// <param name="id">VOICEROID識別ID。</param>
        /// <returns>TItem インスタンス。</returns>
        protected TItem GetItem(VoiceroidId id)
        {
            TItem item;

            int index = this.Table.IndexOf(id);

            if (index < 0)
            {
                // 有効なIDか?
                if (!this.VoiceroidIds.Contains(id))
                {
                    throw new InvalidEnumArgumentException(
                              nameof(id),
                              (int)id,
                              id.GetType());
                }

                // アイテムを作成して追加
                item = (TItem)Activator.CreateInstance(typeof(TItem), id);
                this.Table.Add(item);
            }
            else
            {
                // 取得
                item = this.Table[index];
            }

            return(item);
        }
Esempio n. 3
0
 /// <summary>
 /// コンストラクタ。
 /// </summary>
 /// <param name="voiceroidId">VOICEROID識別ID。</param>
 public ExoCharaStyle(VoiceroidId voiceroidId) : base(voiceroidId)
 {
     // イベントハンドラ追加のためにプロパティ経由で設定
     this.Render    = new RenderComponent();
     this.Text      = new TextComponent();
     this.Play      = new PlayComponent();
     this.PlaySpeed = new MovableValue <AudioFileComponent.PlaySpeedConst>();
 }
Esempio n. 4
0
 /// <summary>
 /// コンストラクタ。
 /// </summary>
 /// <param name="voiceroidId">VOICEROID識別ID。</param>
 public ExoCharaStyle(VoiceroidId voiceroidId) : base(voiceroidId)
 {
     // イベントハンドラ追加のためにプロパティ経由で設定
     this.Render = new RenderComponent();
     this.Text = new TextComponent();
     this.Play = new PlayComponent();
     this.PlaySpeed = new MovableValue<AudioFileComponent.PlaySpeedConst>();
 }
Esempio n. 5
0
 /// <summary>
 /// コンストラクタ。
 /// </summary>
 /// <param name="id">VOICEROID識別ID。</param>
 /// <param name="name">VOICEROID名。</param>
 /// <param name="product">プロダクト名。</param>
 /// <param name="displayProduct">
 /// 表示プロダクト名。プロダクト名と同一ならば null を指定してよい。
 /// </param>
 internal VoiceroidInfo(
     VoiceroidId id,
     string name,
     string product,
     string displayProduct = null)
 {
     this.Id = id;
     this.Name = name;
     this.Product = product;
     this.DisplayProduct = displayProduct ?? product;
 }
 /// <summary>
 /// 指定したVOICEROID識別IDを持つ要素のインデックスを取得する。
 /// </summary>
 /// <param name="id">VOICEROID識別ID。</param>
 /// <returns>インデックス。見つからなければ -1 。</returns>
 public int IndexOf(VoiceroidId id)
 {
     for (int i = 0; i < this.Count; ++i)
     {
         if (this[i].VoiceroidId == id)
         {
             return(i);
         }
     }
     return(-1);
 }
Esempio n. 7
0
            /// <summary>
            /// コンストラクタ>
            /// </summary>
            /// <param name="id">VOICEROID識別ID。</param>
            /// <param name="canSaveBlankText">空白文の音声保存を行えるならば true 。</param>
            public ImplBase(VoiceroidId id, bool canSaveBlankText)
            {
                if (!Enum.IsDefined(id.GetType(), id))
                {
                    throw new InvalidEnumArgumentException(
                              nameof(id),
                              (int)id,
                              id.GetType());
                }

                this.Id = id;
                this.CanSaveBlankText = canSaveBlankText;
            }
Esempio n. 8
0
 /// <summary>
 /// コンストラクタ。
 /// </summary>
 /// <param name="id">VOICEROID識別ID。</param>
 /// <param name="controllable">操作対象として選択可能ならば true 。</param>
 /// <param name="name">VOICEROID名。</param>
 /// <param name="keywords">
 /// VOICEROIDを識別するためのキーワード列挙。キーワード不要ならば null 。
 /// </param>
 /// <param name="appProcessName">アプリプロセス名。</param>
 /// <param name="product">プロダクト名。</param>
 /// <param name="displayProduct">
 /// 表示プロダクト名。プロダクト名と同一ならば null を指定してよい。
 /// </param>
 internal VoiceroidInfo(
     VoiceroidId id,
     bool controllable,
     string name,
     IEnumerable <string> keywords,
     string appProcessName,
     string product,
     string displayProduct = null)
 {
     this.Id             = id;
     this.IsControllable = controllable;
     this.Name           = name ?? throw new ArgumentNullException(nameof(name));
     this.Keywords       =
         new ReadOnlyCollection <string>((keywords ?? new string[0]).ToList());
     this.AppProcessName =
         appProcessName ?? throw new ArgumentNullException(nameof(appProcessName));
     this.Product        = product ?? throw new ArgumentNullException(nameof(product));
     this.DisplayProduct = displayProduct ?? product;
 }
 /// <summary>
 /// コンストラクタ。
 /// </summary>
 /// <param name="voiceroidId">VOICEROID識別ID。</param>
 /// <param name="visible">表示するならば true 。</param>
 public VoiceroidVisibility(VoiceroidId voiceroidId, bool visible)
     : base(voiceroidId)
 {
     this.IsVisible = visible;
 }
Esempio n. 10
0
 /// <summary>
 /// コンストラクタ。
 /// </summary>
 /// <param name="voiceroidId">VOICEROID識別ID。</param>
 public VoiceroidVisibility(VoiceroidId voiceroidId) : this(voiceroidId, true)
 {
 }
Esempio n. 11
0
 /// <summary>
 /// 指定したVOICEROID識別IDを持つ要素が存在するか否かを取得する。
 /// </summary>
 /// <param name="id">VOICEROID識別ID。</param>
 /// <returns></returns>
 public bool Contains(VoiceroidId id) =>
 this.Any(item => item.VoiceroidId == id);
 /// <summary>
 /// コンストラクタ。
 /// </summary>
 /// <param name="voiceroidId">VOICEROID識別ID。</param>
 /// <param name="path">実行ファイルパス。</param>
 public VoiceroidExecutablePath(VoiceroidId voiceroidId, string path)
     : base(voiceroidId)
 {
     this.Path = path;
 }
Esempio n. 13
0
 /// <summary>
 /// コンストラクタ。
 /// </summary>
 /// <param name="voiceroidId">VOICEROID識別ID。</param>
 public YmmCharaRelation(VoiceroidId voiceroidId) : this(voiceroidId, null)
 {
 }
Esempio n. 14
0
 /// <summary>
 /// コンストラクタ。
 /// </summary>
 /// <param name="voiceroidId">VOICEROID識別ID。</param>
 public VoiceroidItemBase(VoiceroidId voiceroidId)
 {
     this.VoiceroidId = voiceroidId;
 }
Esempio n. 15
0
 /// <summary>
 /// コンストラクタ。
 /// </summary>
 /// <param name="voiceroidId">VOICEROID識別ID。</param>
 public VoiceroidVisibility(VoiceroidId voiceroidId) : this(voiceroidId, true)
 {
 }
 /// <summary>
 /// コンストラクタ>
 /// </summary>
 /// <param name="id">VOICEROID識別ID。</param>
 public Voiceroid2ImplBase(VoiceroidId id) : base(id, true)
 {
 }
Esempio n. 17
0
 /// <summary>
 /// VOICEROID識別IDがVOICEROID2ライクなソフトウェアを示しているか否かを取得する。
 /// </summary>
 /// <param name="id">VOICEROID識別ID。</param>
 /// <returns>
 /// VOICEROID2ライクなソフトウェアを示しているならば true 。
 /// そうでなければ false 。
 /// </returns>
 /// <remarks>
 /// VoiceroidId.V2Akari 等、ソフトウェア内キャラクターを表すIDは含めない。
 /// </remarks>
 public static bool IsVoiceroid2LikeSoftware(this VoiceroidId id) =>
 (id == VoiceroidId.Voiceroid2 || id == VoiceroidId.GynoidTalk);
Esempio n. 18
0
 /// <summary>
 /// VOICEROID識別IDに紐付く情報を取得する。
 /// </summary>
 /// <param name="id">VOICEROID識別ID。</param>
 /// <returns>VOICEROID情報。</returns>
 public static VoiceroidInfo GetInfo(this VoiceroidId id) =>
 Infos.TryGetValue(id, out var info) ? info : null;
Esempio n. 19
0
 /// <summary>
 /// コンストラクタ。
 /// </summary>
 /// <param name="voiceroidId">VOICEROID識別ID。</param>
 /// <param name="layer">
 /// レイヤー番号。範囲外ならばVOICEROID識別IDから決定する。
 /// </param>
 public AviUtlDropLayer(VoiceroidId voiceroidId, int layer) : base(voiceroidId) =>
     this.Layer =
Esempio n. 20
0
 /// <summary>
 /// コンストラクタ。
 /// </summary>
 /// <param name="voiceroidId">VOICEROID識別ID。</param>
 public AviUtlDropLayer(VoiceroidId voiceroidId) : this(voiceroidId, MinLayer - 1)
 {
 }
Esempio n. 21
0
 /// <summary>
 /// コンストラクタ。
 /// </summary>
 /// <param name="voiceroidId">VOICEROID識別ID。</param>
 public VoiceroidItemBase(VoiceroidId voiceroidId) => this.VoiceroidId = voiceroidId;
 /// <summary>
 /// コンストラクタ。
 /// </summary>
 /// <param name="id">VOICEROID識別ID。</param>
 public PlusExImpl(VoiceroidId id) : base(id, false)
 {
 }
Esempio n. 23
0
 /// <summary>
 /// コンストラクタ。
 /// </summary>
 /// <param name="voiceroidId">VOICEROID識別ID。</param>
 /// <param name="visible">表示するならば true 。</param>
 public VoiceroidVisibility(VoiceroidId voiceroidId, bool visible)
     : base(voiceroidId)
     =>
     this.IsVisible = visible;
Esempio n. 24
0
        /// <summary>
        /// 設定を基にAviUtl拡張編集ファイル関連の処理を行う。
        /// </summary>
        /// <param name="filePath">WAVEファイルパス。</param>
        /// <param name="voiceroidId">VOICEROID識別ID。</param>
        /// <param name="text">テキスト。</param>
        /// <param name="appConfig">アプリ設定。</param>
        /// <param name="exoConfig">AviUtl拡張編集ファイル用設定。</param>
        /// <param name="aviUtlFileDropService">
        /// AviUtl拡張編集ファイルドロップサービス。
        /// </param>
        /// <returns>処理結果とエラー文字列のタプル。</returns>
        private static async Task <Tuple <ExoOperationResult, string> > DoOperateExo(
            string filePath,
            VoiceroidId voiceroidId,
            string text,
            AppConfig appConfig,
            ExoConfig exoConfig,
            IAviUtlFileDropService aviUtlFileDropService)
        {
            if (appConfig.IsExoFileMaking)
            {
                var exoFilePath = Path.ChangeExtension(filePath, @".exo");

                // 共通設定更新
                ExoCommonConfig common     = null;
                var             gcmzResult = GcmzDrops.FileDrop.Result.Success;
                if (
                    appConfig.IsSavedExoFileToAviUtl &&
                    appConfig.IsExoFileParamReplacedByAviUtl)
                {
                    common     = exoConfig.Common.Clone();
                    gcmzResult = UpdateExoCommonConfigByAviUtl(ref common);
                }

                // ファイル保存
                var exo =
                    await DoOperateExoSave(
                        exoFilePath,
                        filePath,
                        text,
                        common ?? exoConfig.Common,
                        exoConfig.CharaStyles[voiceroidId]);

                if (exo == null)
                {
                    return
                        (Tuple.Create(
                             ExoOperationResult.SaveFail,
                             @".exo ファイルを保存できませんでした。"));
                }

                // ファイルドロップ
                if (appConfig.IsSavedExoFileToAviUtl)
                {
                    // UpdateExoCommonConfigByAviUtl で失敗しているなら実施しない
                    var failMessage =
                        (gcmzResult != GcmzDrops.FileDrop.Result.Success) ?
                        MakeFailMessageFromExoDropResult(gcmzResult) :
                        await DoOperateExoDrop(
                            exoFilePath,
                            exo.Length,
                            appConfig.AviUtlDropLayers[voiceroidId].Layer,
                            aviUtlFileDropService);

                    // 処理失敗時、そもそも AviUtl が起動していないなら成功扱い
                    if (failMessage != null && Process.GetProcessesByName(@"aviutl").Length > 0)
                    {
                        return(Tuple.Create(ExoOperationResult.DropFail, failMessage));
                    }
                }
            }

            return(Tuple.Create(ExoOperationResult.Success, (string)null));
        }
Esempio n. 25
0
 /// <summary>
 /// コンストラクタ。
 /// </summary>
 /// <param name="voiceroidId">VOICEROID識別ID。</param>
 public YmmCharaRelation(VoiceroidId voiceroidId) : this(voiceroidId, null)
 {
 }
Esempio n. 26
0
 /// <summary>
 /// VOICEROIDプロセスを取得する。
 /// </summary>
 /// <param name="id">VOICEROID識別ID。</param>
 /// <returns>プロセス。</returns>
 public IProcess Get(VoiceroidId id) => this.Processes.First(p => p.Id == id);
Esempio n. 27
0
 /// <summary>
 /// コンストラクタ。
 /// </summary>
 /// <param name="voiceroidId">VOICEROID識別ID。</param>
 public VoiceroidExecutablePath(VoiceroidId voiceroidId) : this(voiceroidId, null)
 {
 }
Esempio n. 28
0
 /// <summary>
 /// コンストラクタ。
 /// </summary>
 /// <param name="voiceroidId">VOICEROID識別ID。</param>
 /// <param name="ymmCharaName">
 /// 『ゆっくりMovieMaker』のキャラ名。 null ならばVOICEROID識別IDから決定する。
 /// </param>
 public YmmCharaRelation(VoiceroidId voiceroidId, string ymmCharaName)
     : base(voiceroidId)
 {
     this.YmmCharaName = ymmCharaName ?? voiceroidId.GetInfo()?.Name ?? "";
 }
Esempio n. 29
0
 /// <summary>
 /// VOICEROID識別IDに対応するアイテムを取得するインデクサ。
 /// </summary>
 /// <param name="id">VOICEROID識別ID。</param>
 public TItem this[VoiceroidId id] => this.GetItem(id);
Esempio n. 30
0
 /// <summary>
 /// コンストラクタ。
 /// </summary>
 /// <param name="voiceroidId">VOICEROID識別ID。</param>
 /// <param name="ymmCharaName">
 /// 『ゆっくりMovieMaker』のキャラ名。 null ならばVOICEROID識別IDから決定する。
 /// </param>
 public YmmCharaRelation(VoiceroidId voiceroidId, string ymmCharaName)
     : base(voiceroidId)
 {
     this.YmmCharaName = ymmCharaName ?? voiceroidId.GetInfo()?.Name ?? "";
 }
Esempio n. 31
0
 /// <summary>
 /// コンストラクタ。
 /// </summary>
 /// <param name="voiceroidId">VOICEROID識別ID。</param>
 /// <param name="layer">
 /// レイヤー番号。範囲外ならばVOICEROID識別IDから決定する。
 /// </param>
 public AviUtlDropLayer(VoiceroidId voiceroidId, int layer) : base(voiceroidId)
 {
     this.Layer =
         (layer <MinLayer || layer> MaxLayer) ? ((int)voiceroidId * 2 + 10) : layer;
 }
Esempio n. 32
0
 /// <summary>
 /// コンストラクタ。
 /// </summary>
 /// <param name="voiceroidId">VOICEROID識別ID。</param>
 /// <param name="path">実行ファイルパス。</param>
 public VoiceroidExecutablePath(VoiceroidId voiceroidId, string path)
     : base(voiceroidId)
 {
     this.Path = path;
 }
 /// <summary>
 /// コンストラクタ。
 /// </summary>
 /// <param name="voiceroidId">VOICEROID識別ID。</param>
 public VoiceroidExecutablePath(VoiceroidId voiceroidId) : this(voiceroidId, null)
 {
 }
Esempio n. 34
0
 /// <summary>
 /// プロセスを取得する。
 /// </summary>
 /// <param name="id">VOICEROID識別ID。</param>
 /// <returns>プロセス。</returns>
 public IProcess Get(VoiceroidId id)
 {
     return this.Processes.First(p => p.Id == id);
 }
Esempio n. 35
0
 /// <summary>
 /// コンストラクタ>
 /// </summary>
 /// <param name="id">VOICEROID識別ID。</param>
 /// <param name="canSaveBlankText">空白文の音声保存を行えるならば true 。</param>
 public Voiceroid2ImplBase(VoiceroidId id, bool canSaveBlankText)
     : base(id, canSaveBlankText)
 {
 }