The following code display the image and audio in the top-bottom style:
Here is the test code:
import librosa
import matplotlib.pyplot as plt
import IPython.display as ipd
def plot_it(name, audio, sample_rate):
    plt.figure(figsize=(8, 1))
    plt.plot(audio)
    plt.gca().set_title(name)
    plt.show()
    ipd.display(ipd.Audio(data=audio, rate=sample_rate))
Is it possible for changing the “top-bottom” style to “left-right” style for displaying the audio at the right side of the plt figure?
Advertisement
Answer
You can use a GridspecLayout which is similar to matplotlib’s GridSpec. In order to direct to output into the needed grid cells, you can capture it using the Output widget:
import librosa
import matplotlib.pyplot as plt
import IPython.display as ipd
from ipywidgets import Output, GridspecLayout
def plot_it(name, audio, sample_rate):
    grid = GridspecLayout(1, 2, align_items='center')
    out = Output()
    with out:
        fig, ax = plt.subplots(figsize=(8, 1))
        ax.plot(audio)
        ax.set_title(name)
        plt.close(fig)
        ipd.display(ax.figure)
    grid[0, 0] = out
    out = Output()
    with out:
        ipd.display(ipd.Audio(data=audio, rate=sample_rate))
    grid[0, 1] = out
    ipd.display(grid)
name = 'nutcracker'
filename = librosa.example(name)
y, sr = librosa.load(filename)
plot_it(name, y, sr)
(It is essential to close the figure, otherwise you’ll have double output of the figure. This is easier to do this using the OOP than the pyplot interface, that’s why I changed your matplotlib code a bit)

