LoginSignup
1
0

More than 1 year has passed since last update.

VSCodeのJupyterでIPython.display.Audio() を使いたい

Last updated at Posted at 2022-07-08

2022/10/5 追記

アプデで普通に対応したそうです。
Visual Studio Code August 2022

問題

vscodeでnotebook(.ipynb)を開いてIPython.display.Audio()を使用しても

vs_jupyter_audio1.png

こうなって再生できない。パスを直接入れても同様。

vs_jupyter_audio2.png


調べてみると

IPython.display.Audioで音声が再生できないので調べてみました|Discipline and Action

私はvscode上でjupyter notebookを編集していたのですが、vscodeでは動画、音声の再生がサポートされていないようです。

ということでした。

解決策

GitHubのIssuesに解決案がありました。

IPython.display.Audio not working for WAV audio · Issue #1012 · microsoft/vscode-jupyter

import IPython.display
import numpy as np
import json

def Audio(audio: np.ndarray, sr: int):
    """
    Use instead of IPython.display.Audio as a workaround for VS Code.
    `audio` is an array with shape (channels, samples) or just (samples,) for mono.
    """

    if np.ndim(audio) == 1:
        channels = [audio.tolist()]
    else:
        channels = audio.tolist()

    return IPython.display.HTML("""
        <script>
            if (!window.audioContext) {
                window.audioContext = new AudioContext();
                window.playAudio = function(audioChannels, sr) {
                    const buffer = audioContext.createBuffer(audioChannels.length, audioChannels[0].length, sr);
                    for (let [channel, data] of audioChannels.entries()) {
                        buffer.copyToChannel(Float32Array.from(data), channel);
                    }
            
                    const source = audioContext.createBufferSource();
                    source.buffer = buffer;
                    source.connect(audioContext.destination);
                    source.start();
                }
            }
        </script>
        <button onclick="playAudio(%s, %s)">Play</button>
    """ % (json.dumps(channels), sr))

このAudio()関数をIPython.display.Audio()の代わりに使用することで音声の再生が可能になるみたいです。やってみましょう。

vs_jupyter_audio3.png

再生ボタンが表示され、これをクリックすると音声が再生されました。ちなみにパスを直接入力する方法には対応していません。また重いので、長い音声を入力すると結構時間がかかります。5分程度の音声を入力してみたのですが、数分経っても終わりませんでした。

再生バーが表示されなかったりと、本来の形とは違いますが、「とりあえず音を再生したい」という場合は使えると思います。

1
0
0

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
1
0