Edited at

Jupyter で音声データを埋め込む

More than 1 year has passed since last update.

(2016/12/21 追記)

IPython の標準モジュールにこれをやる関数があったので大幅編集。参考 URL


問題

Jupyter では、 %matplotlib inline を書いたりすれば画像を埋め込むことができる。

しかし、音声ファイルを埋め込んで再生できるようにすることはできなかった。

これを解決するために、以前、以下の記事で Jupyter で音声ファイルを埋め込む記事を書いた。

http://qiita.com/mzmttks/items/f4493efaa8b8c0a58a82

しかし、複数のファイルを読み込めなかったり、音のデータを直接渡すことができない問題が残っていた。

本記事はこの問題を解決する IPython の標準モジュールとその使い方をを示す。

* 1つ、または複数音声ファイルを同時に埋め込むことができる。

* 音声データ (ファイルではない) を埋め込むことができる。

* Python 2 & 3 の両方に対応する。


解決方法



  • IPyhon.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)