2010年11月27日土曜日

都道府県市区町村名の表記(1)

都道府県市区町村名とは、住所構造のうち大字より前の部分、と定義しておく。
表記パターンは5つ。

1.都道府県+市+区
 政令指定都市。
 例)北海道 札幌市 中央区

2.都道府県+市
 上記1以外の市。
 例)大阪府 東大阪市

3.都道府県+区
 特別区。
 例)東京都 千代田区

4.都道府県+町村
 東京都の島嶼部の町村。
 例)東京都 八丈町

5.都道府県+郡+町村
 上記4以外の町村。
 例)岡山県 真庭郡 新庄村

2010年11月24日水曜日

pythonでフォルダ容量取得

覚え書き。

# -*- coding: shift_jis -*-
#
import os,sys

def GetFdrSize(sInFdr):
    """フォルダ容量取得
    Args:
        sInFdr=入力フォルダ
    Returns:
        フォルダ容量(バイト)
    """
    if not os.path.isdir(sInFdr): return 0
    i=0
    for root, dirs, files in os.walk(sInFdr):
        for file in files:
            i+=os.path.getsize(os.path.join(root, file))
    return i

if __name__=='__main__':
    sInFdr=sys.argv[1]
    print GetFdrSize(sInFdr)

pythonでwaveファイル(2)

サンプリングレートとは、アナログ情報をデジタル化する際に1秒間に取得するデータの数。そして、音データはこうして取得した音圧レベルの数値を羅列したもの。

波形データは以下のようになっているとのこと。
・8bit または 16bit PCM データが時間順に記録されています。
・ステレオならば L R L R L R … の順番
・数値の並べ型は Intel バイトオーダ
・ビット数は 8bit と 16bit
 8bit ならば符号無し unsigned (0 ~ 255, 無音は 128)
 16bit ならば符号付き signed (-32768 ~ +32767, 無音は 0)
えっ、そうなの?
何か難しいデータ項目を何種類も持っているのではないか予想をしていたのだが、見事に裏切られ、「音圧レベル」という値を羅列しているだけらしい。
しかもステレオ音声でも-32768 ~ +32767。
これは16bit、2バイトだから、00~FFまでの16進数、半角アルファベット2文字で取得データ1個分というわけ。
これで、音の大きさ、高さ、音色が全部記録できるのかな? と思ったので、さらにネット検索を続けつつ考えてみた。

(参考)
WAV ファイルフォーマット(近藤正芳氏のウェブサイト)
おとなバンド「健康」のムリムリ活動報告 音響豆知識(boo*a*ken*o氏のブログ)
PCM の基本
他、wikipediaなど多数のサイト。

そして自分なりの結論に達した。なにぶん素人なので大雑把で感覚的な話になるが、

・「音圧レベル」の数値だけで、音のすべての要素を記録可。(限界はあるが)
・音の強さは、値の大小で表現。波形データの振幅。大きな値でドーンとくれば大きな音。
・音の高さは、複数の音圧レベルデータで構成される音の波の周期で表現。短周期(高周波数)が高音。波形が激しく上下すれば高音。
・音色は、数値データが形づくる波の重なり具合。波形が複数合成された形状の様子が音色を意味する。

確かに、音が耳に入ってくるときは空気の振動が耳の鼓膜を振動させるだけなので、音の圧力レベルの値の羅列によって、音のすべての要素が記録できるというのは、耳と同じことをやってるということで、確かにそうかもしれないと直感的に思った。

音データ関係は全くの素人なので驚きの連続であった。
音量を調整したいのが目的なので、まずは状況確認としてwave.pyで取得できる値を見てみた。

# -*- coding: shift_jis -*-
#wavCheck.py
#
import os,sys,struct,math,wave

def wav_MaxVol(sIn):
    """waveファイル情報を取得する。
    Args:
        sIn:入力ファイル
    Returns:
        オーディオチャンネル数
        サンプルサイズ(バイト)
        サンプリングレート
        サンプリングレート
        音データの最大値
        音データの最小値
    """
    #wavファイル以外は処理対象外
    xx, ext=os.path.splitext(sIn)
    if ext.upper()!=".WAV": return None
    oIn=wave.open(sIn.decode("sjis"))
    #オーディオチャンネル数(モノラルなら1、ステレオなら2)
    nchannels=oIn.getnchannels()
    #サンプルサイズ(バイト)
    sampwidth=oIn.getsampwidth()
    #サンプリングレート
    framerate=oIn.getframerate()
    #オーディオフレーム数
    nframes=oIn.getnframes()
    #オーディオフレーム(リストオブジェクト)
    frames=oIn.readframes(nframes)
    oIn.close()
   
    #波形データの最大最小値を取得
    Lx=[];Ln=[]
    for i in range(nframes):    #フレーム数までのループ
        for j in range(nchannels):    #フレーム中のチャネル数までのループ
            c=(frames[i+j*nchannels]+frames[i+j*nchannels+1])
            #文字→数値
            Lx.append(struct.unpack("<h", c)[0])
            Ln.append(struct.unpack("<h", c)[0])
        #最大最小を残す
        Lx=[max(Lx)]
        Ln=[min(Ln)]
    #曲全体の最大値
    Lmax=Lx[0]
    Lmin=Ln[0]
    #音圧レベル(デシベル)
    #MaxdB=20*(math.log(float(Lmax))-math.log(32767.0))
    #MindB=20*(math.log(float(Lmin))-math.log(32767.0))
    #取得値の確認
    return nchannels,sampwidth,framerate,nframes,Lmin,Lmax
   
if __name__=='__main__':
    sInFdr=sys.argv[1]
    for root, dirs, files in os.walk(sInFdr):
        for file in files:
            sIn=os.path.join(root, file)
            nchannels,sampwidth,framerate,nframes,Lmin,Lmax = wav_MaxVol(sIn)
            print os.path.basename(sIn), \
             nchannels,sampwidth,framerate,nframes,Lmin,Lmax


上記のpythonソースwavCheck.pyとして保存し、バッチファイルで引数にwaveファイルの入っているフォルダを指定して実行してみた。
wavCheck.py C:\・・・

すると、音量の丁度いいaaa.wavも、音量が小さくて調整したいbbb.wavもフレーム数以外は同じ値が返ってきた。
aaa.wav 2 2 44100 9999999 -32768 32767
bbb.wav 2 2 44100 8888888 -32768 32767

えっ?と思いつつ、今日はここまで。

2010年11月23日火曜日

pythonでwaveファイル(1)

ユーチューブでダウンロードした音楽ファイル(wavファイル)の音量にばらつきがあって、運転中に音量を上げたり下げたりするのが面倒だと前から思っていた。

そこでフリーソフトを探してみたところ、1曲ずつ調整するとか、指定したフォルダ内で同じにするとかならばあったのだが・・・。一曲ずつじゃ面倒だし、前回調整分と今回調整分で音量が違ってもイヤだし。例えば温度なら25度みたいな、絶対的な音量に揃えるというようなソフトは、探した限りでは見つからなかった。

ならば、pythonで調整するぞ! ということで、wave.pyを使ってみることにする。

19.5 wave -- WAVファイルの読み書き (python2.5 公式サイト)

オープンすると、 Wave_read オブジェクトが取得できて、と、ここでつまずいた。

サンプリングレートって何?
音響学の基礎がわかっていないので、音響関係の業界用語についていけない。
まず基本的なことから調べてみる。

まず、wavファイルの定義はこれ。
WAV ファイルフォーマット(近藤正芳氏のウェブサイト)

2010年11月21日日曜日

ブログ始めました

「漫ろ」とは、「なんとなく」「そわそわして落ち着かない」「やたらに」というような意味です。
このようなノリで気になることをメモしていこうと思います。