Added a new player function, setInitialBufferDuration(), which allows customers to set the initial buffer duration. This duration determines when playback can start. The allowable range is 0.1 to 5 seconds. This method has no effect on iOS browser platforms.
Web: Added a new method, setRequestCredentials. This controls whether the player makes credentialed requests to cross-origin endpoints. The remote endpoint needs to respond with the appropriate CORS response headers (like Access-Control-Allow-Origin, matching the request's Origin) and Access-Control-Allow-Credentials must be true.
Fixed a network-recovery issue. Playback is now automatically paused when the network connection is lost, and it is resumed when the connection is restored. Use the playerNetworkDidBecomeUnavailable delegate method to observe network state changes.
Added audio-session interruption handling. Playback is now automatically paused when an audio-session interruption begins. When the interruption ends, playback automatically resumes if the player was previously playing and the interruption options indicate that the app should resume playback.
This release includes an Android Player patch which fixes an issue: in prior Android player SDK releases, the SDK crashes if the app targets Android 11 (API level 30) and the user is running Android 11 on a cellular network.
Known Issue: The player SDK will crash if the app targets Android 11 (API level 30) and the user is running Android 11 on a cellular network. This will be fixed in the next release. In the meantime, we recommend targeting a previous Android API level (29 or lower).
If the app is playing, the player library sends the NETWORK_UNAVAILABLE event to the app and the player enters the IDLE state. When connectivity is restored, the player library resumes playing and the app receives a PLAYING event.
If your TV or soundbar doesn't support HDMI ARC, some soundbars and TVs have a high-definition multimedia interface or HDMI connection, which can transmit uncompressed signals without a loss in quality. Unlike HDMI ARC, Full HDMI In can only receive audio. Some users prefer to connect devices like a Blu-ray player or console directly to the soundbar to play all sound codecs.
In order to explore the current limits of 3D printing technology, I've created a technique for converting digital audio files into 3D-printable, 33rpm records and printed a few functional prototypes that play on ordinary record players. Though the audio quality is low -the records have a sampling rate of 11kHz (a quarter of typical mp3 audio) and 5-6 bit resolution (less than one thousandth of typical 16 bit resolution)- the songs are still easily recognizable, watch the video above to see the process and hear what the records sound like. Also check out my laser cut records, made on wood, paper, and acrylic.
The basic mechanism of a record player is very simple. The record moves at a constant rotational speed (usually 33.3 or 45 rpm) and a needle (also called a stylus) moves along a long spiral groove cut into the record's surface. As the record spins, the needle hits tiny bumps in the groove and vibrates to produce audio signals. I won't get into the specifics of how the needle extracts data from the record, but it is really interesting and there's a great demo of it here.
The record player and record cutter were invented by Edison in 1877. Due to a lack of precise machinery and technique at the time, the grooves on the first records were much larger than those on modern microgroove records and, subsequently, the audio signals were much noisier. This is a similar situation that I found myself in when starting this project: despite the high precision of the Objet machines, the resolution is nowhere near modern vinyl quality. Here and here are two examples of Edison's first phonograph tests. You can hear that the quality of recording of these tests is pretty close to what I've been able to 3d print; although I can't find the exact specs on these records, I'd imagine that the scale of the grooves was similar to what I was working with.
To give you an idea of the resolution of a modern record, check out the images above. Figs 1-3 are from Chris Supranowitz, a researcher at The Institute of Optics at the University of Rochester. These are close up images of a vinyl record, taken with an electron microscope. The dark objects in figs 1 and 2 are tiny particles of dust. Fig 3 is a bird's eye view of the record grooves, the darker regions are the top (uncut) surface of the record.
Fig 4 was made by branku62 at vinylengine.com, it shows the profile dimensions of a standard microgrove mono groove, this is what you would find on a modern mono 33 or 45 (stereo grooves are actually cut a bit smaller). In the diagram 1 mil = 1/1000", which is about 25um. Microgroove records require a stylus with a 0.7 to 1.0 mil radius tip, the tip makes contact with the groove at E in fig 1, a width of about 1.4 mil. The total depth of the groove is around 1.1 mil. These dimensions match up nicely with the dimensions of the electron microscope images.
Fig 5 is from Ron Geesin and Mark Berresford's website, it shows the groove depths of the older 78's. These records were much more coarse than microgroove records, both the needle and grooves were about 3x as large in every dimension. Fig 2 shows the groove depth for 78's was somewhere between 2.2 and 3.6 mil. The stylus radius was around 2.7 mil.
Here at Instructables HQ, we have access to Autodesk's fleet of Objet Connex 500 printers. These printers use UV light to cure resin layer by layer until a complete model is produced. They are very different from the fused deposition printers you may have seen or used before (MakerBot, RepRap, Up!, etc), not only can they print out of many types of materials (ranging from flexible rubbery material to hard polymer), but they are also extremely precise. In the x and y axes they have 600dpi resolution (that's about 42microns), and in the z axis they have a resolution of 16microns.
Before I started printing anything, I used these numbers to calculate the resolution I'd be able to achieve- so I could decide if this project was even worth pursuing any further. First I wanted to make sure that I would be able to get a good sampling rate on my audio. Sampling rate is the amount of samples per second in a song. Usually the sampling rate is 44.1kHz (or 44,100 samples a second). When the sampling rate drops below about 40kHz the higher frequencies of a song start losing their detail, but depending on the song you can go down to 10kHz sampling rate without too much of a problem.
To calculate the sampling rate of the 3D printed record I used the following relationship:
sampling frequency = (resolution per inch)*(inches per revolution)*(revolutions per second)
in order to maximize the sampling frequency, I want all of these numbers (res/inch, inch/rev, rev/sec) to be as high as possible
First I'll start with revolutions per second. Record players typically play at two different speeds: 33.3 and 45rpm. (Some record players also have a 78rpm speed, but this is less common and only used for very old records). I wanted to use the lower 33.3RPM speed in order to make this more like a real 12" record (45 RPM is only used for 7" records, and 33RPM for the full sized 12") and so that I could fit more audio onto each side of the disc.
revolutions per second = (revolutions per minute)/(seconds per minute)
revolutions per second at 33 rpm = 33.3/60 = 0.55
Next is inches per revolution, this number depends on the circumference of the disk where the needle is hitting it. The largest sized records are 12" in diameter (30cm). According to the RIAA standards, the outermost groove of a 12" record falls at a radius of 5.75" and the innermost groove falls at about 2.25". I'll use these numbers to determine the range of sampling rates I can achieve at 33RPM. The circumference (the distance in inches traveled by the needle during one revolution of the record) is calculated as follows:
inches per revolution = 2*pi*(radius of needle)
max inches per revolution = 2*pi*5.75 = 36
min inches per revolution = 2*pi*2.35 = 15
I already know that the resolution per inch of the 3D printer is 600 (600 dpi in the x and y axes). So combining this all I get:
sampling frequency = (resolution per inch)*(inches per revolution)*(revolutions per second)
max sampling frequency at 33 rpm = 600*36*0.55 = 12000 = 12kHz
min sampling frequency at 33 rpm = 600*15*0.55 = 4900 = 4.9kHz
This is a pretty good starting point. If I scale this to 45rpm instead of 33 the sampling rate becomes:
max sampling frequency at 45 rpm = 600*36*0.75 = 16000 = 16kHz
min sampling frequency at 45 rpm = 600*15*0.75 = 6700 = 6.7kHz
I'll keep this option in mind in case sampling rate becomes an issue. The other piece of information that I needed was the bit depth I'd be able to achieve with the Objet printer. Bit depth is the resolution of the audio data. Most audio these days in 16 bit, meaning each sample can have one of 65536 (2^16) possible values. 8 bit audio has only 256 (2^8) steps of resolution and still sounds pretty close to the original. Even going down to 3 and 4 bit sounds recognizable. (I should note here that the music commonly referred to as "8-bit" like the music in early Nintendo games is actually 1 bit resolution, it's called 8 bit because it was first made with 8 bit computers, not with 8 bit resolution).
Since the z axis is the most precise axis on the Objet printer, I wanted to print my record so that the needle vibrates vertically in the groove to trace out the audio wave to maximize my bit depth. The following equation calculates the vertical distance that the needle will move as it traces the a wave of a given bit depth:
vertical displacement of needle = (2^bit depth)*(precision of z axis)
where the precision of the z axis is 16micron. I used this to calculate the following table:
bit depth vertical displacement steps of resolution
2 64um 4
3 128um 8
4 256um 16
5 512um 32
6 1.024mm 64
7 2.048mm 128
8 4.096mm 256
The bolded rows in the table are the numbers that I wanted to shoot for with this project. A vertical amplitude of 64-512um is an order of magnitude (10x) larger than the amplitude of a vinyl record groove, but I felt like I'd probably be able to get away with it and still maintain a reasonable bit depth.