端點偵測(End-Point Detection, EPD)是指找出一段音訊的開始和結束的位置。比較簡單的方法,是在時域上用音量和過零率等方法計算。以單純使用音量來說,可以設定門檻為「整段音訊音量最大值的 1/n」、「整段音訊音量最小值的 n 倍」等方法,其中的參數要經過經驗或實驗來取得。此外,反覆對波型計算差分再計算音量,也會因為可以凸顯氣音的音量,因此可以跟音量結合來執行 EPD。若要觀察,你可以使用此範例,或者自己錄製一個氣音比較多的音檔(原始音檔為「successes」的發音):

import librosa
import matplotlib.pyplot as plt
import numpy as np
  
WAV_PATH = 'successes.wav'
 
y, sr = librosa.load(WAV_PATH, sr=None)
t = np.arange(y.shape[0]) / sr
 
plt.subplot(2, 1, 1)
plt.plot(t, y)
 
plt.subplot(2, 1, 2)
frames = librosa.util.frame(y, frame_length=1024, hop_length=512).T # (n_frames, frame_size)
vol_0 = np.sum(np.abs(frames), axis=1)
d1 = np.diff(frames, axis=1)
d2 = np.diff(d1, axis=1)
d3 = np.diff(d2, axis=1)
d4 = np.diff(d3, axis=1)
vol_1 = np.sum(np.abs(d1), axis=1)
vol_2 = np.sum(np.abs(d2), axis=1)
vol_3 = np.sum(np.abs(d3), axis=1)
vol_4 = np.sum(np.abs(d4), axis=1)
t = librosa.frames_to_time(np.arange(frames.shape[0]), sr=sr, hop_length=512)
plt.plot(t, vol_0, label='Vol')
plt.plot(t, vol_1, label='Vol (1st diff)')
plt.plot(t, vol_2, label='Vol (2nd diff)')
plt.plot(t, vol_3, label='Vol (3rd diff)')
plt.plot(t, vol_4, label='Vol (4th diff)')
plt.legend()
 
plt.xlabel('Time (sec)')
 
plt.show()