It’s Reality!

Die meisten modernen Kassettendecks und Bandmaschinen sind mit Echtzeitzählwerken ausgestattet; besonders teure Geräte können sogar mit einer Restspielzeitanzeige aufwarten. Diese Features machen sich besonders im Aufnahmebetrieb enorm nützlich.

Für die Besitzer weniger gut ausgestatteter Maschinen bringt das hier im Rahmen des Programms REALTIME vorgestellte Verfahren zur Umrechnung von Zähler ständen in Echtzeit Abhilfe. Voraussetzung ist lediglich, daß das vorhandene Zählwerk präzise arbeitet.

Das Scenario

Der geknechtete Anwender eines älteren oder preiswerteren Gerätes, welcher sich des öfteren seine eigenen Konserven für bestimmte Zwecke (z.B. Autoradio, Walkman, Diashow) zusammenstellt, stolpert mangels Echtzeitanzeige bzw. Restspielzeitbestimmung regelmäßig über zwei Probleme: Entweder die reguläre Bandlänge reicht nicht für die Aufnahme, oder das Band ist länger als angegeben, wodurch ein längeres Stück am Bandende unbespielt bzw. ungenutzt bleibt; letzteres ist besonders im Auto-Reverse-Betrieb lästig.

Solchermaßen geartete Ärgernisse lassen sich nur vermeiden, wenn man vor der Zusammenstellung des aufzunehmenden Materials genau weiß, wieviel Spielzeit noch zur Verfügung steht.

Das Problem

Die meisten einfachen Zählwerke, egal ob mechanisch oder elektronisch realisiert, sind direkt an die Achse gekoppelt, die den aufwickelnden Wickelteller antreibt, und bilden somit die Anzahl der Umdrehungen desselben ab. Da sich, um die Bandgeschwindigkeit beim Abspielen oder Aufnehmen konstant zu halten, die Drehzahl des Wickeltellers ständig verringern muß, verringert sich auch die Geschwindigkeit des Zählers ständig. Das heißt, der Zählerstand ist nicht proportional zur abgelaufenen Zeit bzw. zur Länge des abgelaufenen Bandes; der Zähler arbeitet also nichtlinear. Dadurch wird das oft probierte einfache Umrechnen von Zählerstand in Echtzeit über Multiplikation mit einem konstanten Faktor vereitelt.

Der Lösungsansatz ...

... ist relativ simpel: Die dem Zählerstand entsprechende Echtzeit ergibt sich, indem man die Länge des in dieser Zeit abgelaufenen Bandes durch die Bandgeschwindigkeit teilt. Zur Berechnung der Länge des abgelaufenen Bandes muß man sich vorstellen, daß mit jeder Umdrehung ein Bandstück aufgewickelt wird, dessen Länge mit der Kreisumfangsformel bestimmt werden kann. Die Gesamtlänge erhält man also, indem man von einem leeren Wickelteller ausgehend, die Längen aller gewickelten Bandstücke aufsummiert, wobei man sich vor Augen halten muß, daß sich der Radius des gesamten Bandwickels mit jeder Umdrehung um die Bandstärke vergrößert.

Da man bei der Berechnung nur von einem leeren Wickelteller ausgehen kann, ist es notwendig, daß der Zählerstand relativ zum Bandbeginn angegeben wird, d.h. das Band muß zunächst immer zurückgespult und der Zähler auf Null gesetzt werden.

Komplizierend kommt noch hinzu, daß bei den meisten Geräten das Laufwerk-Zähler-Übersetzungsverhältnis nicht 1:1 ist, daß also der Zählerstand nur ein Zerrbild der Anzahl der erfolgten Umdrehungen des Wickeltellers ist. Das bedeutet praktisch, daß vor der Bestimmung der Echtzeit der Zählerstand mit einem für jeden Gerätetyp spezifischen Faktor: Anzahl der Umdrehungen/Zählereinheit multipliziert werden muß. In der Abbildung finden Sie einen den obigen Überlegungen folgenden mathematischen Ansatz und die Herleitung der im Programm verwendeten Formel.

# Umrechnung von Zählerständen in Echtzeit

Legende:

c.... counter = Zählerstand (relativ zum Bandbeginn!)
t......time = entsprechende Echtzeit (in sec)
nrpcu ... number of rotations /counter unit = Anzahl der Umdrehungen / Zählereinheit
nr....number of rotations = Anzahl der Umdrehungen bzw. Wicklungen
tv.....tape speed = Bandgeschwindigkeit (in cm/s)
td.....tape diameter = Bandstärke in cm
twd....tape winder diameter = Wickelkerndurchmesser (in cm)

Mathematischer Ansatz und Herleitung der Formel

Die Einflußgrößen

Zur Umrechnung eines Zählerstandes in Echtzeit müssen also Wickelkerndurchmesser, Bandstärke, Bandgeschwindigkeit und das Laufwerk-Zähler-Übersetzungsverhältnis bekannt sein.

Der Wickelkerndurchmesser ist für normale Audio-Kassetten auf 2,2 cm genormt, die Bandgeschwindigkeit auf 4,75 cm/s; manche Geräte arbeiten jedoch mit 4,76 oder 4,8 cm/ s (s. technische Unterlagen zum Gerät). Die Bandstärke ist abhängig von Typ und Länge des verwendeten Bandes, liegt zwischen einem und zwei Hundertstel Millimeter und wird vom Hersteller meistens nicht veröffentlicht. Das Übersetzungsverhältnis ist, wie schon erwähnt, in keiner Weise genormt; so findet man z.B. 1:1,2:1, 1:2, 1:3.5, 1:4.

Wollen Sie die vorliegende Formel anwenden, müssen Sie zuerst das Übersetzungsverhältnis Ihres Gerätes ermitteln. Bei gewöhnlichen Kassettendecks bietet sich folgende Vorgangsweise an: Nehmen Sie eine Kassette und markieren Sie einen beliebigen Zahn eines Zahnkranzes eines beliebigen Wickelkerns und legen Sie die Kassette so ein, daß der Kranz mit Markierung von der Achse angetrieben wird, an die auch das Zählwerk gekoppelt ist. Stellen Sie den Zähler auf Null und starten Sie die Wiedergabe. Verfolgen Sie nun die Markierung mit freiem Auge und stoppen Sie die Wiedergabe nach zehn Umdrehungen. Das Übersetzungsverhältnis bzw. die Anzahl der Umdrehungen/Zählereinheit beträgt dann 10:Zählerstand.

Die Bestimmung der Stärke eines Bandes ist etwas heikler, da hierbei äußerst präzise gearbeitet werden muß; ein gutes Auge ist vonnöten. Bestimmen Sie zunächst die Anzahl der Wicklungen, die sich auf einem vollen Wickelteller befinden.

Spulen Sie dazu das Band völlig zurück und stellen Sie den Zähler auf Null. Spulen Sie dann das Band völlig um. Die Anzahl der Wicklungen ist dann das Produkt von Zählerstand und Übersetzungsverhältnis; 60er-Kassetten haben ca. 800, 90er-Kassetten ca. 1200 Wicklungen. Legen Sie das Band anschließend auf eine helle Unterlage und messen Sie die Dicke der Bandschicht auf dem vollen Wickelteller (in cm) -wenn möglich - auf einen halben Millimeter genau; üblicherweise ergeben sich Werte um 1,5 cm. Die Bandstärke in cm ist dann der Quotient aus gemessener Schichtdicke und Anzahl der Wicklungen.

Das Programm ...

... wurde mit Pure C implementiert. Es bietet die Funktionen Band wählen, Bandmaschine wählen, Zählerstand umrechnen und Intervall berechnen (Restspielzeitbestimmung!). Bänder und Bandmaschinen müssen fest im Programm definiert werden. Das hat zwar den Nachteil, daß man, um z.B. ein neues Band zu definieren, das Programm verändern muß, andererseits aber erspart das die Implementation einer kompletten Stammdatenverwaltung mit Laden, Speichern, Löschen, Fehlermeldungen etc.

Neue Bänder oder Geräte können durch einfaches Anfügen an die bereits bestehenden Definitionen definiert werden. Die notwendigen Parameter müssen dabei in der Reihenfolge angegeben werden, in der sie in den Strukturen Tape und Machine definiert sind.

Im vorliegenden Programm sind bereits einige gängige Bänder definiert, so daß Sie sich das aufwendige Ausmessen Ihrer bevorzugten Bänder vielleicht ersparen können.

/*
REALTIME
Utility für Bandaufnahmen 
v1.00 vom 03.10.1990 
v2.00 vom 05.10.1990 
v2.01 vom 20.10.1990 
v2.02 vom 12.12.1991 
von Michael Marte 
(c) 1992 MAXON Computer 
*/

#include <stddef.h.>
#include <stdlib.h> 
#include <stdio.h> 
#include <ext.h>


/* Typendefinitionen */

typedef struct Machine MACHINE; 
typedef struct Tape TAPE;


/* Strukturdefinitionen */

struct Machine{ 
    char *name;

    float twd;
    /* Wickelkerndurchmesser in cm */ 

    float tv;
    /* Bandgeschwindigkeit in cm/s */ 

    float nrpcu;
    /* Laufwerk-Zähler-Übersetzungsverhältnis */

};

struct Tape{ 
    char *name;

    float td;
    /* Bandstärke in cm */
};


/* Variablen- und Konstantendefinitionen */

MACHINE machine[]={
    {"Technics RS-B505",2.2,4.8,2}
};

TAPE tape[]={
    {"BASF LH-EI 90",1.2981E-3},
    {"BASF CR-E II 90",1.2361E-3},
    {"FUJI JP-II 60",1.6564E-3},
    {"FUJI DR 90",1.2570E-3},
    {"MAXELL XL II-S 60",1.7359E-3},
    {"SONY HF 90",1.2372E-3},
    {"SONY UX-S 90a",1.2309E-3},
    {"SONY UX-S 90c",1.2700E-3},
    {"SONY UX-S 60c",1.7800E-3},
    {"TDK SA 90",1.1818E-3},
    {"TDK SA 90N",1.2302E-3},
    {"TDK SA 100",1.1391E-3},
    {"TDK SA-X 90",1.2404E-3},
    {"TDK D 90", 1.2404E-3},
    {"THAT'S VX 90",1.1785E-3}
};

const float pi=3.141592654;

const int nm=(int)(sizeof(machine)/sizeof(MACHINE));
/* Anzahl d. def. Geräte */

const int nt=(int)(sizeof(tape)/sizeof(TAPE));
/* Anzahl d. def. Bänder */

int miu=0;
/* aktuelles Gerät */ 

int tiu=0;
/* aktuelles Band */

/* Prototypen */
void convert_counter(void); 
void compute_interval(void); 
void select_tape(void); 
void select_machine(void);


float realtime(float c){
    float nr=c*machine[miu].nrpcu; 
    return (pi*nr*(tape[tiu].td*(nr-1)+machine[miu].twd))/machine[miu].tv;
}

main(){
    int choice;

    do{
        do{
            printf("\x1b\x45"
                    "REALTIME\n"
                    "Utility für Bandaufnahmen\n" 
                    "V2.02 vom 12.12.1991\n"
                    "(c)1990 by Michael Marte\n\n"
                    "1. Zählerstand umrechnen\n"
                    "2. Intervall berechnen\n"
                    "3. Band wählen (%s)\n"
                    "4. Gerät wählen (%s)\n"
                    "5. Ende\n\n"
                    "Bitte wählen Sie : ", 
                    tape[tiu].name,machine[miu].name); 
            scanf ("%d",&choice) ;
        }while(choice<1 || choice>5); 
        printf("\x1b\x45");

        switch(choice){
            case 1:convert_counter();break; 
            case 2:compute_interval_();break; 
            case 3:select_tape();break; 
            case 4:select_machine();break;
        }
    }while(choice!=5); 

    return 0;
}

void convert_counter(){ 
    int t; 
    float c;

    printf("Zählerstand relativ zum Bandbeginn:"); 
    scanf("%f",&c); 
    t=(int)realtime(c);
    printf("entspricht %d min %d sec\n",t/60,t%60);
    printf("\n<Taste>\n");(void)getch();
}

void compute_interval(){ 
    int t1,t2,t; 
    float c;

    printf("Zählerstand am Intervallanfang : "); 
    scanf("%f",&c); 
    t1=(int)realtime(c);
    printf("entspricht %d min %d sec\n",t1/60,t1%60);
    
    printf("Zählerstand am Intervallende : "); 
    scanf("%f",&c); 
    t2=(int)realtime(c);
    printf("entspricht %d min %d sec\n",t2/60,t2%60);

    t=t2-t1;
    printf("Das Intervall hat eine Länge von " 
           "%d min %d sec.\n", t/60, t%60);

    printf("\n<Taste>\n");(void)getch();
}


void select_tape(){ 
    int cnt;

    /* Definierte Bänder ausgeben */
    for(cnt=0;cnt<nt;cnt++)
        printf("%d. %s td=%f mm\n",cnt,tape[cnt].name,tape[cnt].td*10);

    /* Band wählen */ 
    do{
        printf("\nVerwendetes Band : "); 
        scanf("%d",&tiu);
    }while(tiu<0 || tiu>nt-1);

}

void select_machine(){ 
    int cnt;

    /* Definierte Geräte ausgeben */ 
    for(cnt=0;cnt<nm;cnt++)
        printf("%d. %s  twd=%.2f cm  tv=%.2f cm/s " 
               "nrpcu=%.2f r/Einheit\n", 
               cnt,machine[cnt].name, 
               machine[cnt].twd,
                machine[cnt].tv,machine[cnt].nrpcu);

    /* Gerät wählen */ 
    do{
        printf("\nVerwendetes Gerät : "); 
        scanf("%d",&miu);
    }while(miu<0 || miu>nm-1);

}

Michael Marte
Aus: ST-Computer 07 / 1992, Seite 90

Links

Copyright-Bestimmungen: siehe Über diese Seite