20-5 Tg

我們也可以經由 MATLAB 將音訊資料直接儲存為音訊檔案,以便日後直接在電腦播放,而不需每次都經由 MATLAB 播放。寫入音訊檔案的指令是 audiowrite,用法如下:

audiowrite(audioFile, y, fs)

其中 audioFile 則是欲寫入資料的檔案名稱,y 是音訊變數,fs 是取樣頻率。例如,若要將韓德爾的歌劇錄音存入 handel.wav,可用下列程式碼:

Example 1: 20-音訊讀寫、錄製與播放/audioWrite01.mload handel.mat audioFile='handel.wav'; % 欲儲存的 wav 檔案 fprintf('Saving to %s...\n', audioFile); audiowrite(audioFile, y, round(1.5*Fs)); %fprintf('按任意鍵後開始播放 %s...\n', audioFile); pause system(audioFile); % 開啟與 wav 檔案對應的應用程式Saving to handel.wav...

在上例中,我們將音訊資料儲存至 handel.wav,並用電腦對應的的應用程式來播放此 wav 檔案。

目前在MATLAB 8 版,audiowrite 指令所支援的輸出音訊檔案包含 WAVE (.wav)、OGG (.ogg)、FLAC (.flac)、MPEG-4 AAC (.m4a & .mp4)。

Hint
如果你只用 MATLAB 進行音訊錄製與播放,那麼就可以直接使用 save 指令將音訊變數儲存成 mat 檔案,再用 load 指令載入,也就夠用了,這時候就不必用到 wavwrite、auwrite 等指令了。

以下範例整合錄音、播放、存檔於同一份程式碼:

Example 2: 20-音訊讀寫、錄製與播放/audioWrite02.mfs=16000; % 取樣頻率 nBits=16; % 取樣點解析度,必須是 8 或 16 或 24 nChannel=1; % 聲道個數,必須是 1(單聲道) 或 2(雙聲道或立體音) duration=3; % 錄音時間(秒) recObj=audiorecorder(fs, nBits, nChannel); fprintf('按任意鍵後開始 %g 秒錄音:', duration); pause fprintf('錄音中...'); recordblocking(recObj, duration); fprintf('錄音結束\n'); fprintf('按任意鍵後開始播放:\n'); pause y = getaudiodata(recObj, 'double'); % get data as a double array plot((1:length(data))/fs, y); xlabel('Time (sec)'); ylabel('Amplitude'); sound(y, fs); audioFile='myRecording.wav'; % 欲儲存的 wav 檔案 fprintf('Saving to %s...\n', audioFile); audiowrite(audioFile, y, fs); system(audioFile); % 開啟與 wav 檔案對應的應用程式按任意鍵後開始 3 秒錄音:錄音中...錄音結束 按任意鍵後開始播放: Saving to myRecording.wav...


MATLAB程式設計:入門篇