2010年1月18日 星期一

HK6

這一個作業弄了3天還是沒辦法把檔頭讀取出來

就是不知道為什麼?


怎麼弄都不對~~~


一直跑出point to structurerequire on left side of -> or ->"


一直很煩就是不知道為什麼?Fseek,Fopen,Fread都是照格式來走卻還是不對



還是又是哪裡的格式不對了?


也知道從PSPAD裡面去抓


雖然在PSPAD裡面看的到開頭的RIFF


可是要讀取出來卻沒辦法?

到底哪裡不對了...





HK5

雖然寒假開始了
不過還是作業沒忙完
在上裡拜其中考期間
學校有舉辦一場ACA Photoshop的認證考試的課程
於是就報了名參加
今天剛上課就講了一堆
跟這學期的老師跟我們說的
解析度畫素跟像素
聽起來好熟悉教的跟老師上課的東西差不多~~
其中在教我們的到使用Photoshop
看到跟這一次的作業一樣的東西就是做圖片時
有看到旁邊有調色盤
看了就想起來這門課所教的東西
並且使用到的功能
都能依照亮度、色彩度跟對比值做排列
看到這些功能就想到BCB的作業還沒弄出來~~
雖然一直試著去弄
還是沒試成
不過今天在photoshop裡面聽了之後對調色盤有更深的認識了!

2010年1月16日 星期六

HK8

這一學期修數位媒體概論這一門課...
哈哈...本來以為是理論的課程
結果一開始來第一次上課
發現程式的比重還蠻重的
而且又是一套我沒寫過的程式語言BCB
說真的還蠻害怕的...
因為進來到大學,應該說從高中開始
因為是念高職又是資訊類科
所以從高中就要開始寫程式
不過也就是不知道為什麼?
碰到程式語言的機會雖然很多照理說應該要學得很多
從高中學的VB跟C和組合語言
到大學學了更多語言
因為對程式不知道為什麼就是不熟而且還蠻怕的
只要每次碰到程式語言就是雙手投降
因此在這一學期本來以為是理論的課程
不過課程裡要寫程式就無言了
但試自己想說都來的不如學學看的那一份心情
而繼續下去
從老師一開始教的用一個按鈕按下去會出現訊息
到讀取檔案說真的都還蠻容易的
等到第三個作業開始時
開始遇到的困難
真的要開始學Fseek,Fread,Fopen
這三個指令,而且每一個都有自己的格式
說真的那時在第三個作業拖了蠻久
弄了出來可以做讀檔頭資料的動作
當在一直研究的過程中時間都消耗的超快
但弄出來有一種莫名的成就感
所以在學這一棵都還蠻OK的
老師每兩個禮拜出一次程式作業
說真的其實時間都蠻充裕的
可是到了後面的作業說弄還不見得弄得出來
因為越來越難
不過從圖片的一些小程式跳到了聲音
突然還蠻不習慣的...
而且到聲音的部分
不知是我的學習比較緩慢的關係還是怎樣?
總覺得聲音教的速度好快
雖然在程式作業中有一個跟之前的也是一樣讀取檔案檔頭
基本上的程式的架構都還是在
不過做出來就是不對
到最後一個作業做出除了能撥還能看到聲音的波形
在做的時候撥放聲音的是OK
可是真的到了如何做出波形
說真的不知如何下手
一下子再想檔讀進來要放在哪?
因為跟圖片不一樣讀進來看的到東西
再從圖片裡抓資料
不過在聲音的部分讀近來卻不知該顯示在哪?
波形的顯示一直讓我不知如何下手
而且在家用的是BCB專業版(盜版的~~沒註冊
一堆好多的原件,不知道要從哪裡抓原件來使用
說真的還讓我蠻頭痛的...
對於這學期的課程都還OK
只是讓我有種感覺前面的作業還蠻簡單的
後面的作業突然變得好難...

HW 7

這次的作業7,想了很久,不過還是沒辦法在最後關頭用出來,

雖然不知道現在到底截止沒,不過看老師還沒在網頁KEY新分數,

來碰個運氣看看。


這次的作業主要是強化第6次作業內容,要可以自由調整

音量,還有Show出音波圖。



在讀取音量這,其實不難,只需waveOutGetVolume

與 waveOutSetVolume 抓取 及 調整設定 即可。



不過音波圖一直發生錯誤,上網看過一些相關資料,

不過還是出現了一些問題,礙於今天從早上補課到傍晚,

所以沒辦法在12點以前上傳,真的是相當麻煩的事情....

先暫時打出目前寫程式的心得,晚點如果有時間再補齊。

HW7

這次作業要讓影音檔至少有放大聲放小聲的功能,老師很直覺的告訴我們將讀出來的資料/2再寫回去就變小聲了,但實際操作後發現fwrite這功能真的不太會用,而且也不太清楚要讀多少byte出來和用多少byte寫入,直覺是讀一個byte/2啦,但fwrite還不能成功所以不到實際上是如何...所以這次作業無法如期繳交了 不過我在寒假會把這份作業寫完再來改Blog的~~(這不是要求加分!!) 現在是因為要趕在12點以前PO出文章 ... 祝大家寒假愉快囉!!!

hw8

時間過得真快,一學期的課轉眼就這樣過了,數媒概論這堂課學到了不少東西,像是第一次接觸BCB這種可以一直拉原件的開發環境,使用起來還蠻方便的,從一開始很陌生,後來慢慢抓到感覺,但還有很多原件都還沒有嘗試過,再來慢慢去用看看。另外學到的就是對圖片影像的一些基本觀念有了初步的認識,像影像怎麼組成、怎樣儲存在電腦裡等,程式上就是學會使用寫程式非常重要的fopen,fread這種可以存取資料的函式,還要再多加強練習。上大學,找資料的能力真的是要多培養,因為能夠自己去找到資料,才可以學到更多東西。而這學期,資料找了一些,但研究程式的時間太少,希望下學期能再多投入程式一點,程式想要學好就要靠多練習了。

HW7

  第七次的作業是要撰寫一個可以處理音訊的程式,像是修改聲音大小的功能。 之前聽老師說把裡面的值除以2再放回去,就能將音量變小。初步認為WAV檔在檔頭記憶體45之後是存放所有有關音檔播放的內容,所以應該是會有存放有關音量大小的控制,但卡在程式不知如何開始寫,不知道該如何下手。剛開始的時候還以為好像不會很難,但實際操作後發現還真的不是那麼一回事啊。或許沒有老師的範例程式,就沒有方向了,慚愧呀。
  這一次的作業真的不容易,也在google上爬了好久的文,也找到了這個
控制音量 ,但是試著照上面的說明來打,還是沒有成功,目前我的程式是卡在未定義的"waveOutGetVolume" 和 "waveOutsetVolume" 。 應該是先要設立一個標頭檔,可是不知道該用哪個。
  如果能將這個程式完成的話,就好像我自己完成了一個小型的播放程式,之後我會再利用時間來研究看看 如何來修改聲音的大小,現在只能先打上我作這個作業所碰到的遭遇和心得囉。

HW7

這次的作業,和之前的作業相比,似乎差很多,之前都是用fopen, fread. fseek,而這個作業好像完全不一樣,對我來說毫無頭緒,我和週遭的同學討論,沒有人能做得出一些東西,而且時間又在緊迫的期末,可能也是做不出來的原因之一吧,這次作業比較難一點,也沒有範例程式,而且WIKI裡面也看不出有關程式的東西,只學到樣本用2進位計算可被CPU處理,這使作業難上加難,做不出來也是我太依賴範例程式的關係,不過這程式做出來似乎很有趣,顯示每段的示波圖形,如果載入一首歌,能播放音樂並顯示動態的示波圖形,這樣應該和常用的音樂播放器顯示的示波一樣。
才七個作業我就有兩個作業作不出來,真的應該好好檢討了,並且在寒假完成和完整了解每行程式碼,希望和週遭的同學一起討論,可以的話寄Emai給老師,請老師幫忙解答。

HW5

昨天晚上研究了老師的範例程式好一陣子,今天早上又再看了一遍,問題還是沒解決,大致上看過去好像主要的程式都寫出來了,似乎只要拉幾個元件,宣告幾個變數就可以完成,但是並不是我想像中的這樣。"imPalette->Canvas->Brush->Color=clWhite"這行我就無法理解,而且Palette似乎之前用過,但竟然忘記該怎麼用了,而第一個for迴圈應該是先將調色盤的RGB設為沒有顏色,但到了"GIFHeader"和"cVersion"我就用以前用陣列的方式宣告成BYTE,但是卻出現錯誤,而且這錯誤我看不懂,"bM=GIFHeader[0].bMCrPixel>>7"這行我也無法理解,尤其是">>7"的意思,而下面也有幾行是這樣,除了這些問題以外其他都還可以理解,寒假一定要和同學討論,並且完全學會這個作業。
不過我也在WIKI學到一些GIF檔的資訊還不錯,原來GIF檔只能用在256色以下,不過在圖表上卻比JPG表現還要好,GIF檔當然還是有他獨特的優點。

HW8

回想這學期的數媒概論課程,感覺時間一下就過去了,
要學習的東西有限,
能在有限的時間啟發我們的動力是很重要的一部分


這學期老師教很多BCB程式的技巧,
而且也增加了經由程式對影像的格式處理和改變方式。
檔案格式在這學期常用的bmp和其他gif和jpg檔案格式。
將這些常用檔案互相交流。
對於一些程式介面也非常有幫助,
如程式對話窗和呼叫讀檔指令等。
如fopen, fread, fseek等程式指令。
還有最後的音頻檔案格式的讀取和變化元素,
音頻檔案格式WAV AIFF MP3 AAC格式,
沒有這學期數媒課的學習,
恐怕還不知道有這麼多音樂檔案格式。


這學期的數位媒體課程真得學到很多東西,
不只是程式,尤其在電腦知識上面的提升
也接觸到其他班級的同學交流,
有程式問題可以互相幫忙解決,
雖然這學期的數媒課程過去,
但不代表自己學習的時間結束,
還是要不斷的學習也不僅是課本上的知識,
還要瞭解世界脈動才是。

HW6


作業六,這次換成音訊處理
同樣是用fopen,fread,fseek讀檔頭
不過讀的不是圖檔,而是Wav音頻資料
首先也是用PSPad(真是好用哀)看一下檔案以確認fseek要指到的位置

然後再fopen,fread讓他跑出來

時間很趕,也就做得很陽春,只讓能跑出來的先跑出來....
至於音譜部分,他的計算方式就搞不太懂嚕....

HW7

這學期數媒最後一份作業,進入到嚕音頻編寫
fread出音頻的聲音部分 然後把化成數值減半後再存起來

感覺好混亂 音頻格式內容跟圖檔不一樣,怎看都像亂碼,不知要怎嚜分段
還要讓他能播放出來,對音頻不熟悉就寫不出來....
(想到沒有壓縮的Wav 就這嚜難懂,如果要搞MP3.....)

HW5

第五份作業,從BMP圖檔進化(?)到GIF圖檔嚕~~
依照理解,GIF跟BMP格式特別不同在於,他多增加嚕一個調色盤
不管是靜態的還是多楨GIF都是全域調色盤或是單張調色盤裡取顏色
而我們這次的作業就是要把這調色盤給取出來

從想法來說,只是要把圖片檔裡的調色盤挖出來用雙迴圈排成16*16方陣
老師也給出範例程式,應該是不難的
老師的範例程式,直接在上面看,也"大概"了解幾行代表的意思與作用
不過實際上拉到自己的程式裡,卻又不知如何怎都跑不起來
錯誤代碼十幾行,又沒功力看懂,還真是印證嚕一句話:
不怕拿嚕別人程式,只怕拿嚕不會用....

看來說是理解嚕,"大概"的理解也是不算在內的
寫程式還真不能用"大概"兩個字混過去.....


HW5


































我先去維基看了有關GIF的介紹,GIF是採用非破壞性的壓縮技術,只要檔案色彩不超過256顏色的話,檔案壓縮後都還是能完美輸出,不過主要不適用於真彩圖片。GIF有五個主要部分以固定順序出現,所有部分均由一個或多個區塊(block)組成。每個塊由第一個位元組中的標識碼或特徵碼標識。這些部分的順序為:頭塊、邏輯螢幕描述塊、可選的「全域」色彩表塊(調色盤)、各影像資料塊(或專用的塊)以及尾塊(結束碼)。
之前的作業都是希望我們把檔案的資料讀出,甚至是在上面畫線,變成灰階影像,這次是要在圖案上顯示出它的調色盤排列,我先去看了老師的程式碼,大概知道主要是先設定RGB,然後再去設立調色盤,可是我看不太懂這一行
float fLuminance[256];


imPalette->Canvas->Brush->Color = clWhite;
imPalette->Canvas->FillRect(Rect(0,0,323,323));
這邊的第二行我也是不太了解為什麼要設那四個值,
其實程式碼有些能在書裡面找到資料,只是有些還是沒辦法完全理解,弄了半天,我看同學們都說老師的程式碼還需要修改蠻多的地方,可是我弄了好久,還是不知道要怎樣做才能呈現出來,BCB雖然介面看起來很好上手,可是真正要去熟悉每個指令,還是要費好一番功夫,有些按鍵雖然知道要放上去,但是卻不知道要在裡面打怎樣的程式碼。

HW8 期末心得與收穫

原想說作業再怎嚜拖 也不至於真的太晚交
結果期末考完其他補課補報告還怎的一堆,最後還是得在期限前趕工
真是頭暈....

這學期,感覺收穫真的不小
從懵懵懂懂的程式使用者,居然一下就要躍升(?)成編寫人
就跟老師課堂上總是強調的:
我們是資工系,所以不是要學怎嚜用程式,而是要學怎嚜寫程式給人用.

從一開始的讀圖,修圖,還有音訊處理
這學期學習到許多檔案格式的認知,與修改應用
草草望去,不過才學嚕廣大數位多媒體的一小部分
不過光是這一小部分,就足以讓幾乎算新接觸的我暈頭轉向
以前繪圖才不管格式,隨便預設什嚜格式就照存什嚜格式
聽音樂也是,網路上拉下來直接丟隨身聽就好嚕
頂多覺得上面的頻譜圖樣好漂亮,也沒其他想法....

總是習慣以理解為主的我,在程式實作方面倒是常碰到困難
明明也都聽懂寫法,一打開BCB 腦筋又一片空白
這點倒是一個很大的打擊,練習真的太少...
說是這樣說,卻老是不拿出時間練習,會寫不出來也是自作自受....

以多媒體這門廣大的領域來說,這學期感覺學到的東西並不多
心虛一點說來,我們學到的真的太少,根本不是夠拿出去見人的程度
不過老師在最後幾堂課,沒加快進度反而還放慢,一一帶我們從維基
了解物件的格式與結構,我倒是覺得這收穫反而更是無比
資訊這門學問,內容時在博大精深,想教想學也學不完
如果能試著自己去讀資料找資料,感覺才是真的學習,更是有完全吸收
老師最後幾堂課,減緩嚕進度就是要教導我們這點吧
這也是在未來資訊業能生存的一門重要技能,不好好把握不行哀....

HW8

修完了一學期的數媒概論,這是我第一次修李遠坤老師的課,感覺老師很常跟學生互動,也有蠻多加分的機會,感覺還蠻不錯的。這學期共有7個作業,其實分量還算適中不多也不少,學期一開始老師教我們每個人都要買一本BCB的教學書,剛買時嚇到怎麼會這麼厚的一本書,但有稍微看過裡面的內容後,真的覺得內容其實編的還蠻詳細的,也有很多範例解說,這麼厚一本才500元算起來也蠻OK的,也從課本裡學多蠻多之前不了解的小地方跟觀念,真的是BCB入門的一本好書!這學期老師講解了蠻多讀檔的概念,以前不知的fopen、fseek、fread現在有了比較清楚的了解。另外,在枯燥的程式學習裡,能夠配合圖像、聲音、影像就感覺不是那麼枯燥,比較新鮮有趣多了,總體來說,我覺得這學期修的數媒概論真的還蠻不錯的!

HW4



原本前幾次作業讀取圖片是用BCB內建好的LoadFromFile
再讓我們對圖片做些修改應用
這次的作業更是要讓我們自己讀取圖片的資料,設法把他完整顯示出來

這次作業主要是在 fopen,fread,fseek 的應用
雖說已經練習幾次了,感覺還是用起來有點生疏,
果然還是拿別人用別人寫好的LoadFromFile簡單哀.... (苦笑

一樣是fopen, fseek 找到圖檔像素起始位置,然後再fread 從圖片RBG起始位置開始放入迴圈
依課堂上老師說的,要注意BMP檔得要讓邊長為4倍數,不然有些圖片會整個走樣
而且一直R.G.B.R.G.B習慣嚕,也還得注意BMP檔像素是依B.G.R這樣放進去
一沒注意圖片就會變得怪怪的,顏色一整個詭異....

HW7

  現在是清晨五點半..眼皮好重
  除了考試考完把K書沒睡到的覺補回來外
  就馬不停蹄的趕作業,唉...
  因為在過兩個小時還得在星期六補六節課
  所以這部分的作業沒有充裕的時間達成自己原本的預期
  一想到這裡,上次那些信誓旦旦開作業繳交期限支票的大德們,
  都是靠自己完成的嗎..真不知道該說什麼了

  本來預計要修正出一個正常的WAVE,不過這樣怕連作業七都完成不了
  作業七的部分基礎是修改WAV的音量大小
  沒什麼難度,利用兩個WAV音量控制function
  取得音量的
  waveOutGetVolume(HWAVEOUT hwo, LPDWORD pdwVolume)
  
  以及設定音量的
 waveOutSetVolume(HWAVEOUT hwo, DWORD dwVolume)

  最初腦袋不正常的想利用兩個Button來提高音量跟降低音量
  雖然方法是很特立獨行,但是說實在的如果不做判斷跟額外的資訊提示
  不會比bar系列的元件來的直覺,而本來想用看看沒用過的TrackBar
  但是為了保險,還是直接使用曾經用過的ScrollBar

  步驟也很直覺
  當移動ScrollBar便取得原始的Volume然後加上ScrollBar的值設定音量
  本來神智不清的一移動就取音量然後直接加上ScrollBar的值Set
  然後Run了還覺得奇怪,咦..怎麼聲音加上去就下不來,只能加不能降..
  精神狀況不好的情況下寫程式..事倍功半阿~

  我原本另外想到一種處理方法,idea來源是圖片影像的透明化
  將兩張圖片重疊,把重疊的像素點相加除以2
  本來想實驗看看說,如果把兩個WAV檔案取出data本文音訊資料
  相加除以2會有什麼樣的效果,不知是會有remix的效果還是單純的變魔音..

  



  另外是想要改善的程式碼易讀性,過去修資料結構跟演算法的時候
  還不覺得struct是個好東西,一直到這學期
  其他專研組的同學程式能力大為精進,偶爾偷學兩昭
  剛好這裡派的上用場,就像之前在讀取BMP Header時
  老師有提供BMP的Header Struct結構
  不過因為當時已經自行設定完變數,覺得有些麻煩而且可以執行就好
  就沒去更動程式碼,這次則是因為看已經被精簡過的程式碼似乎
  還有再被精簡的空間,所以就試看看

  而結果算是好壞參半,一次直接計算檔案的總長度,然後把檔案的資料塞進
  設定好的結構當中,不用在對說讀第4 Bytes是啥、讀第16 Bytes是啥
  但是壞在出了點不知是哪問題的狀況

  Header讀取明顯有問題
  以下這張是正常的數值
  


  這張則是錯誤的
  


  從錯誤的方式推斷,猜測是結構中宣告的變數空間過大
  但是結構宣告如下:

struct Header_data{
  char ChunkID[4];     //[0] ChunkID
  long int ChunkSize;   //[4] ChunkSize
  char Format[4];     //[8] Format
  char Subchunk1ID[4];   //[12] Subchunk1ID
  long int Subchunk1Size; //[16] Subchunk1Size
  WORD AudioFormat;    //[20] AudioFormat
  WORD NumChannels;    //[22] NumChannels
  long int SampleRate;   //[24] SampleRate
  long int ByteRate;    //[28] ByteRate
  WORD BlockAlign;     //[32] BlockAlign
  WORD BitsPerSample;   //[34] BitsPerSample
  char Subchunk2ID[4];   //[36] Subchunk2ID
  long int Subchunk2Size; //[40] Subchunk2Size
};

  另外有以ShowMessage(AnsiString(char))
  的方法確認說Byte數是否正確
  確認結果無誤

  
  char   佔 1 Byte,char[4]就佔4 Byte
  long int 佔 4 Byte
  WORD  佔 2 Byte

  每個資訊所佔用的空間大小都正確
  所以這個問題還有待克服..六點十分了,
  如果下課了還有機會的話真想把它DeBug完...

==================================================

  找到其中一部分的錯誤,但是低級錯誤...
  BlockAlign跟BitsPerSample的資訊錯誤部分
  我宣告的4 Byte的Buffer供全部的資訊暫存用
  因為這兩個資訊各佔用2 Byte
  而計算是我是以4 Byte為前提下去計算
  結果導致BlockAlign跟BitsPerSample只覆蓋[0]、[1]的空間
  [2]、[3]還是上一個資訊的值
  丟去計算當然就錯了




  至於另外一部分還是有點問題
  直接看結構,結構自訂變數載入的值都正確


  但是單看自訂變數就會發現莫名其妙的東西..

HW8

轉眼間一學期就這樣過了,在數位媒體概論這堂課,或許我真的沒有很用心的在學習,交作業往往都是要靠同學的教導或是幫助才能順利交的出來,知道如何把圖重彩色改成灰階,知道怎樣能像小畫家一樣在圖上畫線,知道怎樣才能把滑鼠所點到的圖案顏色顯現出來,知道如何把一張圖裡面的顏色用調色盤的方式呈現出來,知道怎樣在打音訊檔的一些之資料都列出來,知道怎樣控制音樂的大小聲等等...一些內容,可是發現BCB如果真的學起來的話,的確是個很實用的程式設計工具,或許也該把那本厚厚的BCB課本拿出來再翻一翻、看一看了,人家說書中自有黃金屋,或許真的給我翻到了開竅的關鍵,每個老師都說成是要學好沒有他法,就是要不斷的練習不斷的除錯,不斷的發揮想像力,但在這之前要先把心態調整好,唯有先把心態調整好,然後再來盡力做一件事情,不然又是半途而廢的話僅不是前功盡棄,只要不斷的練習熟能生巧,不管是多難的程式都可以迎刃而解吧,但在這些前提就是要先打自己的心態做一定的調整。老師的教學方式跟其他老師不一樣,老師比較偏向於我們自己思考自己找出問題,然後先自己先想辦法解決,真的沒有辦法的話再出動老師來幫助,我覺得這樣的方式還不錯,但是最重要的還是要看自己,老師在好自己在不認真還是沒有用,好像說師父領進門修行在個人,大概就是這個意思吧。希望以後還有機會再來修老師的開的課程。

HW6



這次的作業是要讀音訊檔的內容,並且有簡單的播放、停止功能。跟作業4的內容很像,只是把讀圖檔的資料改成讀取音訊檔的資料,但也有限制,就是只能讀取wav或avi檔案的音訊格式。這次的作業一樣利用到PsPad來查詢標頭檔的位置,比照維基百科上查詢到的檔頭位置所代表的資料,稍做修改之前的作業,重新設定指標指到的位置,在讀取印出。另外播放音樂還多了下面幾行程式:
MediaPlayer1->FileName;
MediaPlayer1->Open();
MediaPlayer1->Play();
雖然只有簡單的播放功能,感覺已經很開心了。

HW7

這次作業因為那次上課我在第二節結束後請假離開,


所以第三節解說這次作業部份就沒聽到,


寫起來的感覺非常地生手,


不過我還是嘗試去把它寫出來,


不過卻卡在如何顯示它的波形寫法,


雖然我有在Google上找到波形的解釋與它的寫法,


但是別人寫的不一定可以套用到你的程式裡面,


這是我上次作業再次經歷到的經驗,


所以相較於我覺得音量就比波形好寫的太多了,


而且音量的程式碼非常的簡單根本就不用幾行,


後來雖然打出了波形的程式碼,


但是居然是......



全部空白的...根本就沒波形!!


























可能是資料根本就沒跑進去裡面,

只好再研究研究~~~

HW8

 

這個學期其實很高興能修到"數位媒體概論"這門課
當初在選課時其實不了解這堂課在教什麼?
後來去問學長聽說是在教"BCB",之前曾經耳聞過BCB的
想說多學一種新的東西也不錯,就抱著有點好奇的心態選了這們課。

剛開始老師所教的BCB指令我完全一個都不懂
因為以前都是停留在Console階段的程式設計
沒有接觸過式窗程式(GUI)設計的方式
後來有了"磚頭書"之後才一點一滴慢慢累積對於BCB的了解
BCB是個很不錯的Lib
它幫你把系統核心與視窗的部分處理好
讓我們能用很簡單的方式做出我們想要的東西

只是這門個叫做"數位媒體概論"
既然講概論就要提到數位媒體的本質是什麼?
換句話說就是了解數位媒體到底是用什麼形是在運作?
所以我們開始用起了C語言的檔案開啟指令(fopen等等)
網路上的資料很多又加上以前高中曾有段時間用過C
所以稍微複習一下就會用了

隨著一次次的上課
一份份的作業(BMP GIF WAVE)
慢慢了解到這些常出現在我們周遭的東西是什麼
下次如果有人問起可以大聲的說"我會"

其實這學期花在很多的時間在Coding上面
像是光一個BMP就花了很長的時間在教
以至於壓縮到後面其它課程的時間
對這門課的建議
我是覺得可以多去探討一些媒體的部分或是"機器與人的關係"
好比說之前曾看到的這個影片

其實影片中的技術一般人也做得到
但是別人就是有創意
可以把不同領域的東西兜起來
轉貼一篇在黃世育老師在多媒體課程部落格的文章


外國人做得到
其實台灣的實力也不差
只是我們缺少刺激
去引發一些新的想法
只會等著別人答案,上上facebook,噗噗plurk等等
這樣話那幹嘛要學期花大筆的學費來這呢?

當然基本的東西也學習
只是我覺得比重可以稍微少一點
如果說有興趣去學的話
圖書館有書查
網路有專家問
有姿妘可利用
這才是所謂真正的"學習"吧?

以上只是一些個人的想法
最後祝各位寒假快樂~

HW7

第七次作業是要我們做出處理音訊的程式,跟以往的作業有相當大的差異,在網路上找了有沒有相關的資料,看了同學做出來的程式碼才有些些的了解,到最後仍無法自己完成一個程式,時再說是自己的練習不夠,,以下的音頻是用波行的方式呈現,下面是我調整x,y軸後的波行呈現
上圖調整X軸布條動Y軸所呈現的波行。


上圖則是不調動X軸而是調動Y軸後的波行。
雖然這個程式說難好像也沒特別難,只是想到有人可以寫出一個播放程式就很厲害,不知道他們是花費了多少的時間跟精力才有辦法些出這樣一個播放程式,這也算是前人累積的智慧結晶,不過真的很佩服,不然現在怎麼能隨意的聽音樂,隨意的切換大小聲呢?

HW7

1 
Program Name:SourceRIFF
Version:  0.02 alpha

功能:基於0.01載入header,這次增加了顯示其聲音波形的功能

期時花很多時間去想這個作業如何顯示波形
在網路上也翻了很久資料
其實提供的資訊並不多
因為很少人在做這個"基礎"的程式
大部分都是套用API(OpenCV,DirectSourd等等)下去使用

這次做得是透過Canvas底下的MoveTo與LineTo的函數去實做
上個作業有題到取出data的部分並不難
但是後來仔細看文件時並不簡單
像是我目前還是沒有辦法分出所謂的左聲道與右聲道(立體聲的音源)
所以這個作業只有做出混合的版本而已

至於其他的部分(像是fade in fade out)
因為要期末考了所以就沒有深入去研究
也許還寒假時再來仔細研究吧~

話說這次兩個作業又遇到了檔案讀取的問題
遇到了特殊字(像是- 空白字元)的檔名
不知道為什麼為自動跳掉不讀取
新版的BCB對於Unicode的部分真的很敏感
舊版的完全沒有這個問題
不過就長遠看寫unicode的程式不管在哪個語系的機器都不會有執行上的問題
某種角度來看也是件好是吧?

HW8

數位媒體概論這堂課是開給二年級的課程
因為是多媒體學程的核心課程,大家都想說有就先修
怕以後衝堂或是無法預期的未知數
沒修到其他多媒體學程的核心課以致於不能畢業(?!)
所以去年要搶還搶不到呢!!
但是也因為班上同學大多都去年就修過了
所以得到了一些意見,想當然的
過去一直引人詬病的互評規則真的沒多少人喜歡
但還好老師這學期一開始就說明更改這個規則,這讓我大大鬆了一口氣
不然原本還擔心會被學弟們打爆!!
由老師來評分至少對同學來說算是公平的
不過我覺得..新評分方式開宗明義的說了70分裡面有10是拿不到的
也就是說學期總成績最高只有90分呀..(補上作業八加分最高93分)
對於一些可能想要衝總分的學生來說似乎好像還有一點分數的空間。

這學期上了這堂課對我來說還算不錯,因為上了大三之後
程式實作課程越來越少,腦袋在這樣石化下去
專研就等著變成石頭站在講台上給評審老師罵..
此外,上大學後總是在俗稱小黑的DOS環境下操作程式,
對於高中以VB入門的我來說著實是個不小的震撼彈
雖然語感沒有受到太大的影響,但是在撰寫上就會覺得綁手綁腳
而這門課程使用UI的C++ Builder是吸引我的原因之一,
而實際上也讓我感到很慶幸再這個時間點修習這個程式語言,
因為這學期同時修了系主任的WinSock程式設計就要求我們用UI,
雖然有VB的基礎,但是畢竟是號稱初學者用的程式語言,
總是依賴著它好像也不大好,其他同學就只能選擇重新自學一個UI的語言,
不論是MFC還是C#,變成都不知道是在學WinSock還是在自學程式語言
而我則可以將BCB現學現賣,幫了我個大忙。

至於課堂上的心得,可以感受到老師教學的熱誠,
但是大環境是這樣,真正想上課想學習的人似乎不多,
我想這屆選修的學弟們多少也是因為這門是核心課才選修吧..
在作業的難易度來說,講實在的,我覺得是真的太簡單,
有時候甚至簡單到心得不知道要寫什麼,這裡就有兩個問題
雖然我個人認為作業太簡單,但是對於這個班的大多數同學來說,
不論是不想做只想等著抄,或是做不出來乾脆等著抄,甚至是
會過就好死到臨頭再來打算的總總情況,使得老師不論是提供參考範例或是
乾脆降低作業難度,現狀沒有改善
而看著別人瞎混、老師得配合瞎混的人放慢步調
對想學習的同學來說,那股熱情遲早也會被無奈覆蓋掉,
但是又能說什麼呢~
另外一點的結論也是一樣,關於作業的問題
就拿藉由操作撰寫BCB來了解數位媒體的基礎知識,我覺得這我也受益良多
fopen、fseek、fread的威力馬上就能用在其他課堂的程式專題實作上
但是就像上面提到的,有些作業完成的沒有太多瓶頸或心得,
沒有心得就沒有分數,所以為了分數就得激發腦袋中的小宇宙榨出一些心得文章
就舉一個修IPC的同班同學來說好了
因為他一方面得應付學期總成績不得低於80分的壓力
每個禮拜三的Meeting還得預先啃上一堆paper
另一方面又得為研究所準備
常常是可以聽到他說他傍晚到晚上要先睡一下
晚一點再起來寫程式,他的作業不假他人之手這是大家同學都知道的事,
但是前不久看到作業分數公佈的時候心都涼了一半,
分數不到預期可能拉低學期總平均外,參考他程式的同學舌燦蓮花一番
分數還比他高出許多,不知道其他人怎麼想,
或許覺得把分數看那麼重幹麼,生平無大志只求六十分,這是大學生本分,
又或許有人認為,阿現實就是這麼現實,自己不掰點東西怪誰,不過
就像他自己說的,都是自己寫的,他也沒想過偷機取巧,
至少是犧牲睡眠時間做出來的,但是看到分數
除了無奈也不知道該感覺怎樣
但好在老師提供分數上訴空間,還有個可以化無奈為希望的機會..
對於看心得評分數這點,訓練表達能力是好事,
但仍舊存在這這些缺點

最後謝謝老師這學期的教學,也謝謝在怎麼做總是
有學生不知好歹的抱怨的亂世之中仍舊存在著的教學熱忱。

HW8

這學期就這樣結束了,這門課也告了一段落。我第一次作業的時候就說過了。我當初是因為對多媒體學程相關內容有所興趣才選門課程的,但上過幾次後學的大多數BCB的程式寫作讓我頗適應不良。雖然知道老師的用心,但畢竟跟一開始的期待有所落差還是不免有點不滿的情緒。所以一開始的BCB我真的沒有盡心的在學,以至於後面進度時在有點跟不上。

之前老師有跟我說過我想學的東西或許不是資工的多媒體學程,而比較偏向數媒系在學的東西。可是之後自己想了想,數媒的東西固然比較有趣。但在資工也能學到不少關於相關方面的知識,其實重點還是要自己能自學。基本上資訊相關的知識不靠自學,學校能給的真的都不夠。畢竟這東西UPDATA那麼迅速的東西,不只是在學期間要努力自學。畢業後也是要持續不斷的學習。我想各個資訊的老師們應該也是每天都在認真的學習新技術吧!

HW4

這次作業是也是讀取讀片。可是跟第三次不太一樣的是,我們這次是用一個一個畫素點讀取在重新輸出的方式顯示。意思就是我們會從圖片檔的最左上方的畫素點開始讀取,讀一個就輸出一個。

HW4-1→像是這樣

這次也會用到上一次的那三個指令
一樣先用fopen開啟檔案,再用fseek移動游標,最後使用fread讀取
因為是一個一個讀。所以需要用迴圈的方式寫。如下

for(i=0;i
{
fseek (imBMP,offset,SEEK_SET);
fread (bSize, 1, 3, imBMP);
offset+=3;
Image1->Canvas->Pixels[i][j]=(TColor)RGB(bSize[2],bSize[1],bSize[0]);
}</IIMAGEWIDTH;I++)>

HW4-2
顯示結果上跟第三次作業大同小異,畢竟只是改了內部的讀取方式。
我們需要的顯示結果還是一樣的。

HW6





















因為WAV格式我在上課時已經有寫
所以在作業方面我嘗試從完全不知道檔頭資料順序的MP3格式去寫,
因為只是讀檔所以基本上和作業讀BMP檔方式是一樣的,
但是因為這是MP3格式的和作業所要求的格式不同的,
所以直接判斷哪幾個位元是什麼就顯的非常困難,
但是在比對Windows和PSPad所列出來的資料乎相比對之後,
裡面的位元內容也幾乎都知道了。

HW7

寫個程式處理音訊,能夠合成歌曲。而且還要做到音樂漸進效果。哇!!光想到就頭大。所以現在的我而言殺了我我也不見得寫得出來...但作業又不能不交。看到同學們都寫出了可以顯示音樂波型的小程式,因此就急忙向同學討教這玩意兒怎麼寫出來的。顯示音訊波型,在各個音訊編輯器中是基礎中的基礎,連播放器有些都會附加這功能了。可是那麼基礎的東西寫起來也沒有那麼容易的說。

HW7-1

執行結果如上

如果我們改變他們的X比例,數字越大會被壓得越密集。

HW7-2

當然Y的部分也一樣。

HW7-3

HW6

這次是做的不再是圖片檔,而是WAV的開讀檔。基本上開讀檔的步驟跟GIF一樣。不過由於開啟的檔案類型不同,所以重點還是要知道WAV的檔案內容結構。關於內容結構的部分,我有看過蔡宗甫的一張圖 。蔡宗甫的作業上有我就不多貼了。結構裡頭詳細敘述了WAV的資料內容,如聲道數、取樣率、資料量、檔案大小之類的資訊。得知結構之後我們就可以開檔讀取出來了。

HW6-1 HW6-2 HW6-3

我在Windos的內容中只找到了檔名以及大小的內容,其他細部內容似乎並不會顯示的樣子。

HW6

1
Program Name:SourceRIFF
Version: 0.01 alpha

功能:載入一wave檔並將其播出

說真的這個作業其實不難,稍微翻一下BCB的書還有爬一下文,就能知道撥放器怎樣實做了

重點在於WAVE的檔案格式為何?

WAVE的儲存方式其實和BMP類似,一樣是請教wiki
只是發現wiki的資料其實並不完整,沒有提到整個結構個別是做什麼用的
所以在這裡提供一個我所找到的資料
這是我在一個名叫Wotsit網站上查詢到的資料
website 
專門提供各種檔案格式文件給程式設計師的網站
之前學過的BMP或是GIF上面都有
像是商業軟體的Photoshop的PSD格是上面都有收錄
這簡直是個天堂阿~

回到正題
這次教我們利用int的性質來做資料的計算
之前做BMP時碰到要算檔案大小等問題時
每次都要一個個慢慢乘
真的很麻煩
透過運用int就可以簡省很多行程式碼了
真的很方便

老實說 我接下來真的不知道要打什麼了
這次作業比較可惜的是不知道要怎樣把wave的波型輸出
資料的取的是容易
只是我要怎樣才能輸出呢?

說到這個聲音
推薦大家一個免費的聲音編輯器

Audacity
軟體名稱:Audacity
官方網站:http://audacity.sourceforge.net/
軟體性質:Freeware

這個軟體是跨平台的(MAC Linux上都可運作)
功能媲美GoldWave或是Audition
如果說嫌破解商業軟體麻煩
免費軟體也是個不錯的選擇!!

HW5

這次的作業是將老師的金龜子.gif圖的調色盤讀取出來再進行顏色排列。老師上課有講過,GIF檔的特色就是將一張圖片所需要用到的顏色直接編成一個調色盤。你用256色的就會有256個顏色,128的就是128,24bits的就是有24bits那麼多的顏色。調色盤決定後,圖片所有的顏色都會從調色盤取出。這樣的優點是可以縮減檔案大小,因為這樣就不用去記憶每個畫素點的顏色值了。但缺點是在顏色的顯示上會失真,不適用顏色太多的圖片。
GametisForticula

看~就是那張圖!!(遙指)

基本上只要你不是色盲應該都可以很清楚的看到這張圖主要是由深綠色所組成的。他的其他部位則是有點帶點土黃色暗褐色的感覺。還有陰影部分就是黑灰白三色去配合出來的。
所以由程式解析他的調色盤就是以下這結果↘

HW5-2

最後再由明暗度排列會變成這樣

HW5-3

排列過後,較深較暗的顏色都在左上方。依序排列最右下方的就是最亮的白色了。

HW8

我覺得我在這學期的這門課還算挺有收穫的,
在這學期我學到了關於處理圖檔(BMP和JPG)和聲音檔的學問,
不只是了解了這些多媒體檔案的格式內容及來龍去脈,
也親自動手寫了程式去做讀取、展現及相關操作,
讓我的程式功力更上一層樓,因此我覺得這學期我還算挺有收穫的。

不過我一直覺得我還學得不夠,雖然在多媒體這塊學到的還算廣
(學了BMP、GIF、WVA)有了影像及聲音,
如果再加個動畫那就幾乎可以涵蓋多媒體了,
不過我目前還學的不夠深入,有點學了很多卻只學到了毛皮的感覺,
未來出去找工作如果只會寫"讀取BMP檔"的程式?
或是"畫出GIF檔的調色盤"?不夠吧?
當然我也清楚一學期18周最多54個小時,
老師能教的,學生能吸收的,都很有限。

如果老師教太快,學生恐怕會沒辦法負荷;
老師教太慢,能學到的東西又太少,真是進退兩難阿!
不過俗話說:師父引進門,修行靠個人。
這句話一點也不假,老師不可能再有限的時間裡把所有的知識傳授給我們
,就算能辦到我們能不能學會又是另一回事阿!

HW3

這次作業的主題是有關 fopen,,fseek,fread 這幾項指令
首先是我的程式結果

HW3-1

由於我的程式是照著同學的教學一步一步做出來的
所以其實對於指令的作用在幹嘛不是非常清楚…
為此我特別上網研究了一下這三個指令

---------------- 分隔線 ----------------

fopen:
開啟檔案或者 URL。
語法:
int fopen(string filename, string mode);
傳回值: 整數
函式種類: 檔案存取

這個指令主要是是用來開啟檔案用,也可以用來開啟網頁。它是將內部游標移動到欲開啟的檔案處做開啟的。由他的指令語法我們可以知道,藉由輸入正確的檔案名稱即可開檔。後面的mode是所謂的開啟模式,輸入不同的代號有不同的開啟方式。

  • 'r' 開檔方式為唯讀,檔案指標指到開始處。
  • 'r+' 開檔方式為可讀寫,檔案指標指到開始處。
  • 'w' 開檔方式為寫入,檔案指標指到開始處,並將原檔的長度設為 0。若檔案不存在,則建立新檔。
  • 'w+' 開檔方式為可讀寫,檔案指標指到開始處,並將原檔的長度設為 0。若檔案不存在,則建立新檔。
  • 'a' 開檔方式為寫入,檔案指標指到檔案最後。若檔案不存在,則建立新檔。
  • 'a+' 開檔方式為可讀寫,檔案指標指到檔案最後。若檔案不存在,則建立新檔。
  • 'b' 若作業系統的文字及二進位檔不同,則可以用此參數,UNIX 系統不需要使用本參數。

fseek:
移動檔案指標。
語法:
int fseek(int fp, int offset);
傳回值: 整數
函式種類: 檔案存取

這個指令是移動內部檔案的游標,藉由移動游標改變讀取位置。但如果由fopen開啟網址類的檔案,此指令不能用。

fread:
元組的方式讀取檔案。
語法:
string fread(int fp, int length);
傳回值: 字串
函式種類: 檔案存取

此指令輸入後可以讀指定長度的位元組或直接讀到檔案結尾。

---------------- 分隔線 ----------------

這三個指令其實就大概是這樣。不過,這類型的指令不只這三個。還有flock(鎖住檔案)、fpassthru(輸出所有剩餘資料)、fputs(寫到檔案指標)、fwrite(二進位位元方式寫入檔案)...等等。似乎這類型 f 開頭的指令都是在進行檔案的存取,不論讀取或輸出。

HW6


這次作業換成要讀音樂檔WAV,於是我去維基了解了一下,是由微軟與IBM公司開發的一種聲音編碼格式,此音頻格是未經過壓縮,所以在音質方面不會出現失真,但眾多音頻檔案中屬格式較大的一種。這次讀取音訊檔案感覺跟之前作業有些相似,就是要把檔頭資料讀進去,show出一些圖片資訊,
但是程式碼還是看了好久,還是有些地方看不是很懂,就像是之前作業四那邊相似,卻也不知道要如呵改起,看到已經上傳同學的資料後才知道哪邊要改,可是知道怎麼改了卻還是沒有全不理解,程式設計也不是一天就登天,繼續努力。

HW5

這作業我實在是花了好多時間在研究上,
因為我首先先套用老師給的範例程式碼,
可是我發現因為每個人撰寫程式的習慣不同,
在用變數定義名稱上我研究並改動了好多次,
來符合我想要的結果,
結果改出來的結果是......




















之後我嘗試在從中找出為何叫不出調色盤的原因,
可是卻一直找不出真正的原因,
之後只好全部把範例的程式碼刪除並且重新按自己的意思去寫,
終於還是寫出了我想要的結果。
說實在的,我還是不明白原本的程式到底出錯在哪!
以下是我的完成:




















之後只要在程式裡加上Sort就行了,
這部份是我覺得這個作業裡最簡單的部份了!!


HW8

數位媒體概論的課程就此告一段落了

最後我還是沒有交第6跟7次作業
其實第六個作業我做一半
OFFSET讀得很奇怪
沒關係
有機會再研究


不是要拍老師馬屁
我很喜歡這樣的上課方式
好像國外的大學一樣
是用討論的方式在上課的
即使我不是那個在討論的人
我也能從其他同學提出的觀點
及老師的回答
了解一些東西
這樣子才能討論出書本上沒有的東西
前提是...我必須專心不恍神!

還有
對於上次老師說有關於BCB磚塊書
我個人的看法是

.
.
.

對"我"沒什麼用

有很多東西不是看了書才會的
就連最基礎的AnsiString用法
也是看了老師怎麼用,然後查一下網路我才了解的
還有fopen,fread,fseek
typedef的用法
都是上網找資料來的

不過磚塊裡有些東西確實可以用來參考
所以我覺得
磚塊用借的應該比較妥當
畢竟這麼厚重
個人看法啦!

---

喔對了
不是每個人對於寫程式都很在行

的確,我也認為老師教的東西不多
但是有多少人卡關?
我也是卡關的人阿
總不能因為一個人會了
老師就為了那個人一直在課堂上教新的東西

這堂課就像是食譜
課程上都教簡單的菜
想學更厲害的菜色
要靠自己在學習過程的經驗中
再變出更厲害的東西來!

---

也是個人看法拉
沒有要爭論什麼

最後
快樂的放寒假吧!

HW5

其實這個作業很早就在做了,只是一直都有一些bug在,所以才拖到這個時候

1

Program Name:SourceGIF V2
Version:   0.01 alpha
               0.02 alpha
               0.01 beta

功能:
0.01 alpha 讀取GIF的基本Header
0.02 aplha 嘗試讀取調色盤
0.01 beta  結合0.01與0.02的重製版,並加入排序功能

2
按下Sort就能進行排序

這個作業期時花了我不少時間
好不容易上個BMP搞懂了,這次換一個新的,又加上關於GIF的中文資料很少,只能翻閱英文資料。雖然說我的英文普普,但要再重新去了解與翻閱新的資料與名詞花了我不少時間。

之前第一次上GIF時,老師帶我們一起看wiki的資料,有了實做BMP讀檔的經驗,看完資料後馬上開始動手做

做到一半時突然有個問題
Header資料中的GCT是什麼東西?
那堂課就問老師這個問題
其實這東西是表示三個項目(M CR Pixel)
M表示接下來的GIF調色盤是否為獨立還是分開的(動畫時會出現)
CR表示調色盤的色彩解析度為多少?
Pixel則表示色彩的寬度為何?

那要如何取出? 只有一個Byte在儲存啊?
在老師的範例中
有一段程式碼有出現>>或是<<
這個代表向左或是又"平移"多少
以GCT這個來說,如果是全彩的話
這個位置通常會儲存F7
換算成二進位就變成 "11110111"

首先是M的部分
>>7代表的是向右移7格位置就變成00000001也就是1

CR的部分
<<1代表向左移動1個位置
>>5再向右移動5個位置
變成是00000111

最後是Pixel的部分
<<5向左移動5個位置
>>5向右移動5個位置
一樣變成是00000111

換句話說
這一個Byte裡面他表示了三個資訊
GCT
所以我們要用>>或是<<的方式取出它的值
有人可能會問說為什麼要這麼麻煩呢?
別忘了GIF是個用來壓縮全彩影像的的格式
如果說把這三個值分別儲存
變成會占用3個Byte
這樣就失去壓縮的意義了
既然1個Byte就可以會什麼不存得更小一點呢?

HW5

  這是我目前花最久的作業了,之前的作業都是有關於BMP圖檔的讀取,這次的作業換成了讀取GIF的圖檔,照慣例先從wiki中吸收有關於GIF圖檔的資訊,GIF主要分為兩個版本,即GIF 87a和GIF 89a,這不像其它死板板的圖片,是可以支援動畫的形式。
  接著利用老師的範例程式,先補上老師範例程式該有的標籤,每個對應顯示出來的是GIF的檔頭資料,這是在wiki上查到的檔頭資料:

接著還要定義結構來存放檔頭的資料,例如這樣

typedef struct {
char cVersion[6];
 Byte bScreenWidth[2];

還有一些<<和>>的,例如這個 bM = GIFHeader[0].bMCrPixel >> 7; 搞不太懂耶,希望老師能解釋囉。
最後是使用 crSortedPalette[k].bRed+crSortedPalette[k].bGreen+crSortedPalette[k].bBlue)/3
來比較大小。
順利做出來後,發現出來的結果跟老師放在網頁的圖片不一樣,後來詢問過同學後,將我原本的RGB順序改成 現在的BGR就會有跟老師一樣的結果了。

imPalette->Canvas->Brush->Color =(TColor)RGB(crPalette[k].bBlue,crPalette[k].bGreen,crPalette[k].bRed);

這是之前的結果:大功告成~~之後就是我的完成品:


我的排序是從亮到暗
不過我發現有一個點顯示不太一樣,有一個特別的點,是紅色的,你們有發現嗎?
  不知道為什麼會這樣耶。

開其它圖片來玩玩~~


HW5

關於第五個作業有關於gif檔之前老師有叫我們到維基百科了解一下,是一種典陣圖圖形檔案格式,以8位色(即256種顏色)重現珍色彩的影像。採用LZW壓縮演算法進行編碼,在一定的程度上保證影像質量的同時將體積變得很孝,可插入多張照片,做成動畫,但由於採用8位元壓縮,最多只能處理256種顏色,故不宜應用真彩圖片。這次作業也是可以用PSPAD來檢視金龜子的圖片




要上面這隻金龜子的顏色做出調色盤的色階出來。

這是老師的範例色階,在打入(crPalett[k].bRed+crPalette[k].bGreen+crPalette[k].bBlue)/3的值再用氣泡排序法就可以完成排序。感覺這次作業跟上一次有不一樣的變化。還有不懂的就可以上維基百科搜尋一下,雖然中文有些翻譯不是很棒。

HW7


這個程式大概是我寫過最瘋狂的的程式之一吧!

我的作業除了印出wav檔頭的資訊外,還新增了一個印出wav波形的功能,
這個波形是我用字元符號"."和"●"去畫的,也因為如此看起來不太好看,
不過這不是重點,重點是這波形到底代表的是甚麼呢?
其實我還不太清楚...((眾歐

說穿了我只是把該wav檔的內容以不同的資料型態去存,
上圖左邊以BYTE資料型態去存,
右半邊以unsigned int去存(存到的數很大)。

接著為了把它以"波形"的樣貌顯示,
我把BYTE變數再減230(實際上大約等於250左右)並印到Memo1上,
波形的話我用AnsiString資料型態用迴圈去累加"."這個符號,
加完後再累加一個"●",如Memo2上所顯示;

再來我又以不同的資料形態去存(unsigned int),
因為存到的數實在太大了,為了要方便顯示波形,
我把unsigned int這變數取4294000000的餘數,再除以10000(會減少4位數),
大概就等於0~100之間(實際上約等於4294000000~4295000000),
接著最後印出波形的部分也跟前面提到的一樣。

以下是我的部分程式碼:

for(int i=0;i<="尾";i++)
{
AnsiString str="";
fseek (ptr,"頭"+i*4,SEEK_SET);
fread(data, 1, 4, ptr);
data[0]=data[0]%4294000000;
data[0]=data[0]/10000;
for(int j=0;j<=data[0];j++)
{ str=str+".";
}
str=str+"●";
Memo4->Lines->Add(AnsiString(str));
Memo3->Lines->Add(AnsiString(data[0]));

}

雖然寫完這程式我知道這可能會與老師的要求不太一樣,
不過我想概念應該差不了太遠才對,就跟圖檔一樣,
除了檔頭部分其他的資料應該就是該圖片的內容,
我們為了要真正看到圖片所長的樣子,才會利用撰寫程式以不同的方式來展現該檔案。
我寫程式時一向很喜歡用很直覺的方式去思考,
反而不太喜歡用內建的函數及物件等等,因為如果是第一次使用的話,
八九成都不太會用,甚至可以說完全不會用!
一定要去查資料來好好熟悉一番,如此才能用的得心應手;
不過其實這也不能說是不喜歡拉,因為有了這些函數及物件等,寫起程式來真的是事半功倍,
畢竟這樣才有利於大型程式的發展阿。
假如沒有這些高階語言,而用類似像低階的組合語言寫(?!)會瘋掉吧。