重開電腦才發現 WSLg 終於下放給 Win 10 使用了(見 microsoft devblogs 文章),之前要跑 cypress 還要用 VcXsrv 搞個 X server 實在辛苦,我也是 Windows 支持者卻要受這等待遇。

那麼終於能用 Vim 的 sound_playfile('我的酷音效.wav') 了嗎? (自從 patch 8.1.1502 已經等了三年)

結果是可以發聲,但功能很有限。 我……很失望。

Vim help 舉的例子是播放 ubuntu 的系統音效,位置在 /usr/share/sounds/freedesktop/stereo,下面程式碼最後是能動的:

call sound_playfile('/usr/share/sounds/freedesktop/stereo/bell.oga')
call sound_playevent('bell')

但首先會遇上 wslg/issue #864,因為 WSLg 是在 PulseAudio 做整合而沒有打理 ALSA 底層,而 Vim +sound 看起來是跟 ALSA 溝通,所以會遇到沒有音效卡之類的問題: Vim has serveral errors when playing sound 解法如 issue 說的裝 libasound2 然後在 ~/.asoundrc 加入

pcm.default pulse
ctl.default pulse

重開 WSL 就能播放這兩個聲音了。

然而繼續試下去,發現只能播這些聲音啊,餵它別的音檔路徑是沒反應的。
原因應該是 +sound 在 ubuntu 的實作是基於 libcanberra,看它介紹是處理桌面音效的,所以不是系統主題的聲音,我可是不播的喔?

總之最後就放棄了,改用 PulseAudio 的 pactl,這個至少還堪用。

pactl upload-sample {PATH_TO_AUDIO_FILE} {SOME_ID}
pactl play-sample {SOME_ID}