search
LoginSignup
10

More than 5 years have passed since last update.

posted at

GStreamer で音声を扱ってみる

はじめに

ラズパイでのカメラストリーミングなどで注目されがちな 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 :tada:

$ 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 ともっと仲良くするためのツールについて書きます笑

では、また明日。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
10