LoginSignup
47
23

More than 3 years have passed since last update.

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

Last updated at Posted at 2016-12-07

(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)
47
23
4

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
  3. You can use dark theme
What you can do with signing up
47
23