6

I have a ton of training data I need annotated, in order to do so I need to listen through a bunch of sound snippets and note what I hear. I wrote a small script for this in a notebook.

My main issue is that IPython display dosent show in loops. As an example:

import numpy import IPython.display as ipd sr = 22050# sample rate T = 2.0# seconds t = numpy.linspace(0, T, int(T*sr), endpoint=False)# time variable x = 0.5*numpy.sin(2*numpy.pi*440*t) ipd.Audio(x, rate=sr) 

will show up with an audio box, and I will be able to play the sine wave.

But trying to play anything in a for loop yields nothing (such as:)

for i in range(10000000): x = 0.5*numpy.sin(i*numpy.pi*440*t) ipd.Audio(x, rate=sr) 

If anyone has a good solution for looping through (and listening) a bunch of audio files (one at a time, since I need to loop through potentially hundreds of thousands sound snippets), I would be very much appreciative!

7
  • 1
    try IPython.display(ipd.Audio(x, rate=sr)) instead of just ipd.Audio(x, rate=sr) Commented Jan 29, 2019 at 9:25
  • Possible duplicate of More than one Audio object in a Jupyter (IPython) Notebook cell Commented Jan 29, 2019 at 9:28
  • That throws a type error: TypeError: 'module' object is not callable Commented Jan 29, 2019 at 9:28
  • Not entirely duplicate, I dont want more than one box popping up at a time, I will be looping through potentially hundreds of thousands audio snippets. One box at a time... Commented Jan 29, 2019 at 9:30
  • 1
    SORRY!!! use IPython.display.display(ipd.Audio(x, rate=sr)) Commented Jan 29, 2019 at 9:31

2 Answers 2

18

To display the audio files within the for loop, you need to use IPython.display.display with the Audio object like so:

import numpy import IPython.display as ipd for i in range(10000000): x = 0.5*numpy.sin(i*numpy.pi*440*t) ipd.display(ipd.Audio(x, rate=sr)) 
Sign up to request clarification or add additional context in comments.

4 Comments

Do you know of a way of destroying the display after consuming it (there is nothing in the documentation, ipython.org/ipython-doc/3/api/generated/IPython.display.html)? This will print an awful lot of displays and destroy my RAM... :D
Try ipd.set_matplotlib_close(close=True) after the ipd.display()
strangely, this displays 10000000 players in my jupyter
Have you tried ipd.set_matplotlib_close(close=True) after the ipd.display()?
1

my answer was deleted. but if you want a continuous loop you can use the method i described here https://stackoverflow.com/a/73425194/664456 which is a = Audio(...); a.autoplay_attr = lambda: 'autoplay="autoplay" loop="loop"'

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.