2022/10/5 追記
アプデで普通に対応したそうです。
Visual Studio Code August 2022
問題
vscodeでnotebook(.ipynb)を開いてIPython.display.Audio()
を使用しても
こうなって再生できない。パスを直接入れても同様。
調べてみると
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()
の代わりに使用することで音声の再生が可能になるみたいです。やってみましょう。
再生ボタンが表示され、これをクリックすると音声が再生されました。ちなみにパスを直接入力する方法には対応していません。また重いので、長い音声を入力すると結構時間がかかります。5分程度の音声を入力してみたのですが、数分経っても終わりませんでした。
再生バーが表示されなかったりと、本来の形とは違いますが、「とりあえず音を再生したい」という場合は使えると思います。