続]フォーマット別音楽管理
PCで聴く場合はFlacで、iPhoneなどで聴く場合はaac,mp3みたいにいろんな形式で音楽ファイルを持っていると、いざFlac形式の音楽だけを聴きたい場合にしっくり管理する方法がなかった、ということは過去記事にも書いた。
でも、foobarならいろいろカスタマイズできて、上手い具合に管理できそうなのでメモ。
環境
ディレクトリ:
[アーティスト]->[アルバム]->[音楽ファイル:*.flac, *.mp3]
プレイヤー:
[Foobar2000]
方法
"Preferences"->"Media Library"->"Album List" でViewsに以下のようなクエリを追加name: by artist/filetype
query: %
%codec%を追加することでfoorbarのviewに
[アーティスト名]->[アルバム名]->[flac or mp3] ->[音楽ファイル]
という階層ができるので、flacだけ聴きたい場合はそのアルバム下のflacをまるごとプレイリストに放り込むだけ。
これでだいたいやりたいことを実現できた。
その他、使えるフォーマットについて公式?に書いてある。
10進数->n進数
10進数->n進数(n = 2 ~ 35)の変換。ググッてもn進数というのはなかなかなかったので。STLは少しおおげさか。
const char *numset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWYZ"; void cardinal_encode(int num, int ocar) { if(num == 0) {cout << "0" << endl; return;} if(ocar > strlen(numset) || ocar < 2) return; vector<int> nl; while(num / ocar != 0) { nl.push_back(num % ocar); num /= ocar; } nl.push_back(num); reverse(nl.begin(), nl.end()); for(unsigned int i = 0; i < nl.size(); i++){ cout << numset[nl[i]]; } return; }
C++からPythonモジュールを使う
C++ からPythonモジュールを使うのをやってみた。
id:Wackyさんの記事を参考にhttp://www.linuxjournal.com/article/8497からサンプルをそのまま流用。
まずPythonモジュールから。
def hello(): print "Hello, Python!"; return "Success";
続いてC++
#include <iostream> #include <cstdio> #include "python2.6/Python.h" using namespace std; void pyWraper() { FILE * exp_file; PyObject *module, *global_dict, *expression, *result; const char *exp = "pymodule.py"; const char* func_name = "hello"; exp_file = fopen(exp, "r"); PyRun_SimpleFile(exp_file, exp); module = PyImport_AddModule("__main__"); global_dict = PyModule_GetDict(module); expression = PyDict_GetItemString(global_dict, func_name); result = PyObject_CallObject(expression, NULL); if(PyString_Check(result)) cout << PyString_AsString(result) << endl; } int main() { Py_Initialize(); pyWraper(); Py_Finalize(); }
[出力]
Hello Python!
Success
もちろん引数を渡すこともできる。
Python C++
研究で大量のXMLファイルを処理しなければならなくなった。
XMLファイル自体はzip圧縮されていて、解凍すると100MBにもなる場合がある。(ほとんど冗長な情報が入ってるだけだけど。。)
なのでパースはC++でやらせたい。でもダウンロード、Zipの解凍、XMLの読み込みはPythonでやらせたいな、と思ったのでPython <=> C++の方法について調べてみる。
いろいろ試行錯誤中だけど、当面は
Python => C++:Pythonで標準のPython.h,libpython26.aを利用
C++ => BOOSTを使うor 標準の。
BOOSTをPythonのためだけに使うには重すぎる気がする。
Snow Leopard & Python PIL
Oreilly ”集合知プログラミング”とかやってて、PILが必要になったのでインストール。
ソースからインストールしようかと思ったけど、改行コードがDOSばっかりになってたり、コンパイルエラーがイミフすぎだったので、おとなしくportsでインストール
インストールはなんなく終わってけど、なぜかimportできない。
どうやらports経由でインストールした場合はPYTHONPATHにパスを追加する必要があるらしい。
export PYTHONPATH=/opt/local/lib/python2.6/site-packages/:/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages
こんな感じのコードをbash_profileに追加
これでうまくいった!