Skip to content

Instantly share code, notes, and snippets.

@Carreau
Last active October 30, 2020 18:43
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Carreau/5507501 to your computer and use it in GitHub Desktop.
Save Carreau/5507501 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"_nbviewer": {},
"name": "the sound of hydrogen"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": [
"The sound Of Hydrogen"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Inspired by [minutephysics](https://www.youtube.com/watch?v=qyi5SvPlMXc), and the explanation do do it n mathematica: [The sound of hydrogen](https://www.youtube.com/watch?v=IhvW8yZdE5A).\n",
"\n",
"The goal of this notebook is show how one can write a sound file to the disk, and use Html5 <audio> tag to play it dirrectly inside te notebook.\n",
"\n",
"To do this we use the spectrum spectrum of hydrogen that we shift the into the audible range.\n",
"\n",
"Plese be aware that the html5 player might not work in nbviewer."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%pylab inline"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.kernel.zmq.pylab.backend_inline].\n",
"For more information, type 'help(pylab)'.\n"
]
}
],
"prompt_number": 1
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import scipy.constants as const\n",
"import scipy\n",
"from scipy.io import wavfile\n",
"from IPython.core.display import HTML\n",
"from __future__ import division"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"## for this notebook, we need to be in the folder where the ipynb are stored.\n",
"## which for me is here :"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 3
},
{
"cell_type": "code",
"collapsed": true,
"input": [
"# this is a wrapper that take a filename and publish an html <audio> tag to listen to it\n",
"\n",
"def wavPlayer(filepath):\n",
" \"\"\" will display html 5 player for compatible browser\n",
"\n",
" Parameters :\n",
" ------------\n",
" filepath : relative filepath with respect to the notebook directory ( where the .ipynb are not cwd)\n",
" of the file to play\n",
"\n",
" The browser need to know how to play wav through html5.\n",
"\n",
" there is no autoplay to prevent file playing when the browser opens\n",
" \"\"\"\n",
" \n",
" src = \"\"\"\n",
" <head>\n",
" <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n",
" <title>Simple Test</title>\n",
" </head>\n",
" \n",
" <body>\n",
" <audio controls=\"controls\" style=\"width:600px\" >\n",
" <source src=\"files/%s\" type=\"audio/wav\" />\n",
" Your browser does not support the audio element.\n",
" </audio>\n",
" </body>\n",
" \"\"\"%(filepath)\n",
" display(HTML(src))"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"## some consstant for our audio file \n",
"\n",
"rate = 44100 #44.1 khz\n",
"duration =5 # in sec\n",
"\n",
"# this will give us sin with the righ amplitude to use with wav files\n",
"normedsin = lambda f,t : 2**13*sin(2*pi*f*t)\n",
"\n",
"time = np.linspace(0,duration, num=rate*duration)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 5
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Test the wav Player\n",
"\n",
"let's try to first just play an A (440 Hz)."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"pwd"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 13,
"text": [
"u'/Users/bussonniermatthias/ipynb'"
]
}
],
"prompt_number": 13
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# define A as a 440 Hz sin function \n",
"la = lambda t : normedsin(440,t)\n",
"\n",
"# look at it on the first 25 ms\n",
"plot(time[0:1000], la(time)[0:1000])\n",
"\n",
"# write the file on disk, and show in in a Html 5 audio player\n",
"wavfile.write('440.wav', rate, la(time).astype(np.int16))\n",
"wavPlayer(\"440.wav\")"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"\n",
" <head>\n",
" <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n",
" <title>Simple Test</title>\n",
" </head>\n",
" \n",
" <body>\n",
" <audio controls=\"controls\" style=\"width:600px\" >\n",
" <source src=\"files/440.wav\" type=\"audio/wav\" />\n",
" Your browser does not support the audio element.\n",
" </audio>\n",
" </body>\n",
" "
],
"output_type": "display_data",
"text": [
"<IPython.core.display.HTML at 0x10edc5b10>"
]
},
{
"output_type": "display_data",
"png": "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\nCAQCgSAM/w/kQM0iFGCa7gAAAABJRU5ErkJggg==\n",
"text": [
"<matplotlib.figure.Figure at 0x10e460550>"
]
}
],
"prompt_number": 14
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The differents frequencies emmited by an hydrogen atom is given by the rydberg formulae :\n",
"\n",
"$$ {1 \\over \\lambda} = R \\left({1\\over n_1}-{1\\over n_2}\\right) $$\n",
"\n",
"Which gives a similar relation on the emitted frequencies of the Hydrogen :\n",
"\n",
"$$ f_{n,m}={c \\over \\lambda} = {R_h\\over h} \\left({1\\over n}-{1\\over m}\\right) $$\n",
"\n",
"for $n=1$ we've got the Lyman series, and for $n=2$ we have the Balmer series"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# fondamental frequency of hydrogen\n",
"f0 = const.Rydberg*const.c\n",
"print \"The highest frequency of hydrogen is \",f0,\"Hz. and correspond to n = 1, m = \u221e\"\n",
"fshift = 440\n",
"print \"we can shift the spectrum for it to be at 440 Hz (A)\""
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"The highest frequency of hydrogen is 3.28984196036e+15 Hz. and correspond to n = 1, m = \u221e\n",
"we can shift the spectrum for it to be at 440 Hz (A)\n"
]
}
],
"prompt_number": 7
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"ryd = lambda n,m : fshift*(1/(n**2) -1/(m**2))\n",
"flyman = lambda x : ryd(1,x)\n",
"fbalmer = lambda x : ryd(2,x)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 8
},
{
"cell_type": "code",
"collapsed": true,
"input": [
"## define the sum, \n",
"ser = lambda t : sum( [normedsin(flyman(i),t)+normedsin(fbalmer(i+1),t) for i in range(2,8)])\n",
"\n",
"# and a verorialized function to work on a by element basis with matlab\n",
"serv = scipy.vectorize(ser)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 9
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"ss = serv(time)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 10
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"plot(time,ss)\n",
"ss = 2**15*ss/ ss.max()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "display_data",
"png": "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\n++WXvZ8j5fqFNv+1tbGbNwHxjTPAfy1K
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment