vm/wsl2で音を鳴らす

tl;dr

WSL側でラッパースクリプトを書いて /usr/bin/ あたりにインストールすると良いかも

# ラッパースクリプトを作成

$ cat <<'...' >ffplay
#!/bin/sh
# vim: set ft=sh ff=unix expandtab ts=2 sw=2 :

set -e
_d(){ [ -n "$DEBUG" ]; }; _d && set -x  # debug

# wrapper of ffplay.exe (windows binary)

FFPLAY_PATH=${FFPLAY:-/mnt/c/Users/nobuoki/bin/ffplay.exe}
cd /mnt/c && exec "$FFPLAY_PATH" "$@"
...

# /usr/bin/ にインストール
$ sudo install ffmpeg /usr/bin/

Windowsにffmpeg(とffplay, ffprobe)をインストール

一番重要なこと:FFMPEG(ffplay)のPATHを通したあとでWSL2のターミナルを起動する

WSL2のターミナルからmp3ファイルを鳴らす

$ ls *.mp3
airly.mp3

# mp3ファイルを再生(ファイル名渡し/Windowsのパス表記に変換)
ffplay.exe -autoexit "$(wslpath -w airly.mp3)"

# mp3ファイルをパイプ渡しで再生
cat airly.mp3 | ffplay.exe -autoexit -i pipe:

midiファイルを鳴らす

# WSLに timidity(とサウンドフォント)をインストール
sudo apt install timidity freepats fluid-soundfont-gm fluid-soundfont-gs

# midiファイルを timidity で wav 形式でレンダリングしてパイプ渡しで再生
timidity airly.mid -Ow -o - | ffplay.exe -autoexit -i pipe:

# Ogg FLAC 形式でパイプ渡し(timidity の出力をカット、ffplay の映像出力等々をカット)
timidity airly.mid -OF -o - 2>/dev/null | ffplay.exe -autoexit -nodisp -hide_banner -loglevel fatal -i pipe:

WSL2に喋らせる

# gtts-cliをインストール
sudo apt -y install python3-gtts

# 日本語のロケールを生成
sudo locale-gen ja_JP.UTF-8

# 只今の時刻を日本語で喋らせる
$ LANG=ja_JP.UTF-8 date '+只今の時刻は %p %I 時 %M 分 です' | gtts-cli -l ja -f - | ffplay.exe -autoexit -nodisp -hide_banner -loglevel fatal -i pipe:

いっそのことWSLのffplayを差し替える

ffplay_original=$(command -v ffplay)
sudo mv "$ffplay_original" "${ffplay_original%/*}/fffplay"
sudo ln -s "$(command -v ffplay.exe)" "$ffplay_original"

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-11-16 (火) 23:32:23