Presentation is loading. Please wait.

Presentation is loading. Please wait.

聲音檔和 Video 檔的讀與寫 (by Matlab)

Similar presentations


Presentation on theme: "聲音檔和 Video 檔的讀與寫 (by Matlab)"— Presentation transcript:

1 聲音檔和 Video 檔的讀與寫 (by Matlab)
作者: 丁建均 國立台灣大學電信工程學研究所

2 一、聲音檔 (*.wav) 的讀取 電腦中,大部分的聲音檔都是 *.wav 的型態 讀取: wavread
例: [x, fs] = wavread('C:\WINDOWS\Media\ringin.wav'); 可以將 ringin.wav 以數字向量 x 來呈現。 fs: sampling frequency 這個例子當中 size(x) = fs = 11025 思考: 所以,取樣間隔多大? 這個聲音檔有多少秒?

3 畫出 x 的波型: time = [0:length(X)-1]/fs;
plot(time, x) 注意: *.wav 檔中所讀取的資料,值都在 1 和 +1 之間

4 一個聲音檔如果太大,我們也可以只讀取它部分的點
[x, fs]=wavread('C:\WINDOWS\Media\ringin.wav', [ ]); % 讀取第4001至5000點 [x, fs, nbits] = wavread('C:\WINDOWS\Media\ringin.wav'); nbits: x(n) 的bit 數 第一個bit : 正負號,第二個bit : 21,第三個bit : 22, ….., 第 n 個bit : 2nbits +1, 所以 x 乘上2nbits 1 是一個整數 以鈴聲的例子, nbits = 8,所以 x 乘上 128是個整數

5 有些聲音檔是 雙聲道 (Stereo)的型態 (俗稱立體聲)
例: [x, fs]=wavread('C:\WINDOWS\Media\notify.wav'); size(x) = fs = 22050

6 二、聲音的播放 (1) wavplay(x): 將 x 以 11025Hz 的頻率播放
(時間間隔 = 1/11025 = 9.07  105 秒) (2) sound(x): 將 x 以 8192Hz 的頻率播放 (3) wavplay(x, fs) 或 sound(x, fs) 或 audioplayer(x , fs): 將 x 以 fs Hz 的頻率播放 Note: (1)~(3) 中 x 必需是1 個column (或2個 columns),且 x 的值應該 介於 1 和 +1 之間 (4) soundsc(x, fs): 自動把 x 的值調到 1 和 +1 之間 再播放

7 三、製作 *.wav 檔: 用 wavwrite wavwrite(x, fs, waveFile)
將數據 x 變成一個 *.wav 檔,取樣速率為 fs Hz  x 必需是1 個column (或2個 columns)  x 值應該 介於 1 和 +1 之間  若沒有設定fs,則預設的fs 為 8000Hz

8 四、錄音 範例程式: 錄音之前,要先將電腦接上麥克風,且確定電腦有音效卡 (部分的 notebooks 不需裝麥克風即可錄音)
Sec = 3; Fs = 8000; recorder = audiorecorder(Fs, 16, 1); recordblocking(recorder, Sec); audioarray = getaudiodata(recorder); 執行以上的程式,即可錄音。 錄音的時間為三秒,sampling frequency 為 8000 Hz 錄音結果為 audioarray,是一個 column vector (如果是雙聲道,則是兩個 column vectors)

9 範例程式 (續): 指令說明: wavplay(audioarray, Fs); % 播放錄音的結果
t = [0:length(audioarray)-1]./Fs; plot (t, audioarray‘); % 將錄音的結果用圖畫出來 xlabel('sec','FontSize',16); wavwrite(audioarray, Fs, ‘test.wav’) % 將錄音的結果存成 *.wav 檔 指令說明: recorder = audiorecorder(Fs, nb, nch); (提供錄音相關的參數) Fs: sampling frequency, nb: using nb bits to record each data nch: number of channels (1 or 2)

10 recordblocking(recorder, Sec);
(錄音的指令) recorder: the parameters obtained by the command “audiorecorder” Sec: the time length for recording audioarray = getaudiodata(recorder); (將錄音的結果,變成 audioarray 這個 column vector,如果是雙聲道,則 audioarray 是兩個 column vectors) 以上這三個指令,要並用,才可以錄音

11 五、MP3 檔的讀和寫 要先去這個網站下載 mp3read.m, mp3write.m 的程式
程式原作者:Dan Ellis mp3read.m : 讀取 mp3 的檔案 mp3write.m : 製作 mp3 的檔案 不同於 *.wav 檔 (未壓縮過的聲音檔),*.mp3 是經過 MPEG-2 Audio Layer III的技術壓縮過的聲音檔

12 範例: %% Write an MP3 file by Matlab fs=8000; % sampling frequency t = [1:fs*3]/3; filename = ‘test’; Nbit=32; % number of bits per sample x= 0.2*cos(2*pi*(500*t+300*(t-1.5).^3)); mp3write(x, fs, Nbit, filename); % make an MP3 file test.mp3 %% Read an MP3 file by Matlab [x1, fs1]=mp3read('phase33.mp3'); x2=x1(577:end); % delete the head sound(x2, fs1)

13 六、影像檔和 Video 檔的讀和寫 Image 檔讀取: imread Image 檔顯示: imshow, image, imagesc
Image 檔製作: imwrite 基本概念:灰階影像在 Matlab 當中是一個矩陣 彩色影像在 Matlab 當中是三個矩陣,分別代表 Red, Green, Blue Video 檔讀取: aviread

14 範例一: im=imread('C:\Program Files\MATLAB\R2007a\pic\Pepper.bmp');
(注意,如果 Pepper.bmp 是個灰階圖,im 將是一個矩陣) size(im) ans = (用 size 這個指令來看 im 這個矩阧的大小) image(im); colormap(gray(256)) (如果是灰階的圖,可以用這兩行指令將圖顯示出來)

15 範例二: im1=double(im)*0.5; (注意:若要對影像作加減乘除,要加 double( ))
imwrite(im1, 'C:\Program Files\MATLAB\R2007a\pic\Pepper1.bmp') (將 im1 存成另外一個圖檔) 範例二: im2=imread('C:\Program Files\MATLAB\R2007a\pic\Pepper512c.bmp'); (讀取另一個圖檔,這個圖檔是個彩色檔) size(im2) ans = (注意,由於這個圖檔是個彩色的,所以 im2 將由三個矩陣複合而成)

16 image(im2); (如果是彩色的圖,用這個指令就可以將圖顯示出來) image(im2(:, :, 1)); colormap(gray(256)) (如果只想顯示其中紅色的部分,可以用這二行指令)

17 im3=zeros(512, 512, 3); im3(:, :, 1) = double(im2(:, :, 1))*0.6 + double(im2(:, :, 2))*0.4; im3(:, :, 2) = double(im2(:, :, 2))*0.6 + double(im2(:, :, 3))*0.4; im3(:, :, 3) = double(im2(:, :, 3))*0.6 + double(im2(:, :, 1))*0.4; (im3 和 im2 相似,只是將顏色改變) imwrite(im3/256, 'C:\Program Files\MATLAB\R2007a\pic\Pepper2c.bmp') (將 im3 存成另外一個圖檔,注意,要先 除以 256) (im3 必需是由 3 個二維矩陣複合而成的函式)


Download ppt "聲音檔和 Video 檔的讀與寫 (by Matlab)"

Similar presentations


Ads by Google