====== NetMDPython ======
NetMDPython is a collection of [[http://www.python.org/|Python]] scripts which allow to control NetMD devices on Linux, Unix and MacOS X (Windows is unfortunately not yet supported since //libusb// is too old on Windows). With NetMD Python, you can upload tracks from standard MDs with the help of the MZ-RH1 Walkman to your PC, list the contents of any standard MD with any NetMD device and control and record tracks over analog input with any NetMD device. A recently added and therefore still very hacky script called "downloadhack.py" allows to download tracks to a NetMD.
===== Requirements =====
Before the Python code for NetMD can be used, [[http://git-scm.com/|git]], [[http://www.libusb.org/wiki/Libusb1.0|libusb-1]] and [[http://www.python.org/|python 2.4+]] with ctypes need to be installed. A development version of //ffmpeg// is required to convert uploaded ATRAC tracks to other formats. In order to be able to obtain this version of //ffmpeg//, //subversion// must be installed (which is the case on MacOS X by default but not on Ubuntu for example). Depending on your operating system, the installation is slightly different:
==== MacOS ====
Download and install Macports: [[http://www.macports.org]].
After installing macports, you'll need to modify your .bashrc in your home-directory by adding "/opt/local/bin" to the PATH-environment.
In a terminal (Applications->Utilities->Terminal), as normal user, type:
echo "PATH=$PATH:/opt/local/bin" >> ~/.bashrc
Then install the ports //git-core// and //libusb// from Macports:
sudo port install libusb git-core py26-crypto sox
==== Debian and Ubuntu ====
sudo apt-get install python2.6 libusb-dev git-core subversion python-crypto sox
==== Windows ====
Download and install [[http://www.python.org/ftp/python/2.6.6/python-2.6.6.msi|Python2.6]], [[http://www.voidspace.org.uk/downloads/pycrypto-2.1.0.win32-py2.6.zip|PyCrypto]] and [[http://sourceforge.net/projects/sox/files/sox-win/14.3.1/|sox]].
Download [[http://libusb-winusb-wip.googlecode.com/files/zadig.exe|zadig.exe]] (WinUSB device driver installer), connect your NetMD device and run //zadig.exe//.
Click //Options->List all devices//, choose your NetMD device an choose //Install Driver//.
//**NOTE: SonicStage will not be able to communicate with your NetMD device anymore.
If you want to use SonicStage again, you will have to uninstall WinUSB device driver first.**//
(To uninstall the driver, run Windows "Device Manager", choose your device and uninstall it, you can find it at "libusb (WinUSB) devices".
Then unplug and reconnect your device).
Download latest version of [[http://github.com/vpelletier/python-libusb1/tree/|python-libusb1]] and replace usb1.py and libusb1.py in the //netmd// subdirectory of your //linux-minidisc// folder with the python-libusb1 versions. These versions can find and open libusb Windows DLL which has not been implemented in usb1.py and libusb1.py of current main source repository yet.
Download and extract [[http://libusb-winusb-wip.googlecode.com/files/libusb_2010.10.14.7z|libusb windows backend]] and copy libusb1.0.dll to your
windows/system32 folder (usually C:\WINDOWS\system32). Use the version according to your version of Windows, the mingw32 version should work on Windows XP 32-bit.
Open a command prompt (Click //Start->Run//, type //cmd// and press enter) and type
set PATH=;%PATH%
to add the path of sox directory temporarily. ( means the path to your sox installation directory, usually C:\sox-14-3-1). To use it permanently you can add the path to your system variables.
If you want to use ffmpeg to convert uploaded files, you can download Windows binaries of [[http://ffmpeg.arrozcru.org/autobuilds/|ffmpeg]].
Extract it to a place of your choice and add the path of //bin// subdirectory to your PATH environment variable as described above.
set PATH=\bin;%PATH%
To use the tools, change into netmd subdirectory of your linux-minidisc folder and run the scripts by their name (just type
"dump_md.py", "upload.py", ...) with parameters if required. See [[netmdpython#how_to_use_the_tools]] below.
==== Getting the code ====
To get the code, clone it with //git// as shown on the [[start#source_code|homepage]].
The Python libnetmd can be found in the //netmd// subdirectory:
cd linux-minidisc/netmd
===== How to use the tools =====
==== lsmd.py - list the content of a standard MD on a NetMD Walkman ====
=== Usage ===
$ ./lsmd.py -h
Usage: lsmd.py [options]
Options:
-h, --help show this help message and exit
-b BUS, --bus=BUS
-d DEVICE, --device=DEVICE
=== Sample output ===
$ sudo ./lsmd.py
Disk (writable media, write-protected) 'Disc title ascii' DISC title wchar
Time used: 01:10:26+026 (94.55%)
20 tracks
000: 00:03:06+017 sp stereo unprotected 'Track title ascii' Track title wchar
[...]
==== dump_md.py - transfer tracks from a NetMD Walkman over remotely controlled analog audio extraction ====
Automated extraction of tracks from a MD. It does analog extraction, as there is no known way to extract tracks digitally (except for MZ-RH1 player).
It encodes tracks into ogg in a subfolder of working directory named after disc title. Tracks are named as "''%n - %t.ogg''", ''%n'' being 2-digit track number starting at ''01'' and ''%t'' being the track title.
**Note on wchar:** If there is wchar version of a title set, it will take precedence over ascii title. This works for both disc and track titles.
=== Requirements ===
* [[http://sox.sourceforge.net/|SoX]]
* Audio card with analog input
* Audio cable
=== Usage ===
$ ./dump_md.py -h
Usage: dump_md.py [options]
Options:
-h, --help show this help message and exit
-b BUS, --bus=BUS
-d DEVICE, --device=DEVICE
-t TRACK_RANGE, --track-range=TRACK_RANGE
=== Sample output ===
$ sudo ./dump_md.py -t 1-3
Storing in DISC title wchar
Recording 01 - Track title wchar.ogg ( 00:03:06.033 )
Waiting for MD...
Input File : 'default' (alsa)
Channels : 2
Sample Rate : 48000
Precision : 16-bit
Sample Encoding: 16-bit Signed Integer PCM
In:0.00% 00:00:01.49 [00:00:00.00] Out:0 [ | ] Clip:0
[...]
==== upload.py - upload tracks from standard MDs using Sony's MZ-RH1/M200 ====
This tool is used for digital upload of non-protected tracks (lsmd lists them as "unprotected"). It works with the MZ-RH1 HiMD Walkman only. Invocation has the same syntax as the ''dump_md'' utility, but the output format will be ".aea" for SP tracks (a format implemented by very recent versions of ffmpeg) and ".wav" for LP2/LP4 tracks. **NOTE:** While the files are really Windows-compatible WAV files, they still do contain the ATRAC3 encoded audio. To play them you need an ATRAC3 decoder. For Windows, that means you have to install the ATRAC3 decoder (acm file) in order for it work with Windows Media Player. Alternatively, you can install a recent version of VLC. On Linux, the ffmpeg project (and everything based on it) supports ATRAC3 encoded audio as well as ATRAC SP (version 0.6 or later).
This tool will silently skip protected tracks, so if you don't get the files you expect, check their protection status. There is no known way to unprotect a track using NetMD or HiMD players. All tracks uploaded by Sonic Stage are protected. Surprisingly, tracks uploaded by MD Simple Burner are not. To transfer tracks to the NetMD as unprotected, our "downloadhack.py" may be used as well.
=== Using upload.py and ffmpeg to upload tracks on MacOS X ===
* **install ffmpeg-devel (or ffmpeg, version 0.6 or later) for SP support**:
sudo port install ffmpeg-devel
* **OR** alternatively install ffmpeg from svn:
svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg
cd ffmpeg
./configure --prefix=/opt/local
make
sudo make install
* install the dependencies as shown [[netmdpython#macos|here]]
* insert the MD to be uploaded into your MZ-RH1, connect it to your Mac and invoke //upload.py//:
cd linux-minidisc/netmd
./upload.py
* convert a track into WAV format:
ffmpeg -i
* batch convert several tracks into AAC/MPEG4 audio:
find . -type f | while read filename; do ffmpeg -i "$filename" -ab 256k "${filename%aea}mp4" ; done
=== Using upload.py and ffmpeg to upload tracks on Ubuntu ===
* install the dependencies as shown [[netmdpython#debian_and_ubuntu|here]]
* install //ffmpeg// from the official repositories (**you will need //ffmpeg// version 0.6 or later for ATRAC SP**) to check, whether ffmpeg 0.6 or later is available, type:
apt-cache show ffmpeg |grep Version
Version: 5:0.6~svn20100603-0.0
Version: 4:0.5.2-1
* if the version listed corresponds to 0.6 or later, install //ffmpeg// directly:
sudo apt-get install ffmpeg
* if you cannot install 0.6 or later this way, install the build dependencies for //ffmpeg// and install it from svn:
sudo apt-get build-dep ffmpeg
cd /usr/src
svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg
cd ffmpeg
./configure
make
sudo make install
* insert the MD to be uploaded into your MZ-RH1, connect it to your Linux box and invoke //upload.py//:
cd ~/linux-minidisc/netmd
./upload.py
* convert a track into WAV format:
ffmpeg -i
* batch convert several tracks into AAC/MPEG4 audio:
find . -type f | while read filename; do ffmpeg -i "$filename" -ab 256k "${filename%aea}mp4" ; done
==== downloadhack.py - download tracks to NetMD (buggy) ====
Use this script download tracks to your NetMD Walkman. **Note: This requires the NetMD root key from Sony which is not (yet) part of the official repository due to legal reasons.**
==== mdctl.py - test libnetmd functionality (DEBUG use only) ====
This is in a more-than-primitive state. It is supposed to export all functions of libnetmd.py for easy command-line use. Currently, it's a brain-dead wrapper around a pdb shell. Use only if you know Python.
==== lsusb.py - list USB devices connected to the PC ====
This is just a toy to test usb1.py and libusb1.py. It looks a bit like regular lsusb, but fetches all its data from the USB device itself ("real" lsusb maintains a device/manufacturer list asides), which is much less readable (many devices are not correctly defined internally). Useful (...maybe not even) as a sample code using usb1.py.
**Important notes regarding all tools:**
* Write access to usb device required (even for listing, as it requires sending usb commands). One way to obtain the rights on modern Linux distributions that use PolicyKit ist to add the portable_audio_player capability to the Net MD device using the provided fdi file (look in netmd/etc of the linux-minidisc tree). Another way is to run them with root permissions (not recommended) or make sure the device raw USB device (the file /dev/bus/usb//) gets read/write access by the user you want to use the tools with.
* wchar encoding assumed to be always SHIFT-JIS. It is the case on my test MDs, which are rewritable medium recorded in japan.
* This library was tested on a MZ-N910, YMMV with different hardware
* No warranty. You get to keep the pieces if it breaks your MD player, r00ts y0ur b0x or eats your cat.
Most (all ?) those tools will iterate over all connected MD devices. They (should) offer ''-b'' and ''-d'' parameters to allow you to specify the usb bus and the device number you want to affect independently of others.
===== Library =====
Library documentation (...once written ;-) ) can be accessed by python regular documentation system:
pydoc libnetmd