mint betsy * pyaudio * usb audio
解決策は書いていない。(少しわかった!)
mint linux を betsy(debian jessie) にアップグレードした。
概ね動いているのだが、pyaudio が鳴らない。
ALSA lib pcm.c:7843:(snd_pcm_recover) underrun occurred
が出まくる。
いろいろいじった結果、portaudio で usb audio(jbl pebble) を使うとダメらしい…。
(LMDE 8はできてた。audacity での再生もできない。内蔵のサウンドだと鳴る。)
さて、どうしたものか…。
追記:16/2/17
audacity は、以下に書いてありました...。
http://wiki.audacityteam.org/wiki/Linux_Issues
env PULSE_LATENCY_MSEC=30 audacity
とせよと。
解決前:
...と、思ったら、alsaaudio というライブラリでもダメだった。
pulse audio あたりのalsa インタフェイスがダメなのか?
だとしたら他のアプリケーションで特に問題が出ていないのはなぜなのだ??
aplay での再生には問題がない。
試しにバッファサイズを指定すると、8000 以上だと再生できる。
…わからん。
なんと、alsaaudio でバッファサイズを16 以下にすると音が鳴る…
pyaudio も音が出るのだが、underrun は出るし、なんか途中まで早回しで再生される…。
alsaaudio の、setperiodsize でサイズを指定しても効果が出ない…。
ううん、一体どこにどういう問題があるのだろうか…
そして、audacity はどうやったら回避できるのだろうか…。
補足:
ossaudiodev という選択肢もあるが、/dev/dsp がないと言われる。
そんな時には、 padsp というコマンドから、使いたいプログラムを実行すると音が鳴るらしい。逃げ道として…。
#!/usr/bin/padsp /usr/bin/python
Cairo
グラフィックライブラリの Cairo を少しいじってみている。
pythonから普通に使えるが、どちらかというとベクタのレンダリング用のような構成で、ピクセル単位での操作はできない。特定の座標の色を見る方法もない。
get pixel やバケツ塗りつぶし(Flood Fill)とかで検索しても、「ないよ」みたいなそっけない答えしか見つからないし…。
で、ようやく以下のページを見つけた。
http://code.activestate.com/recipes/498278-access-cairo-surface-from-numpy-and-pygame/
numpyという計算ライブラリから、surfaceの情報を配列として参照できるらしい。
以下のようにすればいいらしい。
buf = surface.get_data()
a = numpy.frombuffer(buf, numpy.uint8)
a.shape = (w, h, 4)
a[:,:,2] = 255
これで行けるのではなかろうか…
Firefox29
Firefox のバージョンが上がって、いろいろ見た目が変わった。
これに限らず、結局できることは変わらないのに、見た目だけ変えるのはやめてほしい、といいたくなるけど(言っちゃっているけど)、問題は勝手にJavascriptがOFFになっていて、しかもコンフィグのコンテンツから、設定項目がなくなっていること…。
これはバグなのか?UIの方針転換で他の場所にあるのか?よくわからない。
更新も多くてわからん。マニュアル読むのは、したいことじゃない。WEBが見たい。
解決方法:
URIに
about:config
を入れて、
javascript.enabled
をTRUEにする…。
もうひとつ、ALTを使ったショートカットが同時押しじゃなくなくても良くなっていたのだが、これが、IMEをONにするときに押すALTを奪って、フォーカスがどこかに行ってしまう…。検索するたびにこれが起こって、どうにも辛い。
これは再インストールしたりしてたらいつの間にか治った。タイミングつかめず。再発されたらChrome一本にするしかないのかな…。
python で日本語の pdf を作成する
reportlab というのを使うのが良いらしい。
ただ、一つだけよくわからなくて少し探したので、書いておく。
基本的に英語前提なので、改行や空白が入っていないと、改行をしてくれない。
なので、スタイルには、wordWrap = 'CJK' を指定しないといけません。
以下、ベースになる様にサンプル。
環境は、Linux Mint Debian の、64bit。takaoGothic はあとから入れています。
#!/usr/bin/python # -*- coding: utf-8 -*- import os,sys from reportlab.pdfbase.ttfonts import TTFont from reportlab.pdfbase import pdfmetrics from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Image from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.rl_config import defaultPageSize #from reportlab.lib.enums import TA_LEFT, TA_RIGHT, TA_CENTER, TA_JUSTIFY from reportlab.lib.pagesizes import A4 # フォント読み込み pdfmetrics.registerFont(TTFont('Gothic','TakaoPGothic.ttf')) # スタイル設定 def setStyleParam2J( style ): style.fontName = 'Gothic' style.wordWrap ='CJK' styles = getSampleStyleSheet() for name in ('Normal', 'BodyText', 'Title', 'Heading1', 'Heading2', 'Heading3', 'Heading4', 'Heading5', 'Heading6', 'Bullet', 'Definition', 'Code', ): setStyleParam2J(styles[name]) # 本文の作成 Story = [] Story.append(Paragraph("タイトルです", styles['Title'])) Story.append(Paragraph("Heading 1", styles['Heading1'])) Story.append(Paragraph("Heading 2", styles['Heading2'])) Story.append(Paragraph("Heading 3", styles['Heading3'])) Story.append(Paragraph("Heading 4", styles['Heading4'])) Story.append(Paragraph("Heading 5", styles['Heading5'])) Story.append(Paragraph("Heading 6", styles['Heading6'])) Story.append(Paragraph("Bullet", styles['Bullet'])) txt = ("長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。\n" "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。" "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。" "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。" "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。" "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。" "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。" "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。" "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。" "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。" "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。") Story.append(Paragraph("Normal"+txt, styles['Normal'])) Story.append(Paragraph("Definition"+txt, styles['Definition'])) Story.append(Paragraph("Code:"+txt, styles['Code'])) Story.append(Paragraph("Body:"+txt,styles['BodyText'])) # 出力 doc = SimpleDocTemplate('doc.pdf', pagesize=A4 ) doc.build(Story)
このあたりなどを参考に。
http://mogawa.blogspot.jp/2008_04_01_archive.html
http://www.blog.pythonlibrary.org/2010/03/08/a-simple-step-by-step-reportlab-tutorial/
pygtk の gtk.TreeStore の要素に、リストや辞書を含める。
store = gtk.TreeStore(dict) store.append( None, {} )
ではダメ...。
TypeError: could not get typecode from object
というエラーが出る。dictやlist指定ではダメです。
とはいえ、gtk にも定義されていない。正解は、
store = gtk.TreeStore(object) store.append( None, {} )
object 型を指定する。
Codeignter 2.1.x でsqlite3 を使う(しょぼい)
はまったので書いておく。
いろいろなページを見ると、pdo ドライバが必要、と書いてあるのだがそのページのリンク先は切れている。どうも新しいバージョンだと不要になっている模様。
以下のページに従ったのだが、どうしても読み込めない。
http://khromov.wordpress.com/2012/06/22/using-codeigniter-2-1-with-sqlite-3-databases/
結論:
ubuntu12.10 を使っているのだが、php のsqlite3拡張が入っていなかった…。
apt-get php-sqlite3 で解決に…。
pygtk で、デフォルトのイベントハンドラを無効にする。
treeView を、ScrolledWindow に入れているのだが、ホイールスクロールをした時の動作を変えたい。
そこで、treeView のイベント"scroll_event"に connect したのだが、ScrolledWindow のイベントも実行されてしまい、訳のわからないことに…。
disconnect しようにも、ハンドラIDがわからない…
で、結論。
ScrolledWindow のイベントハンドラを無効にするには、True を返すイベントを登録すればよい。
こんな感じ。
sw = gtk.ScrolledWindow() def disEvent(a,b): return True sw.connect( "scroll_event", disEvent ) # ホイールスクロールを無効化
lambdaを使ったほうがすっきりするか。
sw.connect( "scroll_event", lambda a,b: True ) # ホイールスクロールを無効化