(2016/12/21 追記)
IPython の標準モジュールにこれをやる関数があったので大幅編集。参考 URL
問題
Jupyter では、 %matplotlib inline
を書いたりすれば画像を埋め込むことができる。
しかし、音声ファイルを埋め込んで再生できるようにすることはできなかった。
これを解決するために、以前、以下の記事で Jupyter で音声ファイルを埋め込む記事を書いた。
http://qiita.com/mzmttks/items/f4493efaa8b8c0a58a82
しかし、複数のファイルを読み込めなかったり、音のデータを直接渡すことができない問題が残っていた。
本記事はこの問題を解決する IPython の標準モジュールとその使い方をを示す。
- 1つ、または複数音声ファイルを同時に埋め込むことができる。
- 音声データ (ファイルではない) を埋め込むことができる。
- Python 2 & 3 の両方に対応する。
解決方法
-
IPython.display.Audio
を使うと、パスを指定すればそれを読み、データを指定すればそれを埋め込んでくれる。 - 複数音声を一緒に埋め込みたいときは
IPython.display.display
でwrap すればよい。
コード
- ファイル "sample.wav" を埋め込むとき
import IPython.display
IPython.display.Audio("sample.wav")
- ファイル群 "sample1.wav" "sample2.wav" を埋め込むとき
import IPython.display
IPython.display.display(IPython.display.Audio("sample1.wav"))
IPython.display.display(IPython.display.Audio("sample2.wav"))
- 音声データを埋め込むとき (1ch)
import numpy
import IPython.display
# 440Hz
duration = 3
sin_1ch = numpy.sin(440 * 2 * numpy.pi * numpy.linspace(0, duration, duration * 16000))
IPython.display.Audio(sin_1ch, rate=16000)
- 音声データを埋め込むとき (2ch)
import numpy
import IPython.display
# 440Hz, 220Hz
duration = 3
sin_2ch = [numpy.sin(440 * 2 * numpy.pi * numpy.linspace(0, duration, duration * 16000)),
numpy.sin(220 * 2 * numpy.pi * numpy.linspace(0, duration, duration * 16000))]
IPython.display.Audio(sin_2ch, rate=16000)