macOS(Big Sur)のRuby(v2.6)でAquesTalk2

AquesTalk2のdyldをfiddle/importで読み込めなかったのでffiを使っています。
saronpasu/test_aques_talk2.rbを参考に書きました。

require "ffi"
module LibAquesTalk2
  extend FFI::Library
  ffi_lib "libAquesTalk2Eva.dylib"
  attach_function("AquesTalk2_Synthe_Utf8", "AquesTalk2_Synthe_Utf8", [:string, :int, :buffer_out, :int], :pointer)
  attach_function("AquesTalk2_FreeWave", "AquesTalk2_FreeWave", [:pointer], :void)
#  attach_function("my_printf", "printf", [ :string, :string ], :int)
end

class AquesTalk2_Error < StandardError; end
class AquesTalk2
  include LibAquesTalk2

  # 読み上げ速度の初期値
  DEFAULT_ISPEED =         100
  # 音声話者の初期値
  DEFAULT_PHONT  =           0
  # 出力ファイル名の初期値
  DEFAULT_OUTPUT = 'output.wav'
  
  # 読み上げ速度アクセサ
  attr_accessor :ispeed
  # 読み上げ話者アクセサ
  attr_accessor :phont
  # 出力ファイル名アクセサ
  attr_accessor :output

  # 引数なしでインスタンス生成された場合、初期値を用いる
  def initialize(ispeed = nil, phont = nil)
    @ispeed ||= DEFAULT_ISPEED
    @phont  ||= DEFAULT_PHONT
  end
  
  # テキストを音声へ変換する処理( AquesTalkライブラリのラッパーメソッド )
  def synthe(input, output = nil, ispeed = nil, phont = nil)
    begin
      raise(AquesTalk2_Error.new('input arg required.')) unless input
    rescue AquesTalk2_Error => error
      return false
    end
    
    input.chomp!
    output ||= DEFAULT_OUTPUT
    ispeed ||= @ispeed
    phont  ||= @phont

    begin
=begin
      result = @@synthe.call(input, ispeed, size = 0, phont) # ←このコードが実行された時点でコアダンプ
=end

=begin
      以下のように修正し、正常に動作しました。
=end
      size = [0].pack('i!')
      result = LibAquesTalk2.AquesTalk2_Synthe_Utf8(input, ispeed, size, phont)
      size = size.unpack('i!')
      size = size[0]

      p "size:" + size.to_s

=begin
      raise(AquesTalk2_Error.new('AquesTalk2_Synthe_Utf8 error: '+size.to_s)) if size.zero?
=end

=begin
      以下のように修正し、正常に動作しました。
=end
    if size == 0
      raise(AquesTalk2_Error.new('AquesTalk2_Synthe_Utf8 error: '+size.to_s))
      end
      rescue AquesTalk2_Error => error
      return false
    end

=begin
    open(output, 'w+b'){|f|f.print(result)}
=end
    
=begin
      以下のように修正し、正常に動作しました。
=end
    open(output, 'w+b'){|f|f.print(result.read_string(size))}


    free_wave(result)
    return true
  end
  
  # メモリ解放を行う処理のラッパーメソッド
  def free_wave(wav)
    LibAquesTalk2.AquesTalk2_FreeWave(wav)
  end
end

=begin
ここから、テスト処理です。
=end

# 評価用のテキストソース
sample_source = 'こんにちは、しずきたかひろです。'
# 出力ファイル名
sample_file = 'sample.wav'

# インスタンス生成
aques_talk = AquesTalk2.new
# テキストから音声ファイルを生成(AquesTalk2 ライブラリを実行)
aques_talk.synthe(sample_source, sample_file)

References

macosのXqurtzターミナルからubuntuのtmuxのバッファをコピー/ペースト

Xquertzのターミナルからubuntuに入り、tmuxを起動。

コピーにxclipを使うからそれをaptでインストール。そして、tmux.confに下の設定コマンドを追加。これでマウスで範囲選択をしたときに自動的にクリップボードに選択したバッファがコピーされる。

set-window-option -g mouse on
bind-key -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i"

ペーストが「shift+option+クリック」。

wine(32bit)で.net framework 3.5

xubuntu-18.04.5-desktop-i386.isoのliveでwine(32bits)を入れて、winetricksでフォントとdllを入れて、.net3.5なソフトウェアが動きました。

参考

java mavenのhttpミラー

maven2のhttpのリポジトリ
http repository of maven2

        <repository>
            <id>insecure.repo1.maven.org</id>
            <name>Java.net Repository for Maven 2</name>
            <url>http://insecure.repo1.maven.org/maven2</url>
            <layout>default</layout>
        </repository>

        <repository>
            <id>download.eclipse.org</id>
            <name>eclipselink</name>
            <url>http://download.eclipse.org/rt/eclipselink/maven.repo</url>
        </repository>
        <pluginRepository>
            <id>maven2-repository.dev.java.net</id>
            <url>http://insecure.repo1.maven.org/maven2/</url>
        </pluginRepository>

参考

HSPのGPB converterのフロントエンドを動かすツール

変換したあとのログファイルボタンを人の代わりに押したり、ファイルを別のフォルダにコピーします。

更新履歴

  • 2021年3月29日
    • 初リリース
  • 2021年3月31日
    • WAIT_TIMEを10から50に変更した。
    • 「変換したら、つぎのフォルダに移す」にチェックを入れていていて移したあとに、移す前のフォルダにある.gpbと.materialを消していなかったのを消すように直した。
  • 2021年4月6日
    • GPB converterの変換がおわるのを待つようにした。
    • モデルファイルのフォルダがないときのエラーメッセージを変えた。
    • GPB converterが半角空白のあるファイルを変換できないから、変換するモデルファイル名に空白がある場合に、エラーになるようにした。

つぎのソースをhspeditにコピーしてコンパイルしてください。

"HSPのGPB converterのフロントエンドを動かすツール" の続きを読む

HSPでインプットボックスの文字列をすべて選択する

WAIT_TIME=10
#define apl_keycode_space 32
GPB_converter_title = "GPB converter ver"
goto *main
#deffunc select_text_all
	keybd_event 17,0,0,0 ; VK_CONTROLキーを押す
	keybd_event 'A',0,0,0; aキーを押す
	keybd_event 'A',0,2,0; a:KEYEVENTF_KEYUP キーをはなす
	keybd_event 17,0,2,0 ; VK_CONTROL:KEYEVENTF_KEYUP キーをはなす
	;aplkey 46: wait 10
	wait 10
	return
*main

arm64 ubuntu linuxのgasでpc98で起動する画像プログラムを書いて、画像プログラム起動システムを書きこんだフロッピーディスクの仮想イメージをつくった

エミュを使ってIPLプログラミングもどき (2)(PC-98のプログラム作成に関するエトセトラ)を参考に、gasとnp2kaiでやってみた。

asm1.S

.code16
.text
.globl _start
.org 0
_start:
	mov $0x0a000, %ax
	mov %ax, %es
	mov $23, %cx
	mov $0x2000, %di
	add $80, %di
	mov $0x0f1, %ax
POINT1:
	push %cx
	mov $30, %cx
	rep stosw
	pop %cx
	add $100, %di
	loop POINT1

	mov $23, %cx
	mov $0x087, %ax
	mov $80, %di
POINT2:
	push %cx
	mov $30, %cx
	rep stosw
	pop %cx
	add $100, %di
	loop POINT2

POINT3:
	jmp POINT3

.org +0x400

asでアセンブルして、How to generate plain binaries like nasm -f bin with the GNU GAS assembler?(stackoverflow)を参考にldとobjdumpでバイナリコードだけにし、初心者のためのPC-98プログラミング(1)【OS無しでbeepを鳴らす】(qiita)を参考にhoodと結合して、np2で起動する.TFDフロッピーイメージファイルにする。

"arm64 ubuntu linuxのgasでpc98で起動する画像プログラムを書いて、画像プログラム起動システムを書きこんだフロッピーディスクの仮想イメージをつくった" の続きを読む

MS-IMEにテキスト辞書を登録

ユーザーコメント付きの辞書を登録したくてやってみた。

MS-IMEにインポートできるMicrosoft IME 形式テキスト(*.txt)は、

  • メモ帳で作れるプレーンテキスト
  • 文字コードはUTF-16 LE
  • 「!」文字の後ろはコメントに見なされて書いてない扱いになる。
  • 登録する単語は1語を、よみ・単語・品詞・ユーザーコメントの順にそれぞれをタブ文字で区切った1行で書く。※品詞の種類の一覧はMS-IMEのプロパティを参照。
  • ユーザーコメントは120文字数ぐらいの制限があるらしい。ユーザーコメントは変換候補をスペースキーで出したときに、その登録単語で待つとポップアップで見れる。
!よみ	単語	品詞	ユーザーコメント
あおじろ	青白	名詞	白みがかった青いいろのこと。"pale" #小学1年生
しけん	試験	名詞	何かをしらべること。"test","examin" #小学4年生
"MS-IMEにテキスト辞書を登録" の続きを読む

[macOS]neko project IIでpc98アセンブラ

neko projectIIを入れる
※マック用のSDL2.framework を /Library/Frameworks にコピー(ReadMe.txtより)

Garbage for FreeDOSからFreeDOS(98)起動ディスクイメージをダウンロードして解凍

上記ディスクは250MBですが、拙作1.2MBディスクにFreeDOS、SE3、LHAを入れたデモ作成用フロッピーディスクイメージ (.d88形式)を置いておきます。

"[macOS]neko project IIでpc98アセンブラ" の続きを読む