This is an old revision of the document!
QHiMDTransfer is supposed to be a simple clone of the Mac OS X software "HiMD Music Transfer for Mac 2.0". The reason for using Qt is that it allows an application to be compiled and run on any platform supporting Qt, including Linux, *BSD, Solaris, Mac OS X and Windows. QHiMDTransfer uses the libraries libnetmd and libhimd to communicate with the walkman devices. The preferred tool for designing the graphical user interface and the program code of QHiMDTransfer is "Qt Creator 1.0" using "Qt 4.5.x" on Linux. Both can be obtained from http://qtsoftware.com.
The application should have the following features:
- Button bar at the top (toolbar) with all important functions (Copy to HiMD, Copy from HiMD, Delete from HiMD, Rename on HiMD, Format/Erase HiMD, Help)
- Two list-views, the left representing a directory view on the computer, the right representing a view of the music tracks on the HiMD
- File Browsing can be done with the FileBrowser object in Qt, see http://doc.trolltech.com/qq/qq09-file-browser.html or TreeView http://sector.ynet.sk/qt4-tutorial/dnd.html, http://wiki.qtcentre.org/index.php?title=Extended_Dir_View_example, http://www.greyc.ensicaen.fr/ensicaen/Docs/Qt4/itemviews-dirview.html (supplied with Qt, in the examples folder)
- Thats the perfect treeview example: http://www.codeproject.com/KB/cross-platform/Qt4WithKDevelop.aspx?display=Print - allows to display Track, Artist and Group-Name; right column could display codec (ATRAC3, MP3, PCM); also compare treeview in Sonicstage:
- Support for reading MP3s in Unicode and converting them to the format in the HiMD container
(probably some Windows codepage for FAT16)
- display diskname and diskid in the status-bar
- display each group in treewidget with different background colors (green/white/green/white/…)
- renaming of groups and tracks
- deleting of tracks/groups
- Format HiMD
- Possibility to move tracks within the list-view
Play back tracks from the HiMD over the computer speakers(dropped)
- make use of statusbar to display mountpoint and space-left/overall space of HiMD
- show bitrate and group-information in treeview (group information needs libhimd support)
- group HiMD-groups in treeview (needs libhimd support)
- write help-file (alternatively use Qt's "Whats this ?")
implement MP3-upload implement PCM-upload (NOTE: PCM-Upload is not supported for strong-encrypted PCMs yet, i.e. non MZ-RH1, output files lack WAV-header) use libsox to convert raw PCM into WAV-format
- implement MP3-download (needs libhimd support)
- implement PCM-download (needs libhimd support)
- implement ATRAC3-upload/download (not sure whether feasible)
- later versions should employ folder-browser for filesystem for upload/download (similar to SonicStage)
- allow drag and drop for download of files
- should detect connected HiMD-Walkman automatically (platform dependant)
- run upload/download in extra threads, use Qt multithreading; display progress in status-bar
- display MAC/Key in tracks list or alternatively "Encrypted: Yes / No"
- show status-window after download: 4 tracks(s) successully uploaded. 2 tracks(s) could not be uploaded: 2, 8.
- export tracklist to text-files (HTML or XML for example)
- use platform-indepent SCSI-library for:
- reading discid (countercheck with mclist0x.hma-file)
- formatting HiMD → already successfully performed on Linux (see himdformat.c)
- get/set date/time and display in statusbar
- allow/prevent medium-removal (lock MD during transfer)
- use DRM Read/Write future OpenMG-compatible transfer for ATRAC3 (?)
- does not check any error-codes from libhimd
default directory for upload/connect should be system-indepent; hardwiring "/home" is not a good idea for a Windows port (unless Qt somewhat matches /home to a different directory in Windows)(Qt is smart enough to do that for us) connect-button should check whether the chosen directory containts a HMDHIFI.IND file in the root directory to verify the selected folder contains actually HiMD-data
- all buttons except "Connect" should be disabled unless a HiMD has been selected with "Connect"
Screenshot of updated GUI running on GNOME/X11/GNU/Linux:
Screenshot of main application window, running on GNOME/X11/GNU/Linux:
Screenshot of track listing window, running on GNOME/X11/GNU/Linux:
Screenshot of track listing window, running on Mac OS X Leopard:
The icons can easily be made with Inkscape http://www.inkscape.org. The following figures for the icons are suggested:
- Connect: An USB-Plug
- Download to MD: A MiniDisc with a green arrow directed downwards
- Upload from MD: A MiniDisc with a red arrow directed upwards
- Delete selected: A trashcan icon
- Rename selected: An icon of some text being edited (a few characters with a cursor)
- Format: A MiniDisc with a red "X"
- Add group: a folder icon with a "+"
- Help: A question mark
- About: A copyright-sign
- Quit: An exit-door
Numinos has created an icon set for the buttons above:
libhimd will provide functionality to communicate with HiMD devices by accessing the files stored on the minidisc, so it works without special priviledges and also on images. For MPEG audio tracks this approach has been proven to be enough, and it is suspected that is also works for LPCM tracks.
The source code is structured into the following files
- himd.c - Main library code providing functions on the top level himd object
- encryption.c - All the stuff related to cryptography and key determination
- mdstream.c - Functions to read/write audio streams in the atdataXX.hma file
- trackindex.c - Functionality to encode/decode track metadata
http://users.physik.fu-berlin.de/~glaubitz/linux-minidisc/libhimd_uploadtest.zip - An MP3 transfered onto a MiniDisc with SonicStage and then uploaded with libhimd again.