はじめに
ラズパイでのカメラストリーミングなどで注目されがちな GStreamer ですが、マルチメディアフレームワークということだけあって、音声に関する Element も豊富です。
なので今日はサックリと音声を扱う方法を紹介していきます
どのくらい豊富?
Windows では Audio decoder だけでも 30 Elements もあります。
ちなみに、rasbian で使える Audio decoder は 29 Elements ありました。
$ gst-inspect-1.0 | grep audio | grep decoder
wavpack: wavpackdec: Wavpack audio decoder
vorbis: vorbisdec: Vorbis audio decoder
speex: speexdec: Speex audio decoder
opus: opusdec: Opus audio decoder
mulaw: mulawdec: Mu Law audio decoder
mpg123: mpg123audiodec: mpg123 mp3 decoder
libav: avdec_vima: libav LucasArts VIMA audio decoder
libav: avdec_adpcm_vima: libav LucasArts VIMA audio decoder
libav: avdec_vmdaudio: libav Sierra VMD audio decoder
libav: avdec_smackaud: libav Smacker audio decoder
libav: avdec_paf_audio: libav Amazing Studio Packed Animation File Audio decoder
libav: avdec_mp3adufloat: libav ADU (Application Data Unit) MP3 (MPEG audio layer 3) decoder
libav: avdec_mp3adu: libav ADU (Application Data Unit) MP3 (MPEG audio layer 3) decoder
libav: avdec_mp3float: libav MP3 (MPEG audio layer 3) decoder
libav: avdec_mp3: libav MP3 (MPEG audio layer 3) decoder
libav: avdec_mp2float: libav MP2 (MPEG audio layer 2) decoder
libav: avdec_mp1float: libav MP1 (MPEG audio layer 1) decoder
libav: avdec_dsicinaudio: libav Delphine Software International CIN audio decoder
libav: avdec_bmv_audio: libav Discworld II BMV audio decoder
libav: avdec_binkaudio_rdft: libav Bink Audio (RDFT) decoder
libav: avdec_binkaudio_dct: libav Bink Audio (DCT) decoder
ivorbisdec: ivorbisdec: Vorbis audio decoder
gsm: gsmdec: GSM audio decoder
flac: flacdec: FLAC audio decoder
faad: faad: AAC audio decoder
dtsdec: dtsdec: DTS audio decoder
amrwbdec: amrwbdec: AMR-WB audio decoder
amrnb: amrnbdec: AMR-NB audio decoder
alaw: alawdec: A Law audio decoder
a52dec: a52dec: ATSC A/52 audio decoder
ざっと見ただけでも、手持ちのオーディオファイルはすべて鳴らせそうですね...
Description に audio
が含まれているのは、なんと 158 Elements
$ gst-inspect-1.0 | grep audio | wc -l
158
GStreamer を使うと何がうれしいの?
おわかりの通り、対応している音声形式が豊富なんです。
これだけでも、音声ファイル変換のバックエンドに使えそうですよね。
また、こんなこと思った経験はありませんか?
- WMPは再生できる形式少ない...
- iTunesは起動遅い...
- そもそもGUIがじゃま
そんな人はこのパイプラインを使って
$ gst-launch-1.0 filesrc location=audio.mp3 ! decodebin ! audioconvert ! autoaudiosink
こうすれば幸せになれるかもしれませんね :)
while : do
for file in `find`; do
gst-launch-1.0 -q filesrc location=$file ! decodebin ! audioconvert ! autoaudiosink
done
done
触って楽しかった Element を紹介
カラオケ化
これで作業中にヒトカラできます
$ gst-launch-1.0 filesrc location=music.mp3 \
! decodebin ! audioconvert ! audiokaraoke ! autoaudiosink
Low pass & high pass filter
ほかにもいくつか filter があるので inspect でプロパティを見て
設定して鳴らしてみると面白いです
$ gst-launch-1.0 filesrc location=music.mp3 \
! decodebin ! audioconvert ! audiowsinclimit cutoff=6000 \
! audioconvert ! autoaudiosink
音声の可視化
見た目だけ
$ gst-launch-1.0 filesrc location=music.mp3 \
! decodebin ! audioconvert ! wavescope ! autovideosink
音もいっしょに
$ gst-launch-1.0 filesrc location=music.mp3 \
! decodebin ! audioconvert ! tee name=t \
t. ! queue ! wavescope ! autovideosink \
t. ! queue ! autoaudiosink
wavescope でアルファブレンディングして、カメラ映像と合わせたら音声とカメラ映像の融合が!?
なんて妄想が膨らみます...
GStreamer な音楽プレイヤーを紹介
こんなのがあるみたいです。(わたしは使ったことありません)
ちなみに、arch 上で pacman を使ってインストールすると、
gst-libav がインストールされなくて alac 再生できないみたいなので、
alac 再生したい人は忘れずに gst-libav 入れてあげてくださいね
おわり
いかがでしたか? 音声扱えそうじゃありませんか?
基本的に decodebin ! audioconvert ! autoaudiosink
というやっつけだったのは許してやってください...
明日の投稿ですが、動画のエンコード・デコードについて書くつもりでした。
しかし、最近になって gst-typefind や gst-device-monitor の存在を知り「なんだこれ、なまら便利やん!」と思ったので、GStreamer ともっと仲良くするためのツールについて書きます笑
では、また明日。