Klangfarbe mit Sinus
FramegrabberMit 44 Zeilen C haben wir den Meister glücklich gemacht. Eingangs wollte er von uns Zettel sehen, die wohl in der Anleitung gefragt sind, z.B. einen Programmablauf. Er notierte sich keine Namen.
#include <stdio.h>
#include <math.h>
const int a1=16000,a2=0,a3=0,a4=0,a5=0,a6=0; // Ampliuden. Summe ca. 16000.
const float pl1=0,pl2=0,pl3=0,pl4=0,pl5=0,pl6=0;//Phi linker Kanal in Bogenmass
const float pr1=1,pr2=0,pr3=0,pr4=0,pr5=-1,pr6=0;//Phi rechter Kanal
double typ(double sinus,int form) //Kurvenform
{
if (form==3) return(asin(sinus)); else if (form==2)
{ if (sinus==0) return (0); if (sinus<0) return (-1); else return (1); }
else return(sinus);
}
void main()
{
double s; // Stelle in t-Richtung
int links,rechts,freq,form;
FILE *datei;
char header[44] = { 0x52,0x49,0x46,0x46,
0x54,0x98,0x69,0x0,0x57,0x41,0x56,0x45,0x66,0x6D,0x74,0x20,
0x10,0,0,0,1,0,2,0,0x44,0xAC,0,0,0x10,0xB1,2,0,4,0,0x10,0,
0x64,0x61,0x74,0x61,0xEC,0x97,0x69,0 };
printf("\n\n Welche Frequenz soll der Grundton haben? [Hz]:");
scanf("%d",&freq);// Frequenz abfragen
printf("\n\n Welche Form? 1)Sinus, 2)Rechteck, 3) Dreieck:");
scanf("%d",&form);// Kurvenform abfragen
datei=fopen("sienus.wav","wb");//oeffne/erstelle Datei
fwrite( &header, 1, 44, datei);// Header schreiben
for (s=0;s<freq*62.8318530;s+=0.000142475*freq)
{
links=(int) a1*typ(sin(s+pl1),form)+a2*sin((s+pl2)*2)+ //linken Kanal berechnen
a3*sin((s+pl3)*3)+ a4*sin((s+pl4)*4)+a5*sin((s+pl5)*5)+ a6*sin((s+pl6)*6);
rechts=(int) a1*typ(sin(s+pr1),form)+a2*sin((s+pr2)*2)+ //rechten Kanal berechnen
a3*sin((s+pr3)*3)+ a4*sin((s+pr4)*4)+a5*sin((s+pr5)*5)+ a6*sin((s+pr6)*6);
fwrite( &links, 1, 2, datei);
fwrite( &rechts, 1, 2, datei);
}
fclose(datei);
}
Der MRT-Versuch mit dem Framegrabber
war sehr leger. Ein netter Typ mit zuckendem Auge quatschte mit uns stundenlang über die gute alte Zeit damals. Wissen mußte man nicht unbedingt etwas.
Dann setzte er uns an eine vorsinnflutliche Maschine, wie man sie von Oma aus der Garage kennt. Da sich das Pampfleth mal wieder mit klaren Informationen bedeckt hält, schrieben wir nur das, was er uns vorbetete. Leider diktierte er sehr langsam, so daß die Action ewig dauerte.
Damit Ihr es besser habt, hier das laufende Programm:
//----------------------------------------------------------------------------
// STUD.C
//
// Hauptprogramm zum Praktikumsversuch 'Grabberkarte'
//
//----------------------------------------------------------------------------
#include // random
#include // kbhit, getch, outp
#include
#include // MK_FP, outportb
#include // malloc, farmalloc
#include "stud.h"
// function prototypes
void ofg_Grabber2Pc(char huge *picture);
//------------------------------------------------------
// Copy OFG image to PC memory
//---------------------------
void ofg_Grabber2Pc(char huge *picture)
{
//...
}
//------------------------------------------------------
// Main program
//---------------------------
int main(){
unsigned char hilf; // Fuer Kleinigkeiten
unsigned int x, y; // Zaehler der Ausleseschleifen
// ---------------------------
// Init OFG and variables
// ---------------------------
if (init()>0) goto main_end;
//fuellen der lut
outportb(ILutAddr,0);
for (hilf=0;hilf < 255; hilf++) outportb(ILutData,hilf);
hilf = inportb(AcqCtrl);
outportb(AcqCtrl,hilf | 192); // Grab einschalten
getch();
outportb(AcqCtrl,hilf & 63); // Freeze
outportb(AcqCtrl,(hilf & 63) | 128); // Snap
hilf = inportb(PointCtrl); // Auslesen vorbereiten
hilf = hilf | 7;
outportb(PointCtrl,hilf);
for (y=0;y<199;y++)
{
// Das naechste gefragte Pixel ist bei (0;y).
outport(XPointL,0); outport(YPointL,y);
for (x=0;x<319;x++) screen[x+y*320]=inportb(DataPortL);
}
blit(screen); // Bild malen.
main_end:
printf("Taste..."); getch();
return(0);
}
Die paar fetten Zeilen abtippen, Meister rufen, nach Hause gehen.
edit: (04.07.06 von selinaz)
schaut euch mal an, zu was die LUT gut ist, bei uns hat er 15min drauf rumgeritten
bis endlich worte wie treppenfunktion etc fielen. ansonsten ist der herr sehr nett und macht das recht locker,
redet halt nen bissl über gott und die welt mit euch. wir durften alle unterlagen verwenden
er fragt so ziemlich alles was im vorbereitungsskript drin steht, also mal durchlesen.
ansonsten technischen aufbau der grabberkarte anschauen.
alles im allem, gut machbar.