Shokz OpenSwim MP3 Loading Solution

Shokz OpenSwim MP3 Loading Solution

Get hour long podcasts from Youtube and load smaller chunks of MP3 files to SHOKZ

·

4 min read

A former student gifted me a SHOKZ OpenWwim S700. The bone conduction earphone is great for sports and this model is water resistant. The only glitch is that one needs to load MP3 files into the earphone before using it.

The last time I loaded MP3 files was about 20 years ago when the device was well known "MP3". With the development of mobile Internet, content becomes available via streaming services everywhere, so there is little chance we need to get hands on those MP3 files (although most are automatically played back as part of a video).

Although we can easily find packs of music files, I was looking for more tailored / more selective content. As a mindful runner/ wimmer, I have no trouble with the boredom of the exercise. Music are just noise to me for most of the time. However, when I approach longer and longer swim sessions, I think I could re-use the time for some quality podcasts.

Here is my solution.

Get Podcasts from Youtube

Youtube is my favourite platform to discover new quality content:

  • You can like and dislike to intruct the system your preference. (not just single-way "like" system.)
  • Very good keyword search when you want to proactively find content of certain topics.
  • Adopted by many serious podcasters.

The you-get tool, also available as a Python package, is very handy to download videos from Youtube. Since we mainly care about the audio stream, we can select the lowest quality video stream to save some bandwidth. Reference commands are as follows.

First get the available streams:

you-get -i https://www.youtube.com/watch\?v\=DkS1pkKpILY

Part of the output are like:

    - itag:          133
      container:     mp4
      quality:       426x240 (240p)
      size:          156.3 MiB (163899247 bytes)
    # download-with: you-get --itag=133 [URL]

    - itag:          160
      container:     mp4
      quality:       256x144 (144p)
      size:          140.7 MiB (147494318 bytes)
    # download-with: you-get --itag=160 [URL]

    [ DEFAULT ] _________________________________
    - itag:          22
      container:     mp4
      quality:       hd720
      size:          346.9 MiB (363721124 bytes)
    # download-with: you-get --itag=22 [URL]

    - itag:          18
      container:     mp4
      quality:       medium
    # download-with: you-get --itag=18 [URL]

We can select the smallest files and download it:

you-get -F 160 https://www.youtube.com/watch\?v\=DkS1pkKpILY

Extract audio stream

Reference command:

ffmpeg -i 'What Alcohol Does to Your Body, Brain & Health - Huberman Lab Podcast #86.mp4' -q:a 0 -map a sample.mp3

Format SHOKZ

One issue with the SHOKZ OpenSwim model is that there is a limit of single MP3 size (but I don't know how much).

Upon the first try, I loaded the entire MP3, which is about 180M. The podcast did not playback at all. I tried all troubleshooting instructions given by the customer service, but it still did not work. Then I removed the 180M podcast and loaded their testing music files which are all small 3-4MB files, but they still did not playback. Even the original testing music files did not playback then.

Since the buttons were working and there were audio instructions upon operations, my hunch was that the file system had some limitation.

Then I realized that the file system as "MSDOS (FAT32)" -- an ancient file system, well known for a major issue: The file system is technically append-only; the deleted files are just flagged delete but still on the disk somewhere. In this way, if SHOKZ has trouble reading large files, the deleted files would hinder the process of files behind it no matter it was deleted or not.

One demo of this issue is as below:

SHOKZ FAT32 file system.jpg

The "Used" sections shows 272.9MB but the files at the moment was about 80MB testing music from the customer support at that time (other files were deleted from Finder).

The solution is: FORMAT IT!

Next question is that which format to choose. The factory settings used FAT32, but the option is greyed in Mac's disk util. Just select "MS-DOS (FAT)" to format the disk and the result format will be FAT32 in the end.

Now the earphone is fixed. We can load smaller files and play back the musics.

Break MP3 into smaller files

Here is a utility bash script that uses ffmpeg to break large files into smaller ones.

#!/bin/bash

if [ $# != 3 ](https://hash.hupili.net/3/); then
    echo "$0 {filename} {segment} {total}"
    exit 255
fi

fullfile=$1
filename=$(basename -- "$fullfile")
extension="${filename##*.}"
filename="${filename%.*}"
echo $filename
echo $extension

segment=$2
total=$3

seq -f "%08g" 0 $segment $total | xargs -ISTART ffmpeg -y -i $fullfile  -ss START -t $segment $filename-START.$extension

Example usage: (break into 5min per file up to 2 hours)

video-split.sh total.mp3 300 7200

Results:

Huberman podcast smaller files.png

Eventually, I can play the podcast now! (remember to set mode as "play in order"). Suggest to put those files in a single folder, so you can switch podcast by switch folders.

Did you find this article valuable?

Support HU, Pili by becoming a sponsor. Any amount is appreciated!