Skip to content

Instantly share code, notes, and snippets.

@naotokui
Last active August 22, 2022 21:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save naotokui/efa261ab444ada29162c420438ce23e4 to your computer and use it in GitHub Desktop.
Save naotokui/efa261ab444ada29162c420438ce23e4 to your computer and use it in GitHub Desktop.
play audio on Visual Studio Code
# from vscode_audio import *
# Audio(audio_numpy_array, sr=SR)
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))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment