<< 前のページ | 次のページ >>

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

(solved) anything-rcodetools.el が動かない (Ubuntu Studio 8.04)

(1) load-path の通ったところに anything.el と anything-rcodetools.el を置いた。

(2) ~/.emacs に以下を追記

  (require 'anything)
  (require 'anything-rcodetools)
  ;; Command to get all RI entries.
  (setq rct-get-all-methods-command "PAGER=cat fri -l")
  ;; See docs
  (define-key anything-map "\C-z" 'anything-execute-persistent-action)

(3) gem install rcodetools だとタイムアウトしてインストールできなかったので
gem を取ってきて
  $ gem install rcodetools-0.8.5.0.gem
でインストール(sudo ではなく一般ユーザ)。
~/.gem/ruby/1.8/ 以下にインストールされる。

(4) Emacs で Ruby スクリプトを開くと
  File error: Cannot open load file, rcodetools
というエラーメッセージが出る。
emacs --debug-init foo.rb で開くと
  Debugger entered--Lisp error: (file-error "Cannot open load file" "rcodetools")
というエラーメッセージが出る。

----

GEM_HOME は未設定

  $ echo GEM_HOME
  ## undefined
  $

----

load-path の通っているディレクトリに
~/.gem/ruby/1.8/gems/rcodetools-0.8.5.0/rcodetools.el
のシンボリックリンクを張ったら動いた。

  $ cd my-elisp-dir
  $ ln -s ~/.gem/ruby/1.8/gems/rcodetools-0.8.5.0/rcodetools.el .

例によって Emacs Lisp よく分かってないのでアレですが、
MuraTaka 速記メモ / 2008-12-11
を参考にして ~/.emacs に設定を追加したら補完できるようになりました。 便利そうです。感謝です。

参考(外部リンク)

Ruby(Linux): パイプとプロセスの fork/exec を使い外部コマンドと入出力をやりとりする

※検索で携帯用のページに辿りついてしまった方はこちらのPC用のページをどうぞ

Rubyで外部コマンドと入出力のやりとりを行いたい、という需要は そこそこあると思うのですが、パイプやプロセスについて知っていないと ちんぷんかんぷんなので、サンプルと図を作ってみました。

自分もよく分からない状態から始めたので 間違いなどあるかもしれません。

スレッドについては割愛。


ソースだけ見ていてもイメージしにくいので 適当に図を描いてあーでもないこーでもないとやってみると だんだん分かってきます。


外部コマンドの例として mplayer を使いました。 mplayer は -slave オプションを付けていると 標準入力からのコマンドを受け取って動作するので、それを利用して 「4秒再生、4秒一時停止」を繰り返させています。

# 入出力を両方使いたいのでパイプが 2本必要
# 入力のみまたは出力のみでよければ 1本だけ作る
pin_1, pout_1 = IO.pipe # 外部コマンドからの読み取り用
pin_2, pout_2 = IO.pipe # 外部コマンドへの書き込み用

Thread.new {
  fork {
    pin_1.close  # ★
    pout_2.close # ★
    STDIN.reopen( pin_2 )
    STDOUT.reopen( pout_1 )
    
    cmd = "mplayer -slave foo.mp3"
    exec cmd
  }
}

pin_2.close  # ★
pout_1.close # ★

# 外部コマンドに出力を送る
# → pout_2 に書く
Thread.new {
  loop {
    sleep 4
    pout_2.write "pause\n"
    sleep 4
    pout_2.write "pause\n"
  }
}

# 外部コマンドの出力を読む
# → pin_1 から読む
loop{
  line = pin_1.gets( "\r" ) # "\r" で区切って読む。これはmplayerの出力に合わせた措置。
  puts "read from ext cmd: #{line}"
}


ちなみに、パイプの使い方については青木さんの「ふつうのLinuxプログラミング」を参考にしました。 この本に載っている解説は Ruby ではなく C言語で書かれていますが仕組みは同じです。

ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道
ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道
ソフトバンククリエイティブ 2005-07-27
売り上げランキング : 18422

おすすめ平均 star
star初心者にはちょうど良い。でもストリームという造語には納得できない
star良書だと思います
starLinuxを学ぶ為の読本、Cプログラムミングを学ぶなら別の本で

Amazonで詳しく見る
by G-Tools

参考(外部リンク)

Ubuntu Studio + Sound Blaster SX / .asoundrc

20101101 追記: その後いろいろあって結局 EDIROL UA-1EX に落ち着きました。 この追記を書いている時点では Ubuntu Linux 9.04 で使っています。 UA-1EX は現在 Amazon では「現在お取り扱いできません」となっていますが、 類似製品として UA-1G というのがあるようなので紹介しておきます。
EDIROL USB Audio Interface UA-1GEDIROL USB Audio Interface UA-1G

エディロール 2009-04-17
売り上げランキング : 79
おすすめ平均

Amazonで詳しく見る
by G-Tools

環境: Ubuntu Studio 8.04 / CREATIVE Sound Blaster Digital Music SX

card0 はオンボードのもの。 card1 が SX。

$ cat /proc/asound/version 
Advanced Linux Sound Architecture Driver Version 1.0.16.
Compiled on Nov  6 2008 for kernel 2.6.24-21-rt (SMP).
$ cat /proc/asound/devices 
  0: [ 0]   : control
  1:        : sequencer
  6: [ 0- 2]: hardware dependent
 16: [ 0- 0]: digital audio playback
 24: [ 0- 0]: digital audio capture
 28: [ 0- 4]: digital audio capture
 32: [ 1]   : control
 33:        : timer
 48: [ 1- 0]: digital audio playback
 49: [ 1- 1]: digital audio playback
 56: [ 1- 0]: digital audio capture
$ cat /proc/asound/cards
 0 [Intel          ]: HDA-Intel - HDA Intel
                      HDA Intel at 0x903a0000 irq 23
 1 [SX             ]: USB-Audio - Sound Blaster Digital Music SX
                      Creative Technology Ltd. Sound Blaster Digital Music SX at usb-0000:00:1a.1-2, 
$ cat /proc/asound/modules
 0 snd_hda_intel
 1 snd_usb_audio
$ aplay -l
**** ハードウェアデバイス PLAYBACK のリスト ****
カード 0: Intel [HDA Intel], デバイス 0: ALC883 Analog [ALC883 Analog]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 1: SX [Sound Blaster Digital Music SX], デバイス 0: USB Audio [USB Audio]
  サブデバイス: 0/1
  サブデバイス #0: subdevice #0
カード 1: SX [Sound Blaster Digital Music SX], デバイス 1: USB Audio [USB Audio #1]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
$ cat /proc/asound/card1/pcm0p/sub0/hw_params
access: RW_INTERLEAVED
format: S16_LE
subformat: STD
channels: 2
rate: 44100 (44100/1)
period_size: 5513
buffer_size: 22050
$ cat /proc/asound/card1/stream0 
Creative Technology Ltd. Sound Blaster Digital Music SX at usb-0000:00:1a.1-2,  : USB Audio

Playback:
  Status: Running
    Interface = 1
    Altset = 1
    URBs = 8 [ 8 8 8 8 8 8 8 8 ]
    Packet Size = 180
    Momentary freq = 44100 Hz (0x2c.199a)
  Interface 1
    Altset 1
    Format: 0x2
    Channels: 2
    Endpoint: 1 OUT (ADAPTIVE)
    Rates: 44100
  Interface 1
    Altset 2
    Format: 0x20
    Channels: 2
    Endpoint: 1 OUT (ADAPTIVE)
    Rates: 44100
  Interface 1
    Altset 3
    Format: 0x2
    Channels: 2
    Endpoint: 1 OUT (ADAPTIVE)
    Rates: 48000
  Interface 1
    Altset 4
    Format: 0x20
    Channels: 2
    Endpoint: 1 OUT (ADAPTIVE)
    Rates: 48000
  Interface 1
    Altset 5
    Format: 0x2
    Channels: 2
    Endpoint: 1 OUT (ADAPTIVE)
    Rates: 96000
  Interface 1
    Altset 6
    Format: 0x20
    Channels: 2
    Endpoint: 1 OUT (ADAPTIVE)
    Rates: 96000
  Interface 1
    Altset 9
    Format: 0x20
    Channels: 2
    Endpoint: 1 OUT (ADAPTIVE)
    Rates: 48000
  Interface 1
    Altset 10
    Format: 0x20
    Channels: 2
    Endpoint: 1 OUT (ADAPTIVE)
    Rates: 96000

Capture:
  Status: Stop
  Interface 2
    Altset 1
    Format: 0x2
    Channels: 2
    Endpoint: 2 IN (ASYNC)
    Rates: 32000
  Interface 2
    Altset 2
    Format: 0x20
    Channels: 2
    Endpoint: 2 IN (ASYNC)
    Rates: 32000
  Interface 2
    Altset 3
    Format: 0x2
    Channels: 2
    Endpoint: 2 IN (ASYNC)
    Rates: 44100
  Interface 2
    Altset 4
    Format: 0x20
    Channels: 2
    Endpoint: 2 IN (ASYNC)
    Rates: 44100
  Interface 2
    Altset 5
    Format: 0x2
    Channels: 2
    Endpoint: 2 IN (ASYNC)
    Rates: 48000
  Interface 2
    Altset 6
    Format: 0x20
    Channels: 2
    Endpoint: 2 IN (ASYNC)
    Rates: 48000
  Interface 2
    Altset 7
    Format: 0x2
    Channels: 2
    Endpoint: 2 IN (ASYNC)
    Rates: 96000
  Interface 2
    Altset 8
    Format: 0x20
    Channels: 2
    Endpoint: 2 IN (ASYNC)
    Rates: 96000

特に何も設定しないままだと、再生時に音が割れたようになる。

435 :login:Penguin:2007/11/27(火) 14:03:55 ID:Uc7MAQ1R
まるでスレチかもしれないけど一応。以前SoundBlasterSXを買った。何故か音がガラガラになった。
サンプリング周波数の簡勁らしくなんとか設定を変えて鳴るようになった。
が。。この製品無音の状態でボリュームを最大に上げるとノイズがのってくる。電源を付属のアダプターにしても
USBから取っても同じ。
ある日偶然電気屋さんでローランドのUA-4FXを見た。なんかデザインがプロがスタジオで使っている機器と
そっくりっぽい。デザインがあまりにも私をそそったので買ってしまった・・・・
で、使用した結果巷で言われているUBS外付けユニットとは音がいいという事を初めて納得した。
うん、確かにこれならPCIの内蔵よりかは良いかもしれない。ボリューム0の状態からしてもう違うのよ。。。。
まあ個体差があるからねえ。。。あ、あとSXは負荷が掛かるとノイズがのった。

以前クリエイティブのSoundBlasterのProシリーズってのがあって(今もあるのかなw)それのPCIのボードを
使った事がある(2万円位かな)。コンセプトが違うから比較するのは間違いだけど、SXはそれの足元にも
及ばない。UA-4FXはそれと同じくらい。でも原音に忠実なのはProのPCIカードかなw
ただUA-4FXの音の感じ(暖かい)とノイズが少ない事が今はとても気に入っている。

191 :login:Penguin[sage]:2007/01/30(火) 21:56:47 ID:QG/gA/fT
SOUND BLASTER Digital Music SXなんてのを買ってきたのはいいけど、なんか音がバリバリです。。
WINDOWSに繋いだらうっは、音が良い。なんかこの音の良さは素晴らしい。
ちょっと自分にはLinuxでは難しいなあ。。GNOMEのサウンドって所はUSBオーディオになっているんだけど
ALSAMIXSERが起動しない。No Such Deviceって怒られる。
しかし今までの音とは大違いなのでなんかまたWINDOWSに走ってしまいそう。
192 :login:Penguin[sage]:2007/01/31(水) 01:52:35 ID:nto+v7R1
>>191
もしかして: mplayer -srate 48000 filename
193 :login:Penguin[sage]:2007/01/31(水) 01:59:46 ID:2Gl2jzeJ
コマンドラインからmplayerなんかで
mplayer -af resample=48000 ファイル名
なんかで再生してみたらどうかね?

「音がバリバリ」というのが、「折り返しひずみバリバリ」のたぐいだったら解決するかもしれん
194 :login:Penguin[sage]:2007/01/31(水) 02:22:38 ID:h3+3utgl
>>192-193
即レスどうもです。試してみます。
195 :login:Penguin[sage]:2007/01/31(水) 02:47:40 ID:h3+3utgl
うわあああああ、原理が解からないけど鳴った。大変澄んだ音色で^^
>>192  >>193 ありがとうございます。
音がまともになったです。ALSAのミキサーのボリュームはヘッドホン1っていうのが効きます。
非情に嬉しいです。
でも、mplayerでそうやって再生する以外ないのでしょうか^^;;;
196 :login:Penguin[sage]:2007/01/31(水) 11:41:52 ID:gLb74hjk
>>195
たぶん問題はesound。サンプリングレート変換がまずい。
昔ちょうど同じような現象があったので、適当にパッチしたやつを
http://2sen.dip.jp:81/cgi-bin/upgun/up1/source/up3259.zip
にあげておく。

SRPM形式なので、リビルドしてからインストールする必要がある。
リビルドの方法は
http://www.atmarkit.co.jp/flinux/special/mkrpm/mkrpm01.html
のあたりに。RPM系のディストリでなかったらスマン

これやってもアップデートでesoundが更新されると戻ってしまうので
esoundの代替となるやつがあればそっちいれるのがいいかもしれん
197 :login:Penguin[sage]:2007/01/31(水) 11:43:50 ID:gLb74hjk
↑インストールしたら、一回ログアウトしてログインしなおす
198 :login:Penguin[sage]:2007/01/31(水) 13:20:10 ID:T8FgXNYl
USB-AUDIO + ALSA OSS emu で44KHzって
だめなん?
199 :login:Penguin[sage]:2007/01/31(水) 18:54:29 ID:5G/iBK8c
>>196
丁寧にありがとうございます^^
DEB系のディストリなので一度SRPMを解凍して中に入っているパッチの64系以外の物を当ててからmakeしました。
残念な事に上手く再生できないです。ALSA、ESS、OSSのどれを選んでもひずみが出てしまいます。
う~んあとはALSA、ESS、OSSのどれかにサンプリング周波数固定の設定とかの方法があればいいのですが。
今は.mplayerのconfigファイルにsrate = "48000"を書き込んで使っている状態です。試しに96000を設定したら
一応動くのですがなんか音がぼやけた感じになるので48000に戻しました。
うう、でも音楽はAudaciousで聞きたい(ToT)
200 :login:Penguin[sage]:2007/01/31(水) 23:17:18 ID:/0F9juPj
>>139
~/.asoundrcに
-----
pcm.!default {
type plug slave {
pcm "hw:0,0" #適宜変更
pcm dmix
rate 48000
}
}
-----
と書いて、出力デバイスを"hw:0,0"でなく"dmix"にするといいかもしれん
(直線補完だが)
あとは>>198とか
201 :login:Penguin[sage]:2007/02/01(木) 07:23:38 ID:0hqUFGQP
おおおおおお\(@O@)/   鳴った!
>>200 さんありがとう。鳴りました。すごいです。
いや、なんとかLINUXで使えるようになったです。一時は買って失敗だったかと思いました。
WINDOWSのドライバーだとサンプリングは48kと96kしか選べないので44kだと不具合が出るのでしょうか?
WIN2kのデフォルトのデバイス設定は48kの24ビットという変わった設定でした。
試しで上のrateを96kに設定したらエラーが出ましたww
そういえばソフトやGNOMEなどの設定で出力デバイスがdmixが選べないです。今はhw:0,0(USB Audio)を
選んでます。
教えていただきました皆さん、ありがとうございました^^
何しろSOUND BLASTER Digital Music SXの情報がググってもほとんどなくて、本当に助かりました。
たまに又ここに見にきます。WINではポンつけのUSBですが、プラグ&プレイが進んできたとはいえLinuxでは
まだまだ難しいデバイスですね。
202 :201[sage]:2007/02/04(日) 16:40:47 ID:DeDFR7bm
その後ALSAのサイトとかを見ていてdmixはデフォルトで48kサンプリングという事を知りました。 最終的に
pcm.!default {
type plug slave {
pcm dmix
format S32_LE
}
}
という記述にて動くことが解かりました。hw:0,0という記述を入れるとformat S32_LEを入れるとエラーになります。
上の記事で私が書いた「dmixが選べないです。今はhw:0,0(USB Audio)」というのは間違いで、上の状態で
選べる物がUSB Audio、hw0;0、hw1,0と3個出てきます。USB Audio以外は正常に鳴りません。
よって>>200さんの言っている
>と書いて、出力デバイスを"hw:0,0"でなく"dmix"にするといいかもしれん
というのが正解みたいです。おそらく3個の中のUSB Audioというのがdmixなのでしょうね^^
今まで調整してもあまり効果のなかったプレイヤーのイコライザーの一番下の周波数の調整が耳に聞こえる
ようになりよかったです。欲をいうと今使っているのがAudaciousなんですがこのプレイヤーだとイコライザー
の最低が60hzなんですがもう少し下の調整が効くプレイヤーが欲しくなりました。

いまいち .asoundrc の書式の要領がつかめいないが、とりあえず以下のようにしたらまともな音が出た。 ただし、左右のバランスがおかしい(左の音量が非常に小さい)。 ミキサーの設定を疑い alsamixer -c 1 としたところ
alsamixer: function snd_mixer_load failed: Invalid argument
というエラーが出て疲れたので今日はここまで。

# aplay と Firefox上の Flash、どちらでも
#(左右のバランスがおかしいのを除けば)ちゃんと音が出る。
#ただし、dmix 不使用なので同時には再生できない。

pcm.!default {
  type rate
  slave {
    pcm "hw:1,0"
    rate 48000
  }
}

pcm.pulse {
  type pulse
  type plug slave{
    pcm "hw:1,0"
    channels 2
    rate 48000
  }
}

ctl.pulse {
  type pulse
  slave {
    pcm "hw:1,0"
    channels 2
    rate 48000
  }
}

関連記事

zip化された mp3アルバムを Linux で聴く(やっつけ)

amarok, rhythmbox, songbird とかそのあたりのメジャーなメディアプレイヤーが zip化された mp3アルバムの読み込みに対応しておらず、ネットレーベルなどからダウンロードしてきたアルバムを聴くのが難儀。

一旦一時ファイルに展開して聴く方法もあるが、後で削除し損ねるなどすると余計なディスクスペースを消費したり管理がめんどくさい。

というわけで、fuse-zip を使ってみた。 先に言っておくと、この方法では複数のアルバムには対応できません。

環境

Ubuntu Studio 8.04

インストールなど

fuse-zip は Ubuntu のリポジトリに入っていないので、ソースからコンパイルしてインストールする。

sudo apt-get install libfuse-dev libzip-dev
wget http://fuse-zip.googlecode.com/files/fuse-zip-0.2.7.tar.gz
tar xvf fuse-zip-0.2.7.tar.gz
cd fuse-zip-0.2.7
make
sudo make install

次に、fuse グループに自分を追加。間違えると sudo もできなくなるので慎重に。 /etc/group はバックアップ取っておきましょう。
参考: ユーザをグループに追加するとき、やってはいけないこと - satake7’s memo


やる気のない Rubyスクリプト playzip.rb を書いてみた。自己責任でどうぞ。

#!/usr/bin/ruby

PLAYER = "vlc"
LOG_PATH = File.join( `echo -n $HOME`, "#{File.basename(__FILE__)}.log" )
LOG_VIEWER = "gedit"
TARGET_RE = /\.(ogg|oga|mp3)$/i

zipfile = File.basename(ARGV[0])
basedir = File.dirname(File.expand_path(ARGV[0]))
zipfile_esc = zipfile.gsub(" ", "_")

mountpoint = "__fuse_temp_#{zipfile_esc}"

$log = []

def exec_cmd(cmd)
  $log << "-" * 64
  $log << cmd
  $log << `#{cmd} ; echo $?`
end

#--------------------------------
Dir.chdir( basedir )

exec_cmd %Q! mkdir #{mountpoint} !
exec_cmd %Q! fuse-zip "#{zipfile}" #{mountpoint} !

found = `find #{mountpoint}`.split("\n")

mediafiles = found.select{|fn| fn =~ TARGET_RE }
mediafiles.map!{|fn| %Q!"#{fn.strip}"!}

exec_cmd %Q! #{PLAYER} #{mediafiles.join(" ")} !

exec_cmd %Q! fusermount -u #{mountpoint} !
exec_cmd %Q! rmdir #{mountpoint} !

open( LOG_PATH, "w" ){|f|
  f.puts $log
}

#cmd = %Q! #{LOG_VIEWER} #{LOG_PATH} !
#puts cmd; system cmd

あとはこのスクリプトをファイルタイプで関連付けしておけば、zipファイルを右クリックして playzip.rb に渡して再生できる。

パーミッション絡みか何かで上手く開けないことがあります。直せたら追記・修正します。
以上。

追記 20091125

上記の方法は微妙に不便なので結局使わなくなってしまいました。 代わりに、単機能的で雑な作りですが Ruby/Tk で再生用プログラムを書いてみましたので 人柱でもいいという方はどうぞ。
http://wiki.github.com/sonota/zip-player

Kate で C/C++シンボルビューアを使う

kate-c,cpp-symbol-viewer-c256

環境

Ubuntu Studio 8.04
Kate 2.5.10 (KDE 3.5.10)

インストールなど

Kate の ctags プラグインというのも一応ある (kate-ctags-plugin-patch KDE-Apps.org)ようなのだけど、 パッチ当て+コンパイルしないといけないらしい。
C/C++ が対象なら別のプラグインで代替できるようなのでそれを使うのが手っ取り早い。

  $ sudo apt-get install kate-plugins
でインストール。
--------

Kate のメニューから [設定 - Kateの設定]
[アプリケーション - プラグイン] で 
[Kate C/C++ シンボルビューア] にチェックを入れる。
--------

サイドバーから [シンボルリスト] を選択して表示する。
以上。



** ホームに戻る

<< 前のページ | 次のページ >>
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。