顯示具有 2009hw6 標籤的文章。 顯示所有文章
顯示具有 2009hw6 標籤的文章。 顯示所有文章

2010年1月18日 星期一

HK6

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

就是不知道為什麼?


怎麼弄都不對~~~


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


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



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


也知道從PSPAD裡面去抓


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


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

到底哪裡不對了...





2010年1月16日 星期六

HW6


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

然後再fopen,fread讓他跑出來

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

HW6



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

HW6





















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

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
如果說嫌破解商業軟體麻煩
免費軟體也是個不錯的選擇!!

HW6


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

HW6

很不幸的期末考週過的非常充實以致於戰鬥持續到期末考週之後

題外話,這學期的修科目真的有些許小扯

雖然豪邁的修了系上23學分
但是有很多科目沒有統一考期末考
有三科拉到期末考前一週考試
變成我們的期末考比別人早開始
但是都到大三了,這種事情早該見怪不怪
真正到了期末考週過去的經驗是稍微會輕鬆一點
實際上,並沒有
而且還有些突變,怎麼別人準備期末考
我們卻在趕程式(不只數位媒體概論一科...)
大三上,期末考週被重新定義
比別人早一週開始,同時也比別人晚一週結束
題外話結束

對於本週HW6作業
我認為這是截至目前為止有難到我的作業
當然我是指要把波形頻譜Show出來
但是做事是要按部就序的來
不會走路更別說想要飛
不會開檔更別說想畫圖

對於老師講的,如果學了某種Skill
要在上手其他同類型的Skill會比較容易
我覺得很有道理,因為事實上也是這樣
光是看開檔這個動作
之前因為接續接觸了Bitmap、GIF檔案的Header
這次的WAV也不過就是換個格式,原理是一樣的
但是首先碰到的問題是
Header的定義WAV著實難找了一點點
wikipidia很顯然無法滿足需求
咕狗大神拜了後,首先是純定義的解說網頁
WAVE PCM soundfile format
就如同看到某個偉大的數學家定義出了一套數學公式以推論自然法則一般
通常就只有他本人很懂
其他的路人甲到路人N的無限大除非是剛好跟偉大數學家頻率相同
或是天才之外,平凡的我真的是霧裡看花,到底看到什麼也不知道
不死心繼續拜大神,找到了對岸的程式設計討論區
//不管是什麼程式語言有問題,對岸的前人同胞都恰好已經種好了樹
//反觀,想找到自家人的熱情教學解惑焉..真的不大容易
該討論區有利用C語言示範讀取Header info
配合著剛找到的WAV Format,似乎有點撥雲見日了

開啟一個新的project,把之前read bitmap的code copy過來
一邊用PSpad對照著老師提供的wav,一邊數著Byte
一邊照著網頁的Format去read每組資料
好不容易13組資訊設定完畢
醜是一定的,但是還是先確認正確性比較重要
接著就埋頭拉了27個Label....設定完畢後
關鍵性的一個Open...

perfect!!

文字敘述跳了一個check的步驟
perfect是在比對過Pspad的data後才喊出的

好了,完成一半了
接下來就是畫波形圖

波形圖怎麼畫, 不 知 道 ...
更慘的是找了好久仍舊找不到究竟WAV的data如何繪出一個WAVE
(有求必應的估狗大神這個優美詞句在這裡我沒有讓他出現...因為他破功了)
難道就放棄嗎?不太像我的作風

換一堆關鍵字一直查,就是查不到
靠著最後唯一的線索拼湊一個猜測
如果"音訊範例大小"為8 bits就將data 8 bits一組
而16 bits就將兩個8bits湊成一組
再用該值當作座標,利用第一次作業的方法
以Moveto AND Lineto畫線,這也算是個沒辦法中的辦法了

過程就一樣將data讀進Buffer然後依照前述處理法
老師提供的wav是16 bits 就一次讀進16 bits畫點
最後圖是畫出來了,但是明顯跟其他工具軟體所顯示的波形長的不一樣
這回真的只能搖搖白旗投降輸一半了
究竟該如何創造出波形圖呢...

程式起始畫面,直接利用MainMenu的File > Open選擇開啟檔案


接著Show出所有資訊以及一個怪怪的波形圖...




寫在最後,其實從一開始讀Bmp檔案的時候對於一串臭臭長長又重複出現的code


iFileSize = bitSize[0] +
      bitSize[1] * 256 +
      bitSize[2] * 256*256 +
      bitSize[3] * 256*256*256;


看了就想要自訂一個function來做這個運算
不過其實運用function已經在HW4、HW5的時候實作了
因為功能整合到HW4、HW5時,自己設定的一堆switch
稿的程式碼雜亂不堪,當時就想要用個自訂函數讓程式碼看起來簡單些
不過BCB要加一個自訂函數還得到.h去宣告
一開始不知道也是試了好久,最後仍然是拜咕狗大神解惑

但是後來我又想到一個偷吃步的自訂函數用法
只是因為自己懶的切換到.h去宣告function
所以索性乾脆creat一個隱藏的button當作自訂函數用
當要呼叫他的時候在其他的區塊內click()他就可以達到Call的效果~

言歸正傳



這次靠他如願解決了每讀一次就要臭臭長長一次
讓原本十分醜陋的程式碼稍微好看一點點..但是還是有改進空間

2010年1月15日 星期五

HW6

在做這個作業之前,我先去查了有關WAV的資料,它是屬於無損的音頻格式,簡單來說就是解壓縮時不會產生數據/質量上的損失 ,解壓前和解壓後的數據資料都不會產生流失,既然有無損的音頻格式,就會有所謂的有損的音頻格式,主要是基於聲學心理學的模型,除去人類很難或根本聽不到的聲音,例如:一個音量很高的聲音後面緊跟著一個音量很低的聲音,我們常用的MP3就屬於這一類文件,這是有關於WAV的相關資料。
回到作業上面,這次作業主要的是讀取WAV的檔頭資料,其實弄起來實在不知頭不知尾,之前學的是將圖片的各個資料讀出來,現在變成是要將音樂檔的資料讀出,感覺好像差不多,可是作起來卻覺得還蠻多問題的,MediaPlayer1->Open();MediaPlayer1->Play();這兩行看起來最有感覺,因為平常很常用播放音樂的程式在聽音樂,在製作讀取WAV檔的程式過程中,我也發現要做一個任何檔名都能讀取播放的音樂程式真的不簡單,像是我平常最常用的REALPLAYER,幾乎大部分的影音檔都能正常播出,其實這門課程學到現在,好多應用程式都是我們平常會使用的,或許是我們平常都用習慣了,所以覺得用起來上手順暢,卻萬萬沒有想到光是製作的過程就有很大很大的學問,而且還要花好一番的功夫才能慢慢理解為什麼要這樣去做 。

HW6


這次的作業是讀取WAV檔,

前面讀檔頭的動作跟讀BMP大同小異,

首先要先找到WAV的檔頭包了什麼東西,

整塊檔頭有什麼東西相信很多同學都PO了,

這邊我只列出我有用到的地方,

第一個當然就是檔案大小,位置在4,大小為4bytes,

再來是檔案類型,位置在8,大小也是4bytes,

不過檔案類型我也會有類似前面作業的問題,WAVE後面接了一些亂碼,

這個我一個一個字元去看都沒問題,可是整個印出來就是會有後面的東西,

真的不知道是哪來的,老師可以幫我看一下嗎。

char cB[4]={0,0,0,0};

fseek (imWAV,8,SEEK_SET) ;
fread(cB, 4, 1, imWAV);
Memo1->Lines->Add("檔案類型:");
Memo1->Lines->Add(cB);

我的程式裡是這樣寫的,讀出來就會變如圖所示。

第三個是Channel,位置在22,這個只有2個bytes,

最後是取樣率(Sample Rate),位置在24,4個bytes

我只有簡單拿幾個示範一下而已,

反正就是讀檔頭,其他有需要再加上即可,

基本上這作業只要之前讀bmp有認真做就不會很難,

幾乎是一樣的東西。

另外有加檔名上去,

程式裡是這樣寫的,Memo1->Lines->Add(OpenDialog1->FileName.c_str());

但是這樣出來會是絕對路徑,想請問老師有沒有辦法只取檔名就好?

HW6

終於從圖片慢慢到了音樂
從最初的BMP-->GIF-->WAV

這次作業和第三次的讀取BMP圖檔內容很相似


OpenDialog1->Excute(); //一樣是開啟檔案
MediaPlayer1->FileName=OpenDialog1->FileName; //開啟檔案用的DIALOGUE 為 MediaPlayer

MediaPlayer1->Open();
MediaPlayer1->Play();

WAV圖檔格式如下:

一樣是用強大的FSEEK指令去抓出你想要的東西
就慢慢抓取你想要的就好了
中間過程跟第三次很像 就不詳細說明

底下是執行結果



HW 6

最後這上課的幾個禮拜裡,作業跟上課內容有了轉換。


從圖檔變為音訊檔了,而這次作業主要是讀取WAV檔的


資訊。


在拿到這作業後,一樣需要花工夫再了解WAV的開檔資料,


-------------------------------------------------------------

Field  bytes    format contains

1    0...3    str4 "RIFF" in ASCII

2    4...7   int4 Total bytes minus 8

3    8...15   str4 "WAVEfmt" Eigth character is a space

4    16...19  int4 16 for PCM format

5    20...21  int2 1 for PCM format

6    22...23   int2 channels

7    24...27   int4 sampling frequency

8   28...31   int4 bytes per second

9   32...33   int2 bytes by capture

10    34...35   int2 bits per sample

11   36...39 str4 "data"

12 40...43 int4 bytes in data

-------------------------------------------------------------


再了解了以上的資料後,就開始撰寫程式碼囉!!!



而這次課堂上老師有給了我們不同於之前讀取File的方式:


unsigned int cB[1]; int FileSize; fseek (file,4,SEEK_SET) ; fread(cB, 4, 1, file); FileSize = cB[0];


感覺上這程式碼比較方面給我們讀,


不必像之前一樣一堆數字在上面鑽來鑽去,


而程式部分,課本裡也有提供一些範例供參考,


基本上只要成功讀取後就沒有什麼困難了。


以下為執行結果:


HW6

  這次的作業是將 WAV 檔頭資料顯示出來,所以就先上網去找尋有關檔頭的資料,不過沒有在wiki上找到,不過在另外的網站找到了。

wav檔前面的44個byte是檔頭,紀錄著有關此wav的資料
以下是我在網路上找到的介紹

1   0...3  str4  "RIFF" in ASCII  存放的是RIFF字串
2  4...7   int4  Total bytes minus 8  存放的是資料區塊大小
                   資料區塊大小=(檔案大小-8)
3  8...15 str4  "WAVEfmt" Eigth character is a space 存放的是WAVE字串、子區塊識別名
4  16...19  int4  16 for PCM format  存放的是子區塊大小
5  20...21  int2  1 for PCM format  存放的是聲檔格式,0x0001表PCM格式
6  22...23  int2  channels      存放的是聲道數
7  24...27  int4  sampling frequency  存放的每秒取樣數
8  28...31  int4   bytes per second  存放的是每秒資料量
                  每秒資料量=(聲道數*位元數*每秒取樣數/8)
9  32...33  int2  bytes by capture  存放的是子區塊位元組
                  子區塊位元組=(位元數/8)
10  34...35 int2  bits per sample  存放的是取樣位組元數
11  36...39 str4  "data"      存放的是data字串
12  40...43 int4  bytes in data 實際聲檔大小,這個值為檔案大小減去檔頭(44BYTE)後的值

  有了這些資料後就能開始寫程式了,寫法大致上跟之前讀BMP檔的標頭差不多,不過在這次作業使用了unsigned int 的方式,好用許多,不用像之前要使用一長串的程式碼才能讀出,看起來也比較簡潔一點。我只取出一些我比較有興趣的8個檔頭資料,剛開始第一個和第二個在顯示時會跑出一些亂碼出來,後來查資料,在不要的後面加上NULL,就不會取到RIFF和WAVE後面的亂碼了,這是我程式其中一個取檔案大小的程式碼:

fseek(imWAV,4,SEEK_SET);
fread(c, 1, 4, imWAV);
iFileSize = c[0];
Label4->Caption=("File Size="+AnsiString(iFileSize + 8));

會了之後,其它的也就不難了。最後能讓音樂能在BCB上播放,要再加上

MediaPlayer1->FileName=OpenDialog1->FileName;
MediaPlayer1->Open();
MediaPlayer1->Play();

另外上網查了一下有關音訊波形的顯示,目前找不太到,看看有誰能夠教我如何做出來吧。



 

HW6

這周的作業是要讀出WAV音訊檔的資訊,這讓我想到第四次作業要讀出圖檔的資訊,於是就朝向了這個方向發展,詢問同學都說跟第四次的作業相差不大,但我依舊是花了一點時間研究,總算是修改出了結果,大致上就是把標頭檔改掉,就能讀取音訊檔了,不過由於前幾次作業都是圖檔,這次接觸的是音訊檔,因此我在這次的作業當中獲得最大的能力並不是寫程式,而是查詢資料,畢竟這次完成的DIY版本撥放器只能撥放WAV音訊,和其他的音訊檔形同陌生人,希望未來可以搞清楚各種檔案的不同可以完成最適合自己的撥放器

HW6




這一次作業是利用BCB裡的一個叫做MediaPlayer的元件將WAV檔撥出來並且讀出標頭內資料

基本上跟讀圖的檔頭差不多配合著WIKI裡的RIFFWAV的格式讀出表頭然後再顯現在LIST裡就可以了!!!這裡有WIKI的連結:RIFFWAVE格式





上面兩張圖是完成圖和對應的圖

利用
MediaPlayer1->FileName;
MediaPlayer1->Open();
MediaPlayer1->Play();
fread 和 fseek 等就可以完成撥放和讀資料

MediaPlayer這個元件也可以播放mpg等的影片檔再配合panel就可以播放

如果沒有panel他會另外自己生成一個視窗撥出!!!

這樣就完成拉!!!

HW6

這次的作業其實與第四次作業差不多,只是將讀BMP檔改為讀WAV檔,不過多了幾句關鍵程式
OpenDialog1->Excute();
MediaPlayer1->FileName=OpenDialog1->FileName;
MediaPlayer1->Open();
MediaPlayer1->Play();
而這次也要顯示檔案信息,不過在維基或是Google我都沒找到分配位元組的方式,可能是我不夠細心吧,而我只找到這個
所以我就跟同學要了張圖片來參考
bytes 0~3 顯示RIFF,RIFF的格式是WAV和AVI的基礎
bytes 4~7 顯示檔案大小
bytes 8~11 顯示檔案類型
bytes 12~15 顯示ASCII識別字,音樂的形式
bytes 16~19 顯示樣本位元,其實我還不太清楚這是什麼
bytes 20~21 照字面翻應該是音頻型式,但顯示出來卻看不太懂
bytes 22~23 顯示聲道,channe即是航道的意思
bytes 24~27 顯示樣本速率
bytes 28~31 顯示位元速率
bytes 32~33 BlockAlign真不知道怎麼翻
bytes 34~35 應該是每秒讀取的大小
bytes 36~39 不知道為什麼會有第2個識別字出現
bytes 40~43 同樣也不知道為什麼會有第2個Size出現
所以我寫的程式就只顯示了我懂的地方,其他真的還要再研究,而寫的方式fread就和第四次作業差不多。
以下是程式執行後的幾個問題:第一,WAV檔一開啟後就直接播放音樂,不知道有沒有辦法能只讀取,然後按下"Play"再播放,還有讀取後元件的"Play"並沒有按下去!

不過還好,把"Play"鍵按下去,他還是正常播放。
第二,我按下"Pause"竟然"Pause"還是亮的,還是可以按"Pause",就變成按第一次-音樂暫停,按第二次-音樂播放,按第三次-音樂暫停,按第四次-音樂播放,就這樣可以無限迴圈,都是按同個"Pause"鍵怎會出現2種功能,不知道是不是BCB原本的問題。




HW6

課程開始介紹到影音的部分了,這次的作業播放WAV檔並且把他的檔頭資訊讀出來,在動手下去做程式之前直覺就想到,是不是要可以跟之前讀取GIF檔頭資料用相同方式寫出來呢?於是馬上上維基搜尋WAV的資料,很快的就在裡面找到各個資料所需指向的位置。那麼,只要資料到手一切就好辦了!

位置:

22---channels 聲道數
24---sample rate 取樣率
28---bytes/second 資料量/秒
34---bits/sample 取樣深度
40---bytes 檔案大小

找著找著都找到日本網站去了...好加在這學期有修日文...這張圖就是WAV的結構圖啦~!

話說得很簡單,但實做起來還是會遇到問題,知道了資料位置,那麼寫法上要怎麼弄呢?首先,我第一個參考的是之前自己做的讀取BMP檔的程式碼來寫,測試完之後看到預想中的畫面:爆了!早知道你會爆了!所以第二站我到了Google上找資料,一邊修改自己的程式碼,於是WAV的檔頭資料顯示成功!




顯示好檔頭資料後接著實做播放WAV音樂檔,因為之前在老師的部落格有看到WAV的相關介紹,所以我就去爬部落格



看完之後便開始做播放WAV部分,配合之前在Google所查的資料,把WAV檔撥放出來,這部分我覺得還比前面的好弄,所以程式寫得算蠻快的,後面在多加上顯示檔名,我這邊開啟的檔案是用自己載的音樂,所以出來的數值就跟老師的不一樣啦,測試播放也成功,OK,作業6完成!(顯示波形的部分我寫在作業7那)






HW 6

期末考終於結束了,眼看交作業的截止日期只到明天,然後要忙回家的事,實在挖不出時間來研究剩下的作業。所以只得以交心得的方式代替。


這次的HW 6,要我們讀出一個WAV的音訊檔,並顯示出相關的資訊。包含了檔頭、取樣率、檔案大小、以及聲道等等的資訊。其實主要的要求還是貫穿了這學期所學到最頻繁的東西-開檔。用的是之前fopen、fseek、fread的指令來做延伸變化。而讀檔最重要的一點不外乎是要找出該檔案是如何分配byte的,從之前的BMP、GIF到這次的WAV都是一樣的原理,但基於這次老師並沒有提供範例程式,所以事先的查找資料的準備工作就顯的相當吃緊,也再次深刻的體會到利用wiki、google是多麼的方便 ! 除了上述所提到的,要求我們顯示音訊檔的相關資訊之外,這次的作業還要加入一些簡單的音樂播放器的功能,也就是一些最基本的,包含了播放鍵及暫停鍵等等……這讓我想到了目前常用的音樂播放器,竟然這次沒寫出程式,就來探討一下我最常用的音樂撥放器的功能吧 !


我想,目前最廣為使用的音樂播放器,不外乎就是-千千靜聽了 ! 千千靜聽我認為是一個非常完整的音樂播放器,它可以接受大多數的音樂格式,甚至可以直接讀取RAR、ZIP壓縮檔裡面的音訊檔,這點是非常方便的。除些之外,它最吸引我的一點,就是它可以支援網路同步更新歌詞,然後可以像在KTV一樣跑字幕給使用者看,這樣就不用特地上網找歌詞來看了。不過由於它找歌詞的機制是直接以歌名來判斷,所以有時候還是會有找錯歌詞的情況發生…帶有"磁性"的視窗以及視窗淡出、半透明的功能也很方便,然後因為千千靜聽已經有太多人在使用了,上網收尋一下一定可以找到下載點以及更多完整的介紹,推薦給大家,這是我覺得不輸給任何大公司(廠商)所推出的音樂撥放器 !

HW6


這次的作業目的是讀取音樂(.wav)檔的內容,內容包括了檔頭、檔案大小、聲道數、每秒取樣數(其實就是頻率)
還有音訊格式。程式的部分首先要開啟音樂檔,用OpenDialog,然後再把資料結構為FILE的指標使用fseek設定一下:

fseek ("FILE變數名稱","位置",SEEK_SET);

設定完後再使用fread去讀取:

fread("變數名稱", 1, "讀幾個位元","FILE變數名稱");

再來印出:

Edit1->Text = AnsiString("變數名稱");

接下來一樣再繼續重新設定指標指到的位置、讀取、印出....
基本上這次的作業我沒遭遇到甚麼大困難,不過在蒐集檔案的相關資料、格式上倒是花了一點時間 ,這還挺重要的,為了要決定指標指到的位置,以及指到後該以何種變數去存放它。
例如檔案大小我用unsigned int去存(其實BYTE也行不過讀到後還要經過公式a[0]+a[1]*256+a[2]*256*256...的轉換)
檔頭的RIFF我就用字串去存,聲道數我用BYTE存。

其實這次的作業還跟之前讀取BMP檔頗類似的,一樣都是讀取檔案內的一些資訊。

hw06

















關於這次的作業,
老師給了一個不用去計算byte的方法 ,
定義一個unsigned int wsize[1],
直接將值給存到wsize[0] ,
可以大幅縮減寫程式的時間,
原來只是一個資料型態的不同就可以差這麼多,
還真的是讓我大開眼界 ,
fread(wsize, 4, 1, imWAV),

iFileSize = wsize[0]+8, //計算過的檔案大小再加上誤差就正確了

至於要讀檔名的部分,我有詢問老師
因為讀出來之後RIFF後面會出現亂碼,
原來是因為沒有將後面指向NULL所以會亂取一些東西,造成亂碼的現象


fread(wriff, 1, 4, imWAV),

wriff[4]=NULL, //將其最後一個記憶體位置指向null



















至於開音樂部份就類似於我們在開啟檔案的部分
MediaPlayer1->FileName=OpenDialog1->FileName,
MediaPlayer1->Open(),

其他部分就是一樣這樣讀取,
基本上 只要知道記憶體存放位置,沒有讀不出來的東西。