科學音頻處理(一):怎樣使用Octave對音頻文件進行讀寫操作
Octave 是一個 Linux 上類似于 Matlab 的軟件,它擁有數量眾多的函數和命令,支持聲音采集、記錄、回放以及音頻信號的數字化處理,用于娛樂應用、研究、醫學以及其它科學領域。在本教程中,我們會在 Ubuntu 上使用 Octave 的 4.0.0 版本讀取音頻文件,然后通過生成信號并且播放來模仿在各種情況下對音頻信號的使用。
本教程中關注的不是安裝和學習使用安裝好的音頻處理軟件,而是從設計和音頻工程的角度理解它是如何工作的。
環境準備
首先是安裝 octave,在 Ubuntu 終端運行下面的命令添加 Octave PPA,然后安裝Octave。
- sudo apt-add-repository ppa:octave/stable
- sudo apt-get update
- sudo apt-get install octave
步驟1:打開 Octave
在這一步中我們單擊軟件圖標打開 Octave,可以通過單擊下拉式按鈕選擇工作路徑。
步驟2:音頻信息
使用audioinfo命令查看要處理的音頻文件的相關信息。
- >> info = audioinfo ('testing.ogg')
步驟3:讀取音頻文件
在本教程中我會使用 ogg 文件來讀取這種文件的屬性,比如采樣、音頻類型(stereo 和 mono)、信道數量等。必須聲明的一點是教程中使用的所有的命令都是在 Octave 終端窗口中執行的。首先,我們必須要把這個 ogg 文件賦給一個變量。注意:文件必須在 Octave 的工作路徑中。
- >> file='yourfile.ogg'
- >> [M, fs] = audioread(file)
這里的 M 是一個一列或兩列的矩陣,取決于信道的數量,fs 是采樣率。
下面的操作都可以讀取音頻文件:
- >> [y, fs] = audioread (filename, samples)
- >> [y, fs] = audioread (filename, datatype)
- >> [y, fs] = audioread (filename, samples, datatype)
samples 指定開始幀和結束幀,datatype 指定返回的數據類型。可以為所有變量設置值:
- >> samples = [1, fs)
- >> [y, fs] = audioread (filename, samples)
數據類型:
- >> [y,Fs] = audioread(filename,'native')
如果值是“native”,那么它的數據類型就依數據在音頻文件中的存儲情況而定。
步驟4:音頻文件的寫操作
新建一個 ogg 文件:
我們會從一個余弦值創建一個 ogg 文件。采樣率是每秒 44100 次,這個文件最少進行 10 秒的采樣。余弦信號的頻率是 440 Hz。
- >> filename='cosine.ogg';
- >> fs=44100;
- >> t=0:1/fs:10;
- >> w=2*pi*440*t;
- >> signal=cos(w);
- >> audiowrite(filename, signal, fs);
這就在工作路徑中創建了一個 'cosine.ogg' 文件,這個文件中包含余弦信號。
播放這個 'cosine.ogg' 文件就會產生一個 440Hz 的 音調,這個音調正好是樂理中的 'A' 調。如果需要查看保存在文件中的值就必須使用 'audioread' 函數讀取文件。在后續的教程中,我們會看到怎樣在兩個信道中讀取一個音頻文件。
步驟5:播放音頻文件
Octave 有一個默認的音頻播放器,可以用這個音頻播放器進行測試。使用下面的函數:
- >> [y,fs]=audioread('yourfile.ogg');
- >> player=audioplayer(y, fs, 8)
- scalar structure containing the fields:
- BitsPerSample = 8
- CurrentSample = 0
- DeviceID = -1
- NumberOfChannels = 1
- Running = off
- SampleRate = 44100
- TotalSamples = 236473
- Tag =
- Type = audioplayer
- UserData = [](0x0)
- >> play(player);
在這個教程的續篇,我們會進入音頻處理的高級特性部分,可能會接觸到一些科學和商業應用中的實例。