jump to navigation

C++ Class 繼承 17 四月, 2007

Posted by leterboy in Learning QT.
5 comments

今天要討論的是  C++ 如何寫 Class繼承

將ABC繼承 Class DEF

a.h 

class DEF{
public:
    DEF(int aaa);
    DEF();
    int m_aaa;
};
class ABC : public DEF{
public:
    ABC(int d);   
    int m_aValue;

};

a.cpp

#include “a.h"

ABC::ABC(int d):DEF(d)
{
        m_aValue=d;
}
DEF::DEF()
{
}
DEF::DEF(int aaa)
{
    m_aaa=aaa;
}

由於我們在QT底下測試,那就用個QPushButton顯示好了
main.cpp
#include <QApplication>
 #include <QPushButton>
 #include “a.h"

 int main(int argc, char *argv[])
 {

     QApplication app(argc, argv);

    ABC *abc=new ABC(30);
    QString s = QString::number(abc->m_aValue);
     QPushButton hello(s);
     hello.resize(100, 30);

     hello.show();
     return app.exec();
 }

Powered by ScribeFire.

The Central Widget 19 三月, 2007

Posted by leterboy in Learning QT.
add a comment

在一個視窗程式中,最主要的Central Widget,可能有以下幾種方式產生
(資料來源:Programming with Qt 4, ISBN:0-13-187249-4 )

  1. 使用標準 Qt Widget,例如:QTableWidget、QTextEdit
  2. 使用自訂的Widget
  3. 擁有許多不同的widget,使用plain QWidget搭配layout manager,可以使用QWidget為其他widget的parent,並且使用layout manager管理版面
  4. 使用spiltter:另一種使用多個widget的方式,就是使用QSplitter來做sizing control
  5. 使用MDI workspace:若應用程式採用MDI,則central widget應該是QWorkspace widget,而每一個MDI windows則是這個widget的child。

powered by performancing firefox

/etc/rc.d/rc $run level.d/ 13 三月, 2007

Posted by leterboy in Embedding System.
3 comments

資料夾裡面都是以 S  or K 為開頭的檔案,全部都是連結檔,連結到 /etc/rc.d/init.d裡面的shell script。

  • 以 S 為開頭的檔案,為開機時,需要『啟動, start』的服務
  • K 為開頭的檔案,為『關機時需要關閉的服務, stop』的檔案連結
  • S 與 K 後面接的數字,代表該檔案被執行的順序
  • 數字越小優先執行

最後執行者為S99local→/etc/rc.d/rc.local

powered by performancing firefox

shell script- date 13 三月, 2007

Posted by leterboy in Embedding System.
add a comment

I want to write a shell script to set wireless LAN device!
After setting up the device, it should download a file.
Then change the file mode to executable.

Since downloading a file needs time,I will use two time flag to control.
The following is testing the command date

#!/bin/sh
time1=`date +%M`
time2=`date –date=’10 mins ago’ +%M`echo time1=$time1
echo time2=$time2

check if the file is download successfully

if test -e a.sh
then
echo “download success!"
else
echo “download failed!"
fi

powered by performancing firefox

過些日子,測試完畢,會再修改 以下文章摘自http://gdfan.twbbs.org/blog/2005/12/20/410 12 一月, 2007

Posted by leterboy in Tech Learning.
add a comment

過些日子,測試完畢,會再修改

以下文章摘自http://gdfan.twbbs.org/blog/2005/12/20/410

C 語言 malloc 配置產生的問題Posted by GongDa under 電腦 , C/C++
c/c++
語言的記憶體使用由 programer 自己負責,c/c++ 本身又沒有幫你檢查所配置的記憶體,使用的時候是否產生 over-runs 或是
under-runs 的情形。有時候程式在執行時,雖然存取到未配置的記憶體,但是一時間還不會讓整個程式發生錯誤,這種 bug 最難處理了…
程式執行的時候不一定會在什麼時候出錯….. -__-
最近在 debug 一個程式就是這樣,一直找不到是程式哪裡出現錯誤,而在執行程式的時候,有時候可以正常的執行完,但是大部分的時候,會莫名其妙的出現 segmentation fault 然後結束程式….
網路上找到一些可以幫忙 debug memory allocation 產生問題的工具。像是 Electric Fence 和 valgrind。
使用 Electric Fence 的時候,只要把程式連結到 libefence.a ,再使用 gdb 執行程式就可以了.。看 man efence 會有更多的說明。
另外,在執行程式的時候,也可以使用下列的方式執行:$MALLOC_CHECK_=1 ./a.out
這樣可以打開 glibc 中的 debug 機制,幫你找出可能發生的問題。
相關網站和網址:1.在Linux環境下的記憶體臭蟲該如何解決,英文原文在此-Debugging Memory on Linux2.Valgrind HOWTO3.Using purify, PurifyPlus and valgrind

powered by performancing firefox

vi shell 12 一月, 2007

Posted by leterboy in Tech Learning.
add a comment

用VI寫程式時,常常要到shell中執行Make,這樣exit–edit反覆,很麻煩。
VI中職行shell command有兩種方法:


是只執行一個command: : ! 命令另一個是跳到shell,直到用exit回來: :
shell好像還有一個方便Make的功能…..在要mark的位置,command : m{a-zA-Z}(直接輸入command,不用 :
符號和進入edit (insert) mode).
所以可以mark 26+26 個。

要到某一個mark : 用 `{a-zA-Z}連續兩個 ` 會到剛剛mark的位置。

.要列出所有marks: :marks一個超好用的開檔編輯command gf會開啟游標所在word為檔名的檔案。
在 開include檔時很有用。

列出目前所有開啟的file:files

跳到下一個edit的file Ctrl – ^多檔編輯時,每一個file是一個buffer,buffer的command都是以 b 開頭的::bn 編輯下一個開啟的buffer(file)
:bp 編輯上一個
:bd 刪除這一個
:b{數字} 編輯第N個 nG——跳轉命令。n為行數,該命令立即使游標跳到指定行。
Ctrl+G——游標所在位置的行數和列數報告。
w、b——使游標向前或向後跳過一個單詞。
—- 2.編輯命令 i、a、r——在游標的前、後以及所在處插入字元命令(i=insert、a=append、r=replace)。
cw、dw——改變(置換)/刪除游標所在處的單詞的命令 (c=change、d=delete)。
x、
d$、dd——刪除一個字元、刪除游標所在處到行尾的所有字元以及刪除整行的命令。 —- 3.查找命令 —-
/string、?string——從游標所在處向後或向前查找相應的字串的命令。 —- 4.拷貝複製命令 —-
yy、p——拷貝一行到剪貼板或取出剪貼板中內容的命令。 二、常見問題及應用技巧 —-
1.在一個新檔中讀/etc/passwd中的內容,取出用戶名部分。 —- vi file —- :r /etc/passwd
在打開的文件file中游標所在處讀入/etc/passwd —- :%s/:.*//g
刪除/etc/passwd中用戶名後面的從冒號開始直到行尾的所有部分。 —- 您也可以在指定的行號後讀入檔內容,例如使用命令“:3r
/etc/passwd”從新檔的第3行開始讀入 /etc/passwd的所有內容。 —-
我們還可以使用以下方法刪掉檔中所有的空行及以#開始的注釋行。 —- #cat squid.conf.default grep -v
‘^$’ grep -v ‘^#’ —-
2.在打開一個檔編輯後才知道登錄的用戶對該檔沒有寫的許可權,不能存檔,需要將所做修改存入暫存檔案。 —- vi file —- :w
/tmp/1
保存所做的所有修改,也可以將其中的某一部分修改保存到暫存檔案,例如僅僅把第20~59行之間的內容存檔成檔/tmp/1,我們可以鍵入如下命令。
—- vi file —- :20,59w /tmp/1 —- 3.用VI編輯一個檔,但需要刪除大段的內容。 —-
首先利用編輯命令“vi file”打開檔,然後將游標移到需要刪除的行處按Ctrl+G顯示行號,再到結尾處再按Ctrl+G,顯示檔結尾的行號。
—- :23,1045d
假定2次得到的行號為23和1045,則把這期間的內容全刪除,也可以在要刪除的開始行和結束行中用ma、mb命令標記,然後利用“:’a,’bd”命令
刪除。 —- 4.在整個文件的各行或某幾行的行首或行尾加一些字串。 —- vi file —- :3,$s/^/some
string / 在檔的第一行至最後一行的行首插入“some string”。 —- :%s/$/some string/g
在整個文件每一行的行尾添加“some string”。 —- :%s/string1/string2/g
在整個文件中替換“string1”成“string2”。 —- :3,7s/string1/string2/
僅替換文件中的第3行到第7行中的“string1”成“string2”。 —- 注意:
其中s為substitute,%表示所有行,g表示global。 —- 5.同時編輯2個檔,拷貝一個檔中的文本並粘貼到另一個檔中。
—- vi file1 file2 —- yy 在檔1的游標處拷貝所在行 —- :n 切換到檔2 (n=next) —- p
在檔2的游標所在處粘貼所拷貝的行 —- :n 切換回檔1 —- 6.替換檔中的路徑。 —-
使用命令“:%s#/usr/bin#/bin#g”可以把檔中所有路徑/usr/bin換成/bin。也可以使用命令“:%
s//usr/bin//bin/g”實現,其中“”是轉義字元,表明其後的“/”字元是具有實際意義的字元,不是分隔符號。

powered by performancing firefox

X10 (Industry standard) 12 一月, 2007

Posted by leterboy in Tech Learning.
add a comment

X10 is an industry standard for communication among devices used for home automation. It primarily uses power line wiring for signalling and control, where the signals involve brief radio frequency bursts representing digital information. A radio based transport is also defined.
X10 was developed in 1975 by Pico Electronics of Glenrothes, Scotland, in order to allow remote control of home devices and appliances. It was the first domotic technology and remains the most widely available.
Although a number of higher bandwidth alternatives exist including INSTEON, BACnet, and LonWorks, X10 remains popular in the home environment with millions of units in use worldwide.

powered by performancing firefox

檔案救援 12 一月, 2007

Posted by leterboy in Tech Learning.
1 comment so far

http://hk.knowledge.yahoo.com/question/?qid=7006081004790

「FinalData 檔案救援軟體」簡單快速救回你遺失的檔案
「啊!誰把檔案刪除了?什麼,連資源回收統都清乾淨了…」遇到這種情形,真的沒就了嗎?「FinalData 檔案救援軟體」讓你將原本以為沒救的檔案給救回來。

FinalData
簡單的使用者介面,選擇磁碟機、掃瞄、選擇要救援的檔案,OK!FinalData 啟動後,會開始掃瞄根目錄(Root
Directory)並進行檢查(如果你只是要救回從資源回收筒不小心刪除的檔案,請按「Cancel」鍵取消掃瞄過程,當你的檔案配置表(FAT)是正
常的情況下,不用浪費掃瞄時間,就可以救回你的檔案。
若是你的檔案配置表(FAT)、MBR(Master Boot
Record)、開機磁區(Boot
Sector)有問題,就必須進行磁碟掃瞄的動作。選擇你要進行檢查的群集(Cluster),然後按下「OK」進行搜尋,這個設計是為了避免搜尋壞軌的
動作,如果你的磁碟沒有這種狀況,當然就可以進行全部的搜尋。
從磁碟儲存的邏輯來看,檔案從資源回收筒刪除,其實只是刪掉了某些檔案配置表的
“Reference"而已,檔案中毒或硬碟格式化的動作也是如此。 FinalData
可以復原你的檔案,就算檔案配置表、開機磁區損毀都沒有問題,甚至不需要事前安裝,也可以發揮救援的效果喔。

finaldata可以救回來,不過會掃粉久,用時間換你的資料,祝好運首頁http://www.finaldata.com/ 教學http://www.apple2.idv.tw/486/newpage11.htm

powered by performancing firefox

PCM MDI wavetable 12 一月, 2007

Posted by leterboy in Tech Learning.
add a comment

PCM音源
和利用正弦波、矩形波進行合成的樂器類比模式不同,PCM是指將真實樂器聲音進行實地採集後,
利用採集的數據合成音樂的音源模式。它以能真實表現豐富的音色見長。也叫wavetable音源。
PCM(Pulse Code Modulation)
脈波編碼調製是將聲音信號數字化的最常用的模式。

碼技術首推脈波碼調變(PCM),而影響PCM執行效能有二個主要因素,一是取樣率(Sample Rate),另一個是取樣位元數(Sample
Bit),動作原理是依據定義的取樣率,可以決定每隔多少時間要取得一次聲音資料,然後將此類此資料依定義的取樣位元數轉換成數位資料儲存起來,就完成了
一次編碼的動作。

在MPC中所支援的三種不同音效:
(1) 波形音效 (Waveform Audio):延伸檔名為*.wav,為音效使用中最廣泛的一種。
(2) MIDI音效。
(3) CD音效。
而現階段絕大部份的音效卡都是使用以合成技術為基礎的FM合成音效,但未來應是使用取樣技術的波形表合成音效的天下。

wavetable
指用於MIDI和弦及電子樂器所用的發音模式。
將從原始聲音採集到的音色數據收錄到ROM文件中,發聲時進行D/A轉換後播放。音質由音色數據
所用的ROM容量、ROM中收錄的音色數據的製作方法、採樣頻率、和弦模式所決定。


成聲音的三個要素:頻率、波長和介質。這樣講起來非常模糊,我試著以簡單的方式介紹如后:試想樂手撥動木吉它上的琴弦,琴弦在震動之後不斷以或急或緩的方
式推擠周圍空氣分子,使它們受到擠壓而產生移動,然後震動像是水面的漣漪一樣一圈又一圈地往外散開來。進入你的耳朵,就是我們所聽見的聲音,進入特定的電
子儀器之中,經過一些演算及處理程序,就變成了一堆複雜的曲線,那就是我們在往後要提到的「波形」(如右圖)。這樣將聲音轉變成波形,然後以數位資料方式
存取的技術,一般稱之為取樣。仔細檢視聲音的波形,我們可以發現它的振幅(振動的幅度)影響到聲音的大小、頻率(振動的速度)影響到音高、不同的振動方式
則產生不同特質的音色。這(不是在唸書,所以不用背,知道它很重要就好了)而透過儀器的分析與運算,我們可以將形成聲音的複雜「波形」分解成很多個不一樣
的正弦波,這些正弦所代表的就是一連串複雜的數學運算函數,而由這些正弦波所組成的複雜波形,就是我們所聽到的聲音。這些形成波形的正弦波我們可以稱它為
泛音(Harmonics)。
而因為各樂器製造商取樣技術及所使用的器材特性不同,所以也造成了大大小小程度不一樣的失真情況;有時雖然是同一種樂器,但因為每一台機器所取樣的樂器型式品牌不同,甚至年份也不同,所以在聲音上的表現也存在這一些差異。
藉著這些不斷改進的取樣技術與器材,我們才能夠見到現在植在各式音源器、合成器中豐富又多樣的音色。合成音源的種類(FM合成、PCM合成、LA合成、AI/AI2合成、AWM2/AFM合成)
FM(Frequency
Modulation)合成:FM合成主要的發聲原理是利用振盪器(Operator,又稱為載波器Carrier)產生數種基本波形之後,加以排列組
合,最後透過調變器
(Modulation)調整之後輸出波形。FM合成是一般電腦音效卡上常見的合成方式,通常為了增加音色,音效卡上都會內建多個震盪器,以產生較多樣的
波形,以豐富音色。
PCM(Pulse Code
Modulation)合成:PCM與FM合成最大的不同點,在於PCM不是使用震盪器或載波器來產生聲音,而是直接錄下各種樂器的部份音色,然後以儀器
加以分析演算,使之成為一組數位資料,儲存在ROM(唯讀記憶體)中。等到使用再把資料取出,透過機器將它轉化成為原來的聲音。所以相較之下,PCM的音
色真實程度都遠優於FM,原因在此。LA合成(Linear
Arithmetic):LA合成是由Roland所研發出來的獨特技術,特點在於將FM及PCM所產生的波形結合,再透過TVF(Time
Variant Filter時間變化濾波器)及TVA(Time Variant
Amplifer時間變化擴大器)處理之後輸出。特色是所產生的聲音明亮乾淨。
AI/AI2(Advanced
Intergrated/Advanced Intergrated
2)合成:AI合成是由KORG所發展出來的聲音合成技術,基本上是將PCM所產生的波形經過VDF(Variant Digital
Filter可變式數位濾波器)及VDA(Variant Digital
Amplifer可變式數位擴大器)處理之後產生聲音輸出。而AI2合成則是在發聲程序中多了雙音模式(double
mode),使聲音聽來較渾厚,同時在起音(Note ON)時有細微的走調,以模擬真實樂器發聲時的情況。
AWM2/AFM(secnd-generation
Advanced Wave Momory/Adcanced Frequency
Modulation)合成:由數位樂器界龍頭老大YAMAHA公司所發展出來的獨特合成技術。AWM2是YAMAHA公司針對高品質取樣需求所自行研發
出來的第二代加強波形記憶體,
AFM則是YAMAHA公司最新研究出來的FM取樣技術,透過兩者所產生出來的波形結合輸出聲音,特色為音質逼真、極具臨場感。合成音色的結構與變化原理
波封(Envelope)

色合成的目的,本就在於發出接近真實樂器的音色與音質,也就是除了以將聲音發出來之外,也要模仿使用者在按下鍵盤(或撥動琴弦、敲下鼓面)之後聲音的種種
變化,於是我們用波封產生器(EG,Envelope
Generator)來改變波形(也有人說那是濾波器Filter),產生「波封」以控制聲音的變化(如右圖)。
在圖中我們把一整個波封依時間區分為四個階段,分別是Attack(爬升)、Decay(衰減)、Sustain(遲延)、Release(漸弱),以下是四個階段的動作(也就是TVA Envelop常見的參數):
(1)
Attack(A點到B點):當你按下琴鍵(Note
On)之後,聲音振盪器中發出,從極微弱慢慢爬升到最高點所花的時間。(2)Decay(B點到C點):當聲音爬升到最高點後,落下的時間。(3)
Sustain(C點到D點):通常就是按著琴鍵時,聲音持續發出的時間,若為衰減性音色,這一段將會較短,並直接進入Release。(4)
Release(D點到E點):當使用者放開琴鍵(Note
Off)之後,波動來源雖已消失,但聲音仍然會有輕微的餘韻,這段聲音漸漸微弱至完全沒有的時間就叫Release。
波封(Envelope)的變化順序濾波器(Filter)除了波封產生器之外,在音色調整上還有一個很重要的元件稱之為濾波器。

般而言濾波器有分為高通濾波器(Hight Frequency Pass
Filter)及低通濾器(Low-Pass)兩大類,但是不管那一種Filter,其目的都是在於濾掉頻率在某一範圍中的波形,以取得留下來的波形,而
決定被過濾或被保留範圍的那個點,就稱為Cut Off Point,而那一個點上的頻率就稱為Cut Off Point
Frequency。而另外一個經常使用到的參數Resonance(共鳴),就是以某一個頻率(也就是Cut Off Point
Frequency)的音高來強調音色的存在。好了,當你大致上瞭解聲音產生的來龍去脈之後,接下來就是實用的參數介紹了。在音色修改中常用的幾個參數
(1)TVF
Cutoff Frequency(截止點頻率):將Cut Off
Point的值調大,會讓較多的倍頻泛音進入聲音之中,可使音色的明亮度提昇,音色也會變得尖銳,得到音色突顯的效果,相反的,若減低Cut Off
Point的值,會使音色變得較柔和,也使音色變得較為晦暗。(2)TVF Resonance(共鳴):在Cut Off
Frequence的附近有著共鳴(以某一個頻率的db值來強調音色的存在)的效果,所以接近Cut Off
Point附近的倍音成份會變大(就像將麥克風靠近喇叭一樣),可以將該音色的特色特性突顯出來。換成另一種說法,可以讓聲音的位置聽起來比較"前面",
反之則會讓聲音的位置變得比較"後面"。3)TVA Envelop Attack
Time(爬升時間):當我們在MIDI鍵盤上按下一個鍵後,該音色的音量從最小達到最高值,如果我們將這段變化的時間縮短,那麼這個音色會變成"音色突
然且短暫的",反過來的話,則會得到一個"音色音量緩緩增至最大"的效果。(4)TVA Envelop Decay
Time(衰減時間):Decay
Time是決定音量在達到最頂點後衰減至一定值的時間,若我們將這段時間拉長,可以製造出豐滿的音色,反過來則可以製造較緊繃的效果。(5)TVA
Envelop Release Time(漸弱時間):Release是當放開琴鍵(Key
Off)之後音色殘留餘韻的時間,將Release值拉長的話,可以得到類似,Reverb的空間殘響效果器的效果。(6)Reverb:空間殘響效果
器,模擬樂器在固定空間中演奏,聲波撞擊到牆壁或是門所傳回的迴聲,可以帶給聲音很具體的空間感。(7)Chorus:製造齊聲合唱效果的效果器,以極微
的時間差與頻率差發出許多個相同音高的聲音,讓音色聽起來像是數個相同的樂器一起齊聲合奏一般。(8)Delay:遲延效果器,在琴鍵按下之後,經過一段
時間,再製造一個較微弱的相同音色,若適當地使用,可以製造出比較強烈的"迴音"的效果,或是讓音色較黏。*Reverb、Chorus、Delay嚴格
說來與音色修改並無直接關係,而是常用的三個效果器,但有鑒於其使用之頻繁,所以我在這裏也一併提到。有關於各參數在cakewalk中運用的技巧,請參
考"RPN/NRPN在Cakewalk中的運用"一文。

powered by performancing firefox

video playback 12 一月, 2007

Posted by leterboy in Tech Learning.
add a comment

the following are some suggestions to do video playback
what you could do would be to
use libavcodec from the ffmpeg project (www.ffmpeg.org) in your
application to decode the file, and then display it in your own
widget.

You should look at KMplayer (http://www.xs4all.nl/~jjvrieze/kmplayer.html),
which allows you to choose Xine or MPlayer as a back end.

powered by performancing firefox