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);
}