Start-end silence removal
Start-end silence removal merupakan teknik untuk menghilangkan suara silence di awal dan akhir utterances (sinyal wicara). Teknik ini dilatarbelakangi bahwa kebanyakan silence berada pada awal dan akhir pembicaraan.Dengan library librosa, menghilangkan silence pada awal dan akhir kalimat ini cukup mudah sebagai berikut,
import librosa x, fs = librosa.load('Ses01F_impro01_F000.wav') # ganti dengan nama file wav kamu xt, ind = librosa.effects.trim(x, top_db=30)
Untuk melihat hasilnya, kita ceck panjang sinyal atau kita plot (bisa juga didengarkan suaranya dengan library sounddevice.
In [12]: len(x) Out[12]: 42900 In [15]: len(xt) Out[15]: 24576
Hasil plotnya adalah sebagai berikut:
figure() subplot(211); plot(x) subplot(212); plot(xt)
Perlu dicatat, karena saya menggunakan ipython --pylab, saya tidak perlu menuliskan plt.* untuk mengakses library matplotlib. Selain menghasilkan output `xt`, fungsi librosa.effects.trim yang digunakan untuk menghilangkan silence ini juga memberikan indeks (start, end) dimana sinyal xt diambil.
Perhatikan gambar di atas, yang ditandai dengan elips warna oranye adalah sinyal silence yang ingin kita hilangkan, sedangkan, didalam kotak merah adalah sinyal yang ingin kita ambil. Parameter utama untuk menghilangkan silence ini adalah threshold (dB).
Threshold
Threhshold adalah selisih puncak sinyal suara (dicari dengan `np.max`) dengan batas yang mana sinyal dibawah batas tersebut ingin kita hilangkan (panah warna merah). Rumus threshold adalah sebagai berikut,$$ dB = 10 \log \dfrac{I_max}{I_ref} $$
Note: Start-end silence removal doesn't give any significant improvement on speech emotion recognition (based on experiment on IEMOCAP dataset).
Pada contoh di atas, hasil silence removal dicapai dengan threshold sebesar 15 dB. Dengan threshold yang lebih besar, misalnya 20 dB (artinya semakin rendah batas minimal sinyal untuk dihapus), tidak terjadi perubahan karena silence memang berada di atas threshold tersebut.