2013年10月29日 星期二

wav spectrum 頻譜圖 + python audiolab

因為這次要處理wav檔案資料...
其實py audiolab能處理上不止算頻譜,
只是其他的項目用Java解決掉~
就只有頻譜圖是用python...
(一來不會算頻譜, 二來Java繪圖的套件過於艱澀, py找來的資源就已經相當漂亮了Q_Q)

環境安裝貼在上一篇文...



先貼一張結果圖~













程式沒幾行, 過程是挺心酸的...Q_Q...
整個重點大概在於:
python 與相關應用module安裝...
找一段可以用的程式碼來打底...
(google audiolab+spectrum 應該就會有~我也是google來的)
調好圖表版面, 對齊(因有上下圖需要對齊的需求), 間隔, 顏色
(sample是2分鐘的wav, 但因實務上只使用大約30s, 所以才用5s做單位x軸)
解決中文字的問題....
(python原生沒中文, 最後採用指定TTF解決, 跨平台機器安裝才方便Q_Q)

原始碼

#!/usr/bin/env python
#-*- coding: utf-8 -*-
import sys
from pylab import *
import wave
import matplotlib.pyplot as plt

myfont = matplotlib.font_manager.FontProperties(fname='/etc/xxxx/MSJH.TTF')
infile = None
outfile = None
secInterval = 5    #x-axis interval

def show_wave_n_spec():
   
    if(len(sys.argv) < 2) :
        print('err input, plz input argv[1] and argv[2]')
        return
   
    infile = sys.argv[1]
    outfile = sys.argv[2]
   
    spf = wave.open(infile,'r')
    f = spf.getframerate()
   
    sound_info = spf.readframes(-1)
    sound_info = fromstring(sound_info, 'Int16')
    spflength = round(spf.getnframes()/f)
    #print(spflength)
    #print(sound_info)
   
    #---------------pic1   
    ax = subplot(211)
    title(u'Waveform(波形圖)',fontproperties=myfont)
   
    plot(sound_info, '#5755FF')
    xlim(0, len(sound_info))
    plt.axis([0, len(sound_info), -15000, 15000])
    grid(True)
   
    #change axis-x position/text
    xlabel2 = range(0, int(spflength+1), secInterval)
    xposition2 = []
    for x in xlabel2:
        xposition2.append(x*f)
   
    #print(xposition2)
    ax.set_xticks(xposition2)
    ax.set_xticklabels(xlabel2)
   
    #change axis-y
    ylabel2 = []
    for x in ax.get_yticks() :
        ylabel2.append(str(x/1000)+'k')
    ax.set_yticklabels(ylabel2)
   
    #---------------pic2   
    ax2 = subplot(212)
    title(u'Spectrogram(頻譜圖)',fontproperties=myfont)
    spectrogram = specgram(sound_info, Fs = f, scale_by_freq=True,sides='default')   
    plt.axis([0, spflength, 0, 20000])
    ax2.set_xticks(xlabel2)
    ax2.set_xticklabels(xlabel2)
    grid(True)
    ylabel2 = []
    for x in ax2.get_yticks() :
        ylabel2.append(str(x/1000)+'k')
    ax2.set_yticklabels(ylabel2)   
       
    #show()
    savefig(outfile);
    spf.close()


show_wave_n_spec()

centos 6.3 + python module scikits.audiolab

原本是想用Java處理就好~ 不過卡在頻譜圖一直畫不出來...
(叫一個工數只有20~40分的程度人來做真是太勉強了Orz...)

最後只好妥協用python的套件...

先講快樂windows安裝包(比起centos真的快樂很多, 前提是找得到)...
選用2.6版本~ 是因為當初找得比較齊的~
還好centos內建也是2.6, 至少轉移上去程式可以不用改...
windows快樂包~ 沒記錯的話應該是(依序安裝)
python-2.6.6rc2.amd64.msi
numpy-MKL-1.7.1.win-amd64-py2.6.exe
matplotlib-1.2.1.win-amd64-py2.6.exe
scikits.audiolab-0.10.2.win32-py2.6.exe

接著就是讓我非常意外的...centos安裝...
明明已經是內建python的環境, 怎麼會裝得那麼淒慘...
真的不知道要怎麼說...以下是到處解決xxx package not found後的統整結果~
可能裡面有多裝了一些什麼碗糕的~ 反正重點就是...能一路裝完就好了T___T...

至於重點應該還是在於
裝好gcc
裝好numpy module(1.6.2)
裝好matplotlib(1.1.1)  <--原本想裝最新版的, 看到前置清單放棄...還好舊版的會動...無言
裝好audiolab(0.11.0)
只是為了裝好其中一個模組~ 大概就是要一直google, 試裝N次...Orz...
安裝像debug一樣~ 真是好樣的open source...喵的


   su
    yum install gcc
   
    su   
    cd /etc/xxx/install
    wget --no-check-certificate http://pypi.python.org/packages/source/d/distribute/distribute-0.6.27.tar.gz
    tar -xvf distribute-0.6.27.tar.gz
    cd distribute-0.6.27
    python setup.py build
    python setup.py install
   
    yum install gcc-gfortran
    yum install blas-devel
    yum install lapack-devel
    yum install python-dev python-devel
    yum install gcc-c++
    yum install libpng-devel
   
    ##install pip
    #yum -y install python-setuptools 
    easy_install pip
    pip install pil
   
    ##install numpy
    cd /etc/xxx/install
    #wget --no-check-certificate https://pypi.python.org/packages/source/n/numpy/numpy-1.7.1.tar.gz#md5=0ab72b3b83528a7ae79c6df9042d61c6
    wget http://downloads.sourceforge.net/project/numpy/NumPy/1.6.2/numpy-1.6.2.tar.gz
    tar -xvf numpy-1.6.2.tar.gz
    cd numpy-1.6.2
    python setup.py build
    python setup.py install
   
    ##
    wget http://downloads.sourceforge.net/project/scipy/scipy/0.11.0/scipy-0.11.0.tar.gz
    tar -xzf scipy-0.11.0.tar.gz
    cd scipy-0.11.0
    python setup.py build
    python setup.py install
   
   
    ##install freetype
    cd /etc/xxx/install
    wget http://sourceforge.net/projects/freetype/files/freetype2/2.5.0/freetype-2.5.0.1.tar.gz/download
    tar -xzf freetype-2.5.0.1.tar.gz
    cd freetype-2.5.0.1
    ./configure --without-png
    make
    make install
   
       
    ##install matplotlib(use 1.1.1 OK!! 1.3 fail...Orz)
    #yum install python-matplotlib   
    wget http://downloads.sourceforge.net/project/matplotlib/matplotlib/matplotlib-1.1.1/matplotlib-1.1.1.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fmatplotlib%2Ffiles%2Fmatplotlib%2Fmatplotlib-1.1.1%2F&amp;ts=1351382082&amp;use_mirror=jaist
    tar -xvf matplotlib-1.1.1.tar.gz
    cd matplotlib-1.1.1
    python setup.py build
    python setup.py install
   
   
    ##install wave module
    wget http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.25.tar.gz
    tar -xzf libsndfile-1.0.25.tar.gz
    cd libsndfile-1.0.25
    ./configure
    make -j8
    make -j8 install
   
    wget --no-check-certificate https://pypi.python.org/packages/source/s/scikits.audiolab/scikits.audiolab-0.11.0.tar.gz#md5=f93f17211c7763d8631e0d10f37471b0
    tar -xzf scikits.audiolab-0.11.0.tar.gz
    cd scikits.audiolab-0.11.0
    python setup.py build
    python setup.py install

centos 6.3 + apache + php + tomcat

起因1是...Java系統都是tomcat...然後centos吵不是root不能bind 80....
我又不想用root跑tomcat...所以就只好加apache...

因2是...postgresql管理工具, 還是phpPgAdmin比較方便...
反正php都是活在apache下

因3是...因為網管議題乾脆都走http ws比較單純...
所以有東西會從內網proxy->DMZproxy->外網proxy
(喵的~ 我也不想搞成這樣)

因4是...apache(httpd)裝起來好快阿阿阿~~~

因5是...我已經在很努力的精簡過多的功能維護設定...
(之後維護的人接不起來...雖小的還是我~_~)

總之~ 基本架構就是apache+php+tomcat....
依不同的主機跟功能~ 會有兩兩配的情況, 還有os(centos, win server)配...
連安裝建置也要客制化真是要死了
(所以今年決定放棄之前比較熟悉ubuntu陣營了...主因是看到centos的桌面比ubuntu好很多...)

總之底下是php(以phpPgAdmin)安裝法...centos和win安裝差蠻多的~

   su
   ##只要一行就裝完apache, 給個讚
   yum -y install httpd
   #change apache listen port
   vim /etc/httpd/conf/httpd.conf
   Listen 80  ( other port--> Listen *:9080)
   /etc/rc.d/init.d/httpd start
   ###(if perssion deney check this)
   getenforce
   -->Enforcing
   setenforce 0
   getenforce
   -->Permissive
   service httpd start
  
   #check log to see httpd is OK?
   ps -ef | grep http
   cat /var/log/httpd/error_log

 
   ##安裝PHP, 也是一行...好!
   yum -y install php
   ##php test page
   cd /var/www/html/
   vim index.php
<?php
phpinfo();
?>  
   ##restart httpd
   service httpd restart
  
   ##test php
   xxxx/index.php 

   ##安裝phpPgAdmin...真好~
   ##不過有發生過yum找不到package...不知道是剛好被關掉還那邊網路檔掉??
   yum install phpPgAdmin
   #check conf, 預設就只開localhost, 不錯有sense...一般應用就是看情況再多加Allow
   cat /etc/httpd/conf.d/phpPgAdmin.conf
  
<Location /phpPgAdmin>
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
    Allow from ::1
    # Allow from .example.com
</Location>
  
   cat /etc/php.ini

   #如果不知道被東西被裝到那邊去~ search file一下
   #check where? (test ok it is /usr/share/phpPgAdmin)
   find / -name phpPgAdmin
   exit;
  
   ### 安裝湯姆貓, 個人習慣使用zip安裝, yum資料夾結構亂跑很難處理
   ### 使用一般user, 裝在預設8080就好  
   mkdir tomcat
   cd tomcat
   cp ~/apache-tomcat-7.0.26.tar.gz .
   tar -zxv -f apache-tomcat-7.0.26.tar.gz
   cd apache-tomcat-7.0.26
   bin/startup.sh

   ## open browser link xxxx:8080 to test

   ### more setting
   vim bin/catalina.sh
   add
   JAVA_OPTS="-Xms128m -Xmx1024m"
 
   ### use 80(apache2 proxy, ajp)
   su
   vim /etc/httpd/conf/httpd.conf
   ##(G)加在最底下,
   ##不要用/根目錄 轉導~ 會導致php或其他apache目錄被搶走~
   ##依需要使用對應之路徑就好
   <VirtualHost *:80>
       ServerName mybestappp.com
       ServerAlias www.mybestapp.com

       ProxyRequests Off
       ProxyPreserveHost On

       ErrorLog /etc/xxx/log/httpd.tomcat.error.log
       CustomLog /etc/xxx/log/httpd.tomcat.log combined

       <Proxy *>
              Order deny,allow
               Allow from all
       </Proxy>

       ProxyPass /tomcat ajp://localhost:8009/
       ProxyPassReverse /tomcat ajp://localhost:8009/

       ProxyPass /mywebapp ajp://localhost:8009/mywebapp
       ProxyPassReverse /mywebapp ajp://localhost:8009/mywebapp

   </VirtualHost>

   service httpd restart

2013年10月22日 星期二

centos 6.3 service auto start


對server來說~ 有很多service要開機啟動~ 以免發生搞笑的事情...
尤其是ssh !!...跑機房是很痛苦的T__T...

在安裝OS完, ssh 已經預設安裝成service~ 但是"並沒有被啟動", "也未開機啟動"

所以就是只要啟動加設定啟動就好了~~另外還有一個前題重點...
一定要開防火牆(習慣在centos安裝完後~ 反正都會登進GUI畫面~ 用GUI設定防火牆還蠻簡單易懂的~ 就順手先做一下)

另外開機啟動~ AP應該都被設定在level3 或 5啟動~ 各level的定義可以參考
http://ithelp.ithome.com.tw/question/10078093
RunLevel (SysV init) 啟動模式等級可以分為 7 種等級分別是 0 ~ 6,而這 7 個數字所分別代表的意義如下:
0 (halt):系統關機,若您將 RunLevel 設為此模式,則會發現當開機程式完成後系統就直接關機。
1 (Single user mode):單人模式,通常在系統發生問題需要維護時才會進入此一模式。
2 (Multiuser without NFS):多人模式但沒有 NFS 網路功能,通常用於多人多工但不需要網路功能時,才會進入此模式。
3 (Full multiuser mode):多人文字模式,此模式為不需要進入視窗模式,並且具備完整網路功能的管理者所使用的模式。
4 (unused):尚未使用,使用者可以自行定義。
5 (X11):多人圖形模式,此模式為習慣使用視窗模式,並且具備完整網路功能的管理者所使用的模式。
6 (reboot):重新啟動,若您將 RunLevel 設為此模式則會發現當開機程式完成後,系統就直接重新啟動。


  ##firewall setting
  ##open 5432(postgresql), 80(http), 22(ssh)

  ##start ssh
  service sshd restart

  ## assign service auto start
   su
   chkconfig --list
   chkconfig --level 5 sshd on
   chkconfig --level 5 postgresql-9.1 on
   chkconfig --level 5 httpd on
 

centos 6.3 + postgresql 9.1


centos 6.3 其實有內建 postgresql 8.4, 若不想升就不需要處理...
不過若要升就要先把舊的移除~

另外有一點要注意的是~ postgresql 會把 系統帳號(就是ssh用的帳號) 和 db內的帳號結合起來, 簡單的說~ 就是系統帳號和db帳號要用同一個~ 若db connect/owner不用super user(postgres), 就要注意!!(其實設定檔上也可以改設定的樣子~ localhost最上面那群~ 不過在建置時還要create 一大堆schema~ 還要橋那個設定是有點困擾Orz...)

習慣上我會使用centos上的基本user(就是安裝時會設定的那個普通user做 account, 比較沒問題)

另外試了很多次~ 雖然看網路上寫~ 安裝啟動似乎可以不用root, 但是~ 沒root九成都碰到權限問題(裝過五六次~就只有一次不知道未什麼不用XD)...後來就乾脆用root起~ 反正db都是做成service在跑~ root比較沒問題~ 至於權限就控管在db owner底下做處理就好...

user account我大概都是安裝用root, 改設定檔用postgres, psql看情況使用postgres或是自訂user, 設定檔的認證方式~若使用trust 會真的完全不認密碼..個人試過後還是md5比較好...

initdb失敗時~ 會產生一些log檔在data底下~ 基本上就是log看一看後就可以砍掉~ 因為initdb會要求要一個空空的資料夾(yum裝下去應該都是在 /var/lib/pgsql/9.1/data)


   su
   ## remove postgresql inside(default is 8)
   yum erase postgresql
  
   ## install postgresql 9.1
   wget http://yum.postgresql.org/9.1/redhat/rhel-6-x86_64/pgdg-centos91-9.1-4.noarch.rpm
   rpm -ivh pgdg-centos91-9.1-4.noarch.rpm
   yum install postgresql91-server  (yum install postgresql91-server.x86_64)
   adduser postgres
   passwd postgres  (xxxpwdxxx)
   adduser myowner
   passwd myowner  (xxxpwdxxx)
   ### use psql to change pwd
   ###\password postgres  
   ###\q





   ## init postgres db data
   su postgres
   cd /var/lib/pgsql/9.1/data  (check owner must be postgres and EMPTY folder)
   ###if group not permission use root!!!  
   service postgresql-9.1 initdb




   ## config properties
   su postgres
   cd /var/lib/pgsql/9.1/data
   vim pg_hba.conf  (ident -> md5, add access ip range, ident means use another ident server check user/pwd)
   #Add(local host ip must md5 for phpPgAdmin)  
   host    all         all         192.168.xx.1/24       md5
   vim postgresql.conf
   #Update
   listen_addresses='*'




   ## restart postgresql
   /etc/init.d/postgresql-9.1 restart
   ##or use service
   service postgresql-9.1 restart

2013年10月15日 星期二

ubuntu 抓 mac-address


ifconfig -a

ifconfig | grep HWaddr