MiniDisc Community This page in english: This page in english:
Minidisc FAQNEU: besuche meine Frage und Antwort-Seite !! (Antworten zu Fragen über Hardware/Software und das dahinter stehende System...(bisher nur in Englisch)

Was ist das Problem ?

Es ist absolut einfach, mit einem MD-recorder Musik aufzunehmen. Man kann eine komplette CD überspielen, oder einfach mit Winamp eine Playliste abspielen.

Bisher habe ich direkt vom digitalen Ausgang meines Toshiba-CDROM Laufwerks zum MD-recorder überspielt. Dazu habe ich einen optischen SPDIF-Sender (TOTX173) an den CDROM Ausgang angeschlossen, und konnte direkt optisch aufnehmen. Besonders angenehm war, daß das CDROM zwischen jedem Titel den Datenstrom sehr kurz unterbrach, was der MD-Recorder als Track-Marker interpretierte. Somit hatte ich schon immer automatische Track-Marker.

Seit längerem habe ich meine CD-Sammlung mit CDex auf dem PC abgelegt, und benutze den Winamp, um meine MD's zu erstellen. Dabei mußte ich feststellen, daß keine Track-Marker gesetzt werden. Als Ursache wurde sehr schnell der SPDIF-Ausgang der SBLive-VALUE festgemacht. Während Pausen oder anderweitiger 'Nichtbenutzung' wird auf dem Ausgang der SBlive-VALUE weiterhin ein kontinuierliches Signal gesendet, was dazu führt, daß keine Track-Marker gesetzt werden. Somit mußte eine Lösung dafür her.


Was ist gelöst, und was nicht ?


SPDIF-Daten auf der SBlive-VALUE

Es sind vier (anscheinend gleichwertige) digiale SPDIF-Ausgänge auf der SBLive-Value vorhanden:

SBlive-Connector pinnaming

Um den richtigen Kontakt des 12-poligen Steckverbinders auf der SBlive-Value zu finden, siehe das folgende Bild (Pin-Zuordnungs Tabelle):

SBlive-Connector pinout


Anschließen des optischen Senders TOTX173

Ich verwende den optischen Sender von Toshiba - den TOTX173. Dieses Bauteil kann bei mehreren Elektronik-Versendern und Elektronik-Läden gekauft werden...

the TOTX173-pinout


Der Schaltplan

Nun kommen wir zum Schaltplan. Das Steuersignal (CONTROL) wird von der seriellen Schnittstelle genommen, weil sich das am einfachsten programmieren ließ. Außerdem ist bei fast jedem PC eine serielle Schnittstelle vorhanden und oft auch unbenutzt. Das CONTROL-Signal muß an den TTL-Pegel des 74HC08 angepaßt werden, dazu dienen der Vorwiderstand und die Diode.

Die Eingänge der unbenutzten Gatter des 74HC08 müssen auf definiertes Potential gelegt werden, das kann gegebenfalls auch mittels eines 100Ohm-Widerstandes nach VCC oder GND erfolgen. Nicht zu vergessen - die Abblockkondensatoren für das IC !

Das zur Steuerung des SPDIF-Datenstroms verwendete CONTROL-Signal wird aus dem Signal DTR (Data Terminal Ready) gewonnen. Hier ein kleiner Überblick über die Pinbelegung des 9-pin und 25-pin SUB-D serial port Steckverbinders:

Name        25-pin         9-pin
---------------------------------------------------------
TxD           2             3       transmit data
RxD           3             2       receive data
RTS           4             7       request to send (here: power source)
CTS           5             8       clear to send
DSR           6             6       data set ready
GND           7             5       ground
DCD           8             1       data carrier detect (here: signal line)
DTR          20             4       data terminal ready

SBlive-to-MD-Schematics


Die Software

Auf der Winamp-Homepage existiert eine Developer-site, dort ist die Programmierung mit C/C++ erläutert. Deswegen will ich nur auf die wichtigsten verwendeten Funktionen verweisen, das von mir geschriebene Programm ist unter der GPL (GNU Public License) frei verfügbar - d.h. jeder kann das Programm weiterverändern. Ich würde mich über jede Verbesserung der Software freuen, und das verbesserte Programm hier präsentieren.

Zuerst muß die WINAMP-Applikation gesucht werden:

HWND hwnd_winamp = FindWindow("Winamp v1.x",NULL);

Danach wird auf das Abspielen eines Titels gewartet:

IPC_ISPLAYING returns the status of playback.
If it returns 1, it is playing. if it returns 3, it is paused,
if it returns 0, it is not playing.

int res = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_ISPLAYING);

Mit dem nachfolgenden API 'taste' ich mich langsam an das Titel-Ende heran, um für ca 1msec..5msec den SPDIF-Datenstrom zu unterbrechen:

IPC_GETOUTPUTTIME returns the position in milliseconds of the
current song (mode = 0), or the song length, in seconds (mode = 1).
Returns -1 if not playing or error.

int res = SendMessage(hwnd_winamp,WM_WA_IPC,mode,IPC_GETOUTPUTTIME);

Die Unterbrechungszeit von nur 1 msec ist nach meinen Erfahrungen völlig ausreichend und kann bis auf unendlich verlängert werden - solange kein SPDIF-Datenstrom am optischen Eingang des MD-Recorders anliegt, wird auch nicht aufgezeichnet - was sehr praktisch ist !

Das Programm (und die Sourcen) sind hier: MD-Track SoftwareMD-Track Software (24kByte)


Fragen ?, Anregungen ?, dann email mir:
Copyright ©2002-2006 Tobias Schirmer