ラベル python の投稿を表示しています。 すべての投稿を表示
ラベル python の投稿を表示しています。 すべての投稿を表示

2018年3月11日日曜日

pythonでキャリッジリターン(CR)を使う。

徐々にPython3へ移行しようと思っています。
なので、文頭は#!/usr/bin/env python3と明記しています。

キャリッジリターン(CR)をPythonで使ってみます。
標準出力が改行せず表示されるので、進行状況がわかりやすく表示できるようになります。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys
import time
# コンソールのテスト

def main():
    pass
    for i in range(1000):
        sys.stdout.write( "\r+%3d" % i )
        sys.stdout.flush()
        time.sleep(0.1)

    print("\n")

if __name__ == '__main__':
    main()

pythonで外部コマンドを実行するにはsubprocessを使う

このところラズパイで色々遊んでますが、完成まで至っていないので記事にするほどのまとまりがないのが困りごとかな。

簡単ですが、メモとして、pythonで外部コマンドを実行するには subprocess を使う。をまとめます。

res = subprocess.call(cmd,shell=True,stdout=subprocess.DEVNULL,stderr=subprocess.DEVNULL)


shell=Trueで、ストリング形式で動いた、将来的には使わない方がいいみたい。
ffmpegを実行させる際、Trueじゃないとうまく動かなかった。

stdout=subprocess.DEVNULLとstderr=subprocess.DEVNULLを設定すれば標準出力が出なくなり、詳細を表示したくない場合は、これを設定。


2017年10月8日日曜日

ubuntu 16.04 で、selenium+pythonを使い「早起き生活」に自動操作でログインしてみる

ubuntu 16.04 で、selenium+pythonを使い「早起き生活」に自動操作でログインしてみる。
一昔前にやってみたかったことが、今は簡単にできるようになっています。

今回は、生活改善応援サイト「早起き生活」にログイン、いま起きた、ログアウトを自動操作してみます。

これと、目覚し時計、何かのボタンを連動させれば記録できるようになりますね。

#!/usr/bin/python
# coding: UTF-8

# 生活改善応援サイトにログインしてログアウトする。

# ライブラリの読み込み
from selenium import webdriver
from time import sleep

# 初期設定
url = "https://www.hayaoki-seikatsu.com/"
MailAD = "メールアドレス"
PassWD = "パスワード"

# ドライバの生成
# 問題なければFirefoxブラウザが自動的に起動する
driver = webdriver.Firefox()
# Firefox上でURLを指定してGETリクエスト
driver.get(url)

print "トップページ",driver.title.encode('utf-8')
inputMail = driver.find_element_by_name('text_mail')
inputMail.send_keys(MailAD)
inputPass = driver.find_element_by_name('text_password')
inputPass.send_keys(PassWD)
inputPass.submit()
sleep(3)
print "ログイン",driver.title.encode('utf-8')
inputNow = driver.find_element_by_name('btn_rising_now')
inputNow.submit()
sleep(3)
# ログアウト
driver.find_element_by_link_text('ログアウト').click()
sleep(3)
print "ログアウト",driver.title.encode('utf-8')
# 問題なければFirefoxも終了する
driver.close()

2017年10月1日日曜日

ubuntu 16.04 に selenium をインストールしてみる。for Python

ubuntu 16.04 に selenium をインストールしてみる。
Google先生の説明ではパランパランだったので、簡単にここにまとめます。

sudo apt-get install python-selenium
"geckodriver"が無いとしかられると思いますので、

https://github.com/mozilla/geckodriver/releases

このアドレスから、該当をダウンロード。


今回は、これを使用。geckodriver-v0.19.0-linux64.tar.gz

wget https://github.com/mozilla/geckodriver/releases/download/v0.19.0/geckodriver-v0.19.0-linux64.tar.gz
tar -zxvf ./geckodriver-v0.19.0-linux64.tar.gz
sudo cp ./geckodriver /usr/local/bin
テストコードで、ブラウザーが立ち上がればOK
#!/usr/bin/python
# coding: UTF-8

# ライブラリの読み込み
from selenium import webdriver
# ドライバの生成
# 問題なければFirefoxブラウザが自動的に起動する
driver = webdriver.Firefox()
# Firefox上でURLを指定してGETリクエスト
driver.get("http://www.google.co.jp/")
# ドライバを閉じる
# 問題なければFirefoxも終了する
driver.close()
以上、こんな感じでした。

2017年9月26日火曜日

Raspberry Pi 3 で、HDMI 3.5inch LCDモニタ のタッチスクリーンを設定(ドライバー)してみる。

この記事の続きになります。

Amazonで購入した OSOYOO 3.5インチLCD のタッチスクリーンを設定(ドライバー)してみた。

Raspberry Pi(Linux OS装着)で3.5” タッチスクリーン(HDMI版)のドライバーをインストールする
このWebをみればできると思いますが、簡単にまとめてみます。

ドライバーを、ここからダウンロードする。

# ドライバーをダウンロードする。
wget http://osoyoo.com/driver/LCD_show_35hdmi.tar.gz

# 実行許可、解凍、移動、バックアップ、設定
sudo chmod 777 LCD_show_35hdmi.tar.gz
tar -xzvf LCD_show_35hdmi.tar.gz
cd LCD_show_35hdmi
sudo ./LCD_backup
sudo ./LCD35_720*480

数分後、再起動して完了です。
復元する場合は

# 復元する
sudo ./LCD_restore

私の場合、Raspberry Pi 3 をコンソールで使用している為、Python+Pygameで作動を確認しました。

#!/usr/bin/python
# coding: UTF-8

import os
import pygame
from pygame.locals import *

os.putenv('SDL_MOUSEDEV','/dev/input/event0')
dSize = (720,480)
pygame.init()
lcd = pygame.display.set_mode(dSize)

if __name__ == "__main__":
  while True:
    # Scan touchscreen events
    for event in pygame.event.get():
      if event.type == MOUSEMOTION:
        pos = pygame.mouse.get_pos()
        print pos
      if event.type == KEYDOWN:
        exit()

結果は、X方向の数値はでるものの、Y方向が0を表示したまま、タッチスクリーンは使い物になりませんでした。
もともと期待はしていませんでしたが残念です。

次は 液晶モニター3.5インチ を購入して試してみたい。

2017年9月22日金曜日

Raspberry Pi3で、コンソールからpygameを使用して画面表示に挑戦(その3)

この記事の続き。

単純に画像ファイルを表示するだけでは、変化が無く面白くないので、BeautifulSoupを使ってWebの画像とデータを表示するものを作成してみました。

Web scrapingは、個人利用か検索用に使用するに留めるべき、マナーがありますのでご利用は計画的に。

今回作成したコードは、Raspberryで個人的に閲覧できるようにしたものです。
ご指摘などございましたらコメント下さい。

#!/usr/bin/python
# coding: UTF-8

import pygame
import urllib2
from time import sleep
from bs4 import BeautifulSoup
from PIL import Image
import cStringIO

def getZaifxChart():
    # urlからhtmlを読み込み、BeautifulSoupで処理する。
    url = "http://zai.diamond.jp/fx?time=1d#charttop"
    html = urllib2.urlopen(url).read()
    soup  = BeautifulSoup(html,"html.parser")
    tagDiv = soup.find_all("div",class_="world-chart-main2 clearfix")

    listTitle  = []
    listNumber = []
    listUrl    = []
    listKey    = []
    # タイトル、URLを抽出する。
    for items in tagDiv:
        for item in items.find_all("div",class_="money-title2 clearfix"):
            for itemTitle in item.find_all("span",class_="chart-title"): # title
                listTitle.append(itemTitle.get_text().encode('utf_8'))
            for itemNumber in item.find_all("span",class_="chart-number"): # Number
                listNumber.append(itemNumber.get_text().split(" ")[0].encode('utf_8'))
        for item in items.find_all("img",class_="refresh-element"): # url,key
            listUrl.append(item["src"])
            listKey.append(item["alt"])

    # PIL で画像を処理する(拡大)。
    listChartUrl = []
    for i in range(0,len(listTitle)):
        # タイトル、価格、アドレス、キー
        listChartUrl.append([listTitle[i],listNumber[i],listUrl[i],listKey[i]])

    return listChartUrl

def main():
    #初期設定
    dSize = (720,480)
    colorBG   = (0,0,0)
    colorFont = (255,255,255)
    # pygame初期設定
    pygame.init()
    lcd = pygame.display.set_mode(dSize)
    lcd.fill(colorBG)
    txtfont = pygame.font.Font("font/tihayagothic.ttf",40)

    # チャートを表示する
    listChartUrl = getZaifxChart() # チャートのURLを取得
    for rows in listChartUrl:
        # urlから画像を読み込みPILでオープンする
        imageFile = cStringIO.StringIO(urllib2.urlopen(rows[2]).read())
        img = Image.open(imageFile).convert("RGB")
        x,y = img.size # サイズを取得する
        imgRe= img.resize((int(x*3.5),int(y*3.5)))
        # 画像データをpygameフォーマットに変換
        imggm = pygame.image.fromstring(imgRe.tobytes(),imgRe.size,imgRe.mode).convert()
        # テキストを書き出す
        fonttext  = txtfont.render(rows[0].decode('utf-8')+"  "+rows[1].decode('utf-8'),False,colorFont,colorBG)
        # 画面に画像を描画する
        lcd.fill(colorBG)
        lcd.blit(imggm,(70,10))
        lcd.blit(fonttext,(75,425))
        pygame.display.update()
        sleep(2)
main()

2017年9月20日水曜日

Raspberry Pi3で、コンソールからpygameを使用して画面表示に挑戦(その2)

Raspberry Pi3で、コンソールからpygameを使用して画面表示に挑戦(その1) の続きです。

まだ完成していませんが、ほぼいい感じにまとまり始めています。

色々試して行く中で、pygameは日本語フォントが使えず、そのままでは文字化けして表示できませんでした。 なので、こちらの記事を参考に試して見たいと思います。

試用してみるフォントとルールはこちらを参照。

個人使用になるはずなので、ひとまず熟読する。
WindowsのMSゴシック、MS明朝などはコピーするとライセンス違反になりますので、技術的に難しくないですが使用しません。

コードはこんな感じ。
# 初期設定
pygame.init()
lcd = pygame.display.set_mode(dSize)
# フォントを設定する。
textfont = pygame.font.Font("ooooo.ttf",40) # 同じフォルダに入れておく。
textbuff = textfont.render("ここにテキストを入れる",False,colorFont,colorBG)
# 画面に画像を描画する
lcd.fill(colorBG)
lcd.blit(textbuff,(0,0))
pygame.display.update()

python の encode() と decode() の関係は?


python 2.7 を使っていると、 ”UnicodeDecodeError: 'ascii' codec can't decode” としかられます。 正直、よくわかっていませんでした。

なので、

encode() はstr文字列を返し、 decode() はunicode文字列を返すと思っておけば良い。

と、覚えることとしました。

以上

2017年9月17日日曜日

Ubuntu 16.04 LTS にAtom1.21Beta をインストールしてみた。

Ubuntu 16.04 LTS にAtom1.21Beta をインストールしてみた。

こことここを参考にした。

ATOM beta Download .deb をダウンロードする。

コマンドでインストールする。
sudo apt install atom-amd64.deb


Python環境のパッケージをまとめてコマンドで導入する。
apm install atom-beauty autocomplete-paths autocomplete-python file-icons highlight-selected Hydrogen japanese-menu script


IDEをインストールしてみる。
apm install atom-ide-ui ide-python

IDEのセッティングは後日調べます。

IDEは、僕の環境ではクラッシュするようなので、しばらく様子見します。

2017年9月8日金曜日

Ubuntu16.04 Pythonの下準備

Python関連の下準備をします。

・python-devのインストール
sudo apt-get install python-dev

・ipythonのインストール
sudo apt-get ipython

・Pythonバージョン確認
python -V


・pipのインストール
(apt-getでもインストールできるが、古い場合があるので)
wget https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py

or

sudo apt install python-pip
pip install --upgrade pip
(最新にする。)

・pipのバージョン確認
pip --version

・スクレーピング
pip install beautifulsoup4
pip install lxml
pip install html5lib


以上

2017年2月11日土曜日

PythonのIDEにNetbeans8.1日本語版はいかがでしょうか。

PythonのIDEにNetbeans8.1日本語版を使用することにしました。
数年前に使ったことがあったので親しみがあります。

現時点(17/2/11)では、8.2が最新のようですが
Pythonプラグインが見つからなかったので、
今回は8.1をインストールすることにしました。

参考にしたサイトはこちら
NetBeansにpythonプラグインをインストールする。

アンインストールするには、 uninstall.sh を実行。
(インストールしたフォルダから検索する)

NetBeansはこちらのサイトからDL。
NetBeans IDE 8.1 ダウンロード
プラグインはこちらのページからDL。
Python support for NetBeans IDE 8.1

netbeans-8.1-cpp-linux-x64.sh に実行権を与えて実行。
指示に従いインストールを完了させる。プラグインはサイト参照。
以上。

PyAutoGUI

以前、pythonで左クリックを連打してみる。
とpythonでGUI操作を自動化してみる。
で xautomation を使用してGUI操作をPythonで遊んでみましたが、
最近は、 PyAutoGUI という、もう少し便利になったものがあるようです。
いつになるかわかりませんが、「Tkinter」を使って、
複雑な左クリックを連打してみたいと思います。


Welcome to PyAutoGUI’s documentation!


ubunt16.04にインストールするには

sudo apt-get install python-xlib scrot
pip install pyautogui
 
 
サンプルコード

# -*- coding: utf-8 -*-  
# Copyright © 2017 takeshi
import pyautogui

screenWidth, screenHeight = pyautogui.size()
print screenWidth, screenHeight
s = pyautogui.screenshot()
s.save('screenshot1.png') 
 
 

2012年10月11日木曜日

pythonで、音声合成(AquesTalk2)を試してみた。

pythonで、音声合成(AquesTalk2)を試してみた。

AquesTalk2のダウンロードとインストールは、こちらを読んでね。

Linuxでの共有ライブラリーの読み込み方に苦戦しましたが、なんとか成功。
POINTERの使い方を見つけるのにめちゃくちゃ時間がかかってしまった。
評価版は、ナ行とマ行がヌに変換されるので、雰囲気をつかむだけですが、 結構快適に使えそうです。でも、作り込むなら OpenJTalk の方がよさげ。


import wave
import pyaudio
import StringIO
from ctypes import *

lib = cdll.LoadLibrary("libAquesTalk2.so.2")

str    = c_char_p("わたしたわしわたしたわ、なにぬねの、まみむめも、あかさ")
size   = c_int(10)

lib.AquesTalk2_Synthe_Utf8.restype = POINTER(c_char)
wav_p = lib.AquesTalk2_Synthe_Utf8(str,100, byref(size),0)

print("size is %d" % size.value)
output = StringIO.StringIO(wav_p[:size.value])
wf = wave.open(output, "rb")

# ストリームを開く
p = pyaudio.PyAudio()
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
                channels=wf.getnchannels(),
                rate=wf.getframerate(),
                output=True)

# チャンク単位でストリームに出力し音声を再生
chunk = 1024
data = wf.readframes(chunk)
while data != '':
    stream.write(data)
    data = wf.readframes(chunk)
stream.close()
p.terminate()

lib.AquesTalk2_FreeWave(wav_p)
output.close() 

2012年9月25日火曜日

pythonで、お知らせを表示する。(pynotify)


pythonで、pynotifyを使って、お知らせを表示する。



import pynotify
pynotify.init("My App")
n = pynotify.Notification("Title", "Message", "/path/to/my/icon.png")
n.show()


表示する時間などを設定できるようなので、次回調べることにする。

2012年9月23日日曜日

pygtk で Dialog Box を表示する。

pygtk の勉強を再開しました。日本語の説明が少ないので、のんびりと進行中。

ダイアログをモーダレス表示したくて色々調べていたら、モーダル表示 gtk.Dialog があるとわかったので早速試してみました。

日本語の説明はこちら


def dialog(self,im,txt):
        dlg = gtk.Dialog("タイトル", self.window, 0, (gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))

        dlg_image = gtk.Image()
        dlg_image.set_from_pixbuf(im)
        dlg_label = gtk.Label(txt)
        dlg_label.set_width_chars(30)
        dlg_label.set_line_wrap(15)

        dlg.vbox.pack_start(dlg_image)
        dlg.vbox.pack_start(dlg_label)
        dlg.show_all()
        dlg.run()
        dlg.destroy()


これなら、手軽にダイアログ表示ができて便利、vboxのみ利用可能のようです。

ダイアログをモーダレス表示する場合は、普通にウィンドウを表示するだけでいいようです。次回、試してみます。

2012年9月22日土曜日

pythonで左クリックを連打してみる。

pythonでGUI操作をする xautomation を使って、左クリックを連打するGUIを作成しました。意外にも、使いやすかったので重宝してます。

マウスカーソルの位置を記憶したら、連打ボタンかダウンボタン(左を押し続ける)を押すだけ。 みるみるゲームが進むのは爽快です。指が痛くならずに済みます。



import os
import time
import sys
try:
  import pygtk
  pygtk.require("2.0")
except:
  pass
try:
  import gtk
  import gtk.glade
except:
  sys.exit(1)

def xte_click(x,y,interval):
    # xautomation を左ボタンを連打
    os.system("xte 'mousemove %d %d'"%(x,y))
    x1, y1 = x,y
    while True:
        cmd = "xte 'mouseclick 1'"
        os.system(cmd)
        time.sleep(interval)
        a, x2, y2, b = gtk.gdk.display_get_default().get_pointer()
        if x1!=x2 and y1!=y2:
            break
        else:
            x1,y1 = x2,y2

def xte_down(x,y):
    # xautomation を左ボタンを押しつづける
    os.system("xte 'mousemove %d %d'"%(x,y))
    x1, y1 = x,y
    cmd = "xte 'mousedown 1'"
    os.system(cmd)
    while True:
        a, x2, y2, b = gtk.gdk.display_get_default().get_pointer()
        if x1!=x2 and y1!=y2:
            cmd = "xte 'mouseup 1'"
            os.system(cmd)
            break
        else:
            x1,y1 = x2,y2


class pygtk_builder:
    def __init__(self):

        #print os.path.dirname(__file__)
        #while True:
        #    pass

        self.builder = gtk.Builder()
        # mainwindow.gladeファイルから画面を作成
        #self.builder.add_from_file("mainwindow.glade")
        buff = """




True
True
True
X:
0
50
TrueTrue
●
1
True
Y:
2
50
TrueTrue
●
3
True
間隔:
4
50
TrueTrue
●
5
0
True

位置記憶
TrueTrue
True

0
連打開始
TrueTrue
True
1
マウスダウン
TrueTrueTrue

2
1
"""

        self.builder.add_from_string(buff)


        #windows1というオブジェクトを取得
        self.window = self.builder.get_object("window1")

        # gladeファイルで定義されているシグナルを自動で接続
        self.builder.connect_signals(self)
        signal_dic = { "gtk_main_quit" : gtk.main_quit }
        self.builder.connect_signals(signal_dic)

        # オブジェクトの初期化
        self.entry_x = self.builder.get_object("entry_x")
        self.entry_y = self.builder.get_object("entry_y")
        self.entry_interval = self.builder.get_object("entry_interval")

        self.entry_x.set_text("0")
        self.entry_y.set_text("0")
        self.entry_interval.set_text("0.2")

        self.window.set_focus(self.builder.get_object("button_save"))
        self.window.set_title("左クリック連打")

        #windows1が破棄される時、gtk_endを呼び出す
        self.window.connect("delete-event", self.gtk_end)
        self.window.show()

    def on_button_save_clicked(self,widget):
        # 現在のマウスカーソルの位置を記憶する
        a, x, y, b = gtk.gdk.display_get_default().get_pointer()
        self.entry_x.set_text(str(x))
        self.entry_y.set_text(str(y))

        # 位置を記録したら、フォーカスを移動
        self.window.set_focus(self.builder.get_object("button_start"))

    def on_button_start_clicked(self,widget):
        # マウス左クリックを連打する。
        x = int(self.entry_x.get_text())
        y = int(self.entry_y.get_text())
        interval = float(self.entry_interval.get_text())

        xte_click(x,y,interval)

    def on_button_down_clicked(self,widget):
        # マウス左を押しつづける。
        x = int(self.entry_x.get_text())
        y = int(self.entry_y.get_text())

        xte_down(x,y)

    def gtk_end(self, windows, event):
        #明示的に終了しないと、Python自体が終了しないっぽい
        sys.exit(0)

    def main(self):
        # GTK+のメインループを呼ぶ
        gtk.main()

if __name__ == "__main__":
    app = pygtk_builder()
    app.main()

2012年8月30日木曜日

pythonでGUI操作を自動化してみる。

タイトルが大げさでごめんなさい。

右クリックを連打するスクリプトを作ってみました。(Y!モバゲーを楽しむ為に)



GUI操作を自動化するソフトは色々ありますが、

今回は xautomation を使ってみました。

インストールは、apt-get install xautomation で行い。

xte というコマンドが使え下記のようなオプションがあります。


xte 'key [KEY]'
xte 'keydown [KEY]'
xte 'keyup [KEY]'
xte 'mousemove [x座標] [y座標]'
xte 'mouseclick [ボタン]'

で、早速 pythonで、5回/秒 1万回 左クリックするスクリプトを作ってみました。


import os
import time
for i in range(10000):
    cmd = "xte 'mouseclick 1'"
    os.system(cmd)
    time.sleep(0.2)
簡単ですね。

sleepを初めて使ったんですが、これは 0.2秒間 待ってもらう関数となります。


使ってみましたが、威力は抜群、考えれば使い道は広がりそうです。
日々繰り返している操作はたくさんあるので、pythonでお手軽に作れそうです。
さしあたって、IDとPassを入力してくれるアプリが便利そうだな。

2012年8月21日火曜日

pythonで nicovideo-dl を使ってみる。

ニコニコ動画をダウンロードして、後日ゆっくりと鑑賞したいと思い調べていたら、ubuntuに nicovideo-dl というコマンドを発見。便利です。

Synaptic からチェックしてダウンロード。

nicovideo-dlのオプション:

  -h, --help            print this help text and exit
  -v, --version         print program version and exit
  -u USERNAME, --username=USERNAME
                        account username(アカウント)
  -p PASSWORD, --password=PASSWORD
                        account password(パスワード)
  -o FILE, --output=FILE
                        output video file name
  -q, --quiet           activates quiet mode
  -s, --simulate        do not download video
  -t, --title           use title in file name(タイトルをファイル名にする)
  -l, --literal         use literal title in file name
  -n, --netrc           use .netrc authentication data
  -g, --get-url         print final video URL only
  -2, --title-too       used with -g, print title too



python で実行するには下記のようにして、urlを指定して実行すれば書いてきに動作してくれる。(エコノミーの判定方法がわかれば、もう少しよくなるんだがなぁ)

import os

def nicodl(url):
    cmd  = "nicovideo-dl "
    cmd += "-u アカウント "
    cmd += "-p パスワード "
    cmd += "-t "
    cmd += url
    os.system(cmd)

Pythonで gtk+glade のGUIアプリに挑戦(1)

いまさらながらニコニコ動画をチェックするアプリが作りたくなって、gtkに挑戦。
gladeのファイル読み込みに少々手間取ったのでメモ。
のんびり作成中。


import sys
try:
  import pygtk
  pygtk.require("2.0")
except:
  pass
try:
  import gtk
  import gtk.glade
except:
  sys.exit(1)

def gtk_init():
    builder = gtk.Builder()
    #sample.gladeファイルから画面を作成
    builder.add_from_file("mainwindow.glade")

    #windows1というオブジェクトを取得
    window = builder.get_object("window1")
    #windows1が破棄される時、testを呼び出す
    window.connect("delete-event", gtk_end)
    window.show()

def gtk_end(windows, event):
    print('here', windows, event)
    #明示的に終了しないと、Python自体が終了しないっぽい
    sys.exit(0)

if __name__ == "__main__":

    gtk_init()
    gtk.main()

2012年6月19日火曜日

ubuntuで、Open JTalkを使って、日本語テキストを読み上げさせてみた。(2)

さて、インストールは完了してので、さっそくpythonで Open JTalk を使ってみた。


pyaudioは、ここでダウンロードした。
オプションは、ここを参考にした。

まずまずの結果でした。

これを使えば、rrs読み上げソフトを作れそうだ。


import wave
import os
import pyaudio

if __name__ == "__main__":

    voice = '/usr/local/share/hts_voice/mei_normal'
    dic   = '/usr/lib/open_jtalk/dic/utf-8'
    text = "ウブンツで、日本語テキストを読み上げさせてみた。"
 
    opts = [
            "-x  " + dic + "/",
            "-td " + voice + "/tree-dur.inf",
            "-tm " + voice + "/tree-mgc.inf",
            "-tf " + voice + "/tree-lf0.inf",
            "-md " + voice + "/dur.pdf",
            "-mm " + voice + "/mgc.pdf",
            "-mf " + voice + "/lf0.pdf",
            "-dm " + voice + "/mgc.win1",
            "-dm " + voice + "/mgc.win2",
            "-dm " + voice + "/mgc.win3",
            "-df " + voice + "/lf0.win1",
            "-df " + voice + "/lf0.win2",
            "-df " + voice + "/lf0.win3",
            "-dl " +voice + "/lpf.win1",
            "-s   48000",
            "-p   240",  # 話速?
            "-a   0.55", # 声質?
            "-u   0.5",  # 有声化・無声化?
            "-jm  0.7",  # 大小?
            "-jf  0.5",  # 抑揚?
            "-jl  1.0",
            "-l",
            "-z   6000",
            "-ow " + "out.wav",
            "-em " + voice + "/tree-gv-mgc.inf",
            "-ef " + voice + "/tree-gv-lf0.inf",
            "-cm " + voice + "/gv-mgc.pdf",
            "-cf " + voice + "/gv-lf0.pdf",
            "-k  " + voice + "/gv-switch.inf",
            ]

    cmd = "open_jtalk "
    for row in opts:
        cmd += row + " "
    cmd += "in.txt"

    f = open("in.txt",'w')
    f.write(text)
    f.close()

    os.system(cmd)

    wf = wave.open("out.wav", "r")

    # ストリームを開く
    p = pyaudio.PyAudio()
    stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
                    channels=wf.getnchannels(),
                    rate=wf.getframerate(),
                    output=True)

    # チャンク単位でストリームに出力し音声を再生
    chunk = 1024
    data = wf.readframes(chunk)
    while data != '':
        stream.write(data)
        data = wf.readframes(chunk)
    stream.close()
    p.terminate()


2年ぶりに更新

 最後の記事が21年3月でしたので、27ヶ月ぶり。 2020年頃から始まったコロナ禍から在宅ワークがなくなり、通常運転に慣れてきた頃。 そろそろ新しい趣味を探していこうと思っています。 さて何するかな。。。