11:23

Microsoft Speech Platform 11を使った音声合成ファイル作成環境構築メモ。

  • 背景 Microsoft Speech を使ってテキストから音声ファイルを作成するプログラムを作っていたが、OSをWindows 7から10に変えたことで、音声ファイルのイントネーションが変わってしまった。
    そこで、Windows 7音声合成開発環境をVMWare仮想マシンに作成しておき、以前と変わらない音声ファイルを作成できるようにしたかった。

  • 手順

  • VM WareにWindows 7の環境を作成する
  • .Net 4.0をインストールする(SDKが使用するので)
  • Microsoft Speech SDK をインストールする(x86版を使用)
  • Speech Platform Runtimeをインストールする
  • Microsoft Server Speech Text to Speech Voice (ja-JP, Haruka)をインストールする(日本語音声)

  • 参考

Microsoft Speech Platform SDK 11 Requirements and Installation

c# - Error loading Microsoft Speech SDK v11 - Stack Overflow

俺の覚書 VMWareWorkstation(VMWarePlayer)の設定で性能上気をつけるべき所(大幅改定)

16:20

DockerをWindows10にインストールしたのでメモ。

  1. Docker for Windowsをインストール
  2. 再起動後、デスクトップのDockerを実行すると、"docker-user"グループにユーザーの追加が必要と言われる。 そもそも、docker-user グループがないので、管理ツールでグループを追加してユーザーも追加した。 その後、再起動。
  3. 再起動後、Docker サービスが実行してよいか? というダイアログが出る。 「はい」を押す。
  4. Docker for Windowsは起動したがHyper-V feature is not enabledと言うダイアログが表示される。 とりあえず、OKを押す。
  5. タスクトレイのDockerアイコンからSwitch to Windows Containers... をクリック

とまあ、ここまででDockerはインストールできるのだが、やりたかったことはWindows7のコンテナ化で、Docker for WindowsではWindows nano server もしくは Windows Server CoreしかコンテナOSとしては実行できないようなので、結局、無駄だった。まあ、何かで使うかもなので、アンインストールはせずにおいておくかな。

14:06

Jenkins 1.537を2.92にアップデートする手順をメモしておく。 なお、動作OSはWindowsである。

  1. Jenkinsサービスを停止
  2. 既存のJenkinsフォルダの内容をバックアップしておく
  3. Jenkinsサービスの再開
  4. Jenkinsの管理-「自動でアップグレード」を行う
  5. Jenkinsサービスを停止
  6. \JREを最新のJREに更新する(今回はC:\Program Files\Java\jre1.8.0_151を使用した)
    Jenkinsサービスを再開してもJavaのクラスがないというエラーが出て起動できない。
  7. Jenkinsサービスの再開
  8. ログインしてJenkinsの管理ページに行く。
    新しいバージョンで起動するはず。またJenkinsの管理ページに行くと警告が出ているはず。
  9. すべてのプラグインのアップデートを行う
  10. Jenkinsを再起動する(サービスを再起動したほうが早い?)
  11. プラグイン関連の警告が出なくなるまでアップデートを行う(9, 10を繰り返す)
  12. ログインしてJenkinsの管理ページに行き、[Disable CLI over Remoting]をクリック。
    後の警告は動作に影響が出るかもしれないので、とりあえず無視。

10:58

Microsoft Speechを使って文字列から音声ファイルを作成していたが、開発環境をWin7→Win10に変えたことで以前とはアクセントや読みが異なる音声が作られるようになってしまった。
文字列を解析するところが変わったように思うのだが、どのモジュールか分からなかったので、結局、Win7の環境でファイルを作成することで対応した。VMなどで開発環境はきちんと残しておかないといけないなあというのが教訓。

18:43

昨日の神戸マラソンの結果と反省。 当初の目標は6時間だったが、結果は6時間40分。前回、コースの厳しい和倉マラソンで6:30を切ったことと、今回はソロで走るので自分のペースでいけば6時間を切れるかと思ったけど、まったくダメでした。
15kmまでは5:30のペースについていけたけど、そこからはついて行けなかった。レース前は15kmを8分、30kmを8分30秒、30kmからは9分とか計画してたけど、まったく計画通りにできなかった。よく考えれば、その目標を実現するだけの根拠がない(練習をしていなかった)んだよなあ。
ただ、次のページを参考にして、今までより補給は上手くできてたと思う。レース後の疲れも、これまでよりはましだった。 それでも、途中でお腹がすいた感じがあったから、もっと食べてもよかったのか? せやけど、あんまり食べ過ぎるとお腹がタポタポになっちゃうからなあ。

第152回:マラソン大会中の補給食。基本の「き」をマスター!シミュレーションまでしっかりと!|走るなら食べよう!~体は必ず変わります~|JogNote連載・走る人の為の健康食事コラム

今後は地道にトレーニングを積んでいって、何とか6時間を切りたい。そうしないと出られるレースが限られるかならなあ。  

それと、寒い中一所懸命にサポートしていただいた、マラソンのスタッフの方には頭が下がる。ほんとにありがとうございました。

16:53

データベースの既存データを変更して、新しいデータとして追加するPower Shell スクリプトを書いたので、晒しておく。(DBMSSQLite)

基本的な流れは次の通り。

  1. 既存のデータから使用したいデータをテンポラリーテーブルにコピーする。
  2. テンポラリーテーブルのデータの一部を変更する
  3. 元のテーブルに更新データを変更する
# SQLite.dllをロードする(SQLite.Interop.dllも必要)
$ScriptBase = Split-Path ( & { $myInvocation.ScriptName } ) -parent
$dbMOdule = Join-Path $ScriptBase System.Data.SQLite.dll
[void][System.Reflection.Assembly]::LoadFile( $dbModule )

# DBに接続
$sqliteCon = New-Object System.Data.SQLite.SQLiteConnection
$sqliteCon.ConnectionString = "Data Source = sample.db"
$sqliteCon.Open()

# テンポラリーテーブルがあれば削除する
$sqlcmd = New-Object System.Data.SQLite.SQLiteCommand($sqliteCon)
$sqlcmd.CommandText = "DROP TABLE IF EXISTS temp_table;"
$sqlcmd.ExecuteNonQuery()

# 既存テーブルのデータを使ってテンポラリーテーブルを作成する
$sqlcmd.CommandText = "CREATE TABLE temp_table AS SELECT * FROM table WHERE date = '2017-11-14';"
$sqlcmd.ExecuteNonQuery();

# データの更新
$sqlcmd.CommandText = "UPDATE temp_table SET date='今日の日付'"
$sqlcmd.ExecuteNonQuery()

# データを元のテーブルに追加する
$sqlcmd.CommandText = "INSERT INTO table SELECT * FROM temp_table"
$sqlcmd.ExecuteNonQuery()

# テンポラリテーブルの作徐
$sqlcmd.CommandText = "DROP TABLE temp_table"
$sqlcmd.ExecuteNonQuery()

# DBとの接続解除
$sqliteCon.Close()

参考にさせていただいたページ

PowerShell から .NetFramework 版 SQLite を使う - himorogiの日記

14:57

SQLiteCommand.ExecuteNonQuery()でSELECT文を実行して、その戻り値が0であることに悩んでいたが、SELECT文ではデータの変更がないので0が変えるのが正しいそうだ。うへぇ、はまった。

stackoverflow.com