Beruflich Dokumente
Kultur Dokumente
E V A
Was ist eine Soundkarte? (1)
• Die erste Sound Blaster für IBM-PCs wurde von
Creative Labs bereits 1989 eingeführt.
http://scitsc.wlv.ac.uk/~e9567075/CP2014/Scards.htm
DOS-Treiber verfügbar.
• Ursprünglich häufigster Einsatzbereich:
Aufpeppen von PC-Spielen durch Sound-Effekte.
Daher der Game-Port auf jeder Soundkarte.
• Außerdem Wiedergabe von Audio-CDs. Daher
früher oft Anschluß für diverse CD-ROM-
Laufwerke vorhanden.
Selten benutzt, aber Standard: Eingänge
Was ist eine Soundkarte? (2)
Analoge Eingänge: Analoge Ausgänge
• Line • [Line]
• Mikrofon • Kopfhörer
• Audio-CD • [Lautsprecher]
• und Botschaften
versandt
Samplen und Darstellen (2)
function TForm1.AudioIn1BufferFilled(Buffer: PChar;
var Size: Integer): Boolean;
var SP : ^SmallInt;
i, N, v, xMin, xMax : Integer;
begin
N := Size div 2; // sizeof(smallint) = 2
SP := Pointer(Buffer);
xMin := SP^; (aus dem Beispiel des Autors)
xMax := xMin;
for i := 0 to N-1 do Diese Methode ermittelt
begin jedesmal, wenn der Puffer
v := SP^; Inc(SP); gefüllt wurde, den
if xMin > v then xMin := v;
if xMax < v then xMax := v; Maximalwert, der in dieser
end; Zeitspanne auftrat.
if Min > xMin then Min := xMin;
if Max < xMax then Max := xMax;
TempMax := xMax;
if Abs(xMin) > xMax then TempMax := Abs(xMin);
Result := TRUE;
end;
Samplen und Darstellen (3)
Allein durch Ereignissteuerung wird die Hardware
natürlich nicht schneller. (Eher im Gegenteil!)
Aber:
• Das Übertragen der Meßwerte vom Eingabeport
in den Puffer erfolgt jetzt durch DMA (Direct
Memory Access) ohne Beanspruchung der CPU.
• Die Bedingung
„Verarbeitungszeit < Meßintervall“ gilt jetzt
nicht für einen Meßwert, sondern gemittelt für N
Meßwerte, wobei N die Puffergröße ist.
Samplen und Darstellen (4)
function TForm1.AudioIn1BufferFilled(Buffer: PChar;
var Size: Integer): Boolean;
type puffer = array[0..1023] of SmallInt;
var zeiger : ^puffer;
i, x, N : Integer;
begin
N := Size Div 2;
zeiger := Pointer(Buffer);
i := 0; // zeigt in den Puffer
x := 0; // zeigt auf den Oszi-Schirm
PaintBox1.Canvas.MoveTo(x,128+zeiger^[i] div 256);
while i < N do
begin
PaintBox1.Canvas.LineTo(x,128+zeiger^[i] div 256);
inc(i);
inc(x);
Hier haben wir bereits einen vollständigen
end; Oszillographen.
Result := TRUE; Es fehlen lediglich noch Anweisungen zum
end;
Löschen des vorhergehenden Bildschirms und
Algorithmen zur Triggerung.
Samplen und Darstellen (5)
function TForm1.AudioIn1BufferFilled(Buffer: PChar; var Size: Integer): Boolean;
var SP : ^Byte; i, N, v : Integer;
const f = 5;
begin
N := Size;
SP := Pointer(Buffer);
with Canvas do FillRect(ClientRect);
Canvas.Pen.Color := clLime; // zeichne links das Ende von letztem Puffer
Canvas.MoveTo(0,128+f*(rechts[0]-128));
for i := 0 to 255 do Vertrauen Sie fremden Puffern?
Canvas.LineTo(i,128+f*(rechts[i]-128));
Canvas.Pen.Color := clRed; // zeichne rechts den Anfang von neuem Puffer
v := SP^; Inc(SP);
for i := 0 to 255 do Visuelle Prüfung, ob das Ende des
begin vorausgehenden Puffers mit dem
v := SP^; Inc(SP);
Canvas.LineTo(256+i,128+f*(v-128));
Anfang des folgenden Puffers „stetig“
end; fortgesetzt wird.
SP := Pointer(Buffer); // kopiere das Ende von neuem Puffer
Inc(SP,N-256); // in ein temporäres Array
for i := 0 to 255 do //
begin
rechts[i] := SP^; Inc(SP);
end;
Result := TRUE;
end;
Samplen und Darstellen (6)
function TMiniOszi.AudioIn1BufferFilled(Buffer: PChar;
var Size: Integer): Boolean;
var i, N, v : integer;
SP : ^SmallInt;
begin
Chart1.Series[0].Clear;
N := Size div 2; SP := Pointer(Buffer);
for i := 0 to N-1 dDo
begin
v := SP^; Inc(SP);
Chart1.Series[0].AddXY(i, v, '', clBlack)
end;
result := true;
end;
Wer sich die Arbeit mit dem Canvas sparen will, kann einfach
die in Delphi enthaltene TChart-Komponente benutzen.
Samplen und Darstellen (7)
Beispiel für einen „Freihandversuch“ mit der Soundkarte:
Zur Zeit der altmodischen (nichtelektronischen) Telefonapparate gab es
Induktionsspulen mit Saugfuß, um eigene Telefongespräche auf dem
Cassettenrecorder mitzuschneiden. Diese haben bereits den für die
Soundkarte benötigten 3,5mm-Stecker.
Falls kein Telefonadapter
zur Hand, genügt auch eine
3000-Wdg-Spule aus der
Physik-Sammlung mit
einem entsprechenden
Übergangskabel.
Wenn man einen kleinen
Magneten an dieser
Induktionsspule
vorbeiführt, ergibt sich
das nebenstehende Bild.
Erfassen und Auswerten (1)
Aufgabenbeispiel:
Es sollen Ereignisse gezählt werden, die durch
folgende Eigenschaften spezifiziert sind:
• Ein Ereignis hat eine bestimmte
Mindestamplitude
• Zwei Ereignisse werden durch eine Pause
von einer bestimmten Mindestdauer
unterbrochen, in der die Mindestamplitude
nicht erreicht wird.
Erfassen und Auswerten (1a)
Impulse sehen in der Realität meist
Zur Definition
eines Impulses nicht so aus wie einem die
Literatur es weismachen will.
Abstand
Schwelle
• und Botschaften
versandt
Direkte Ausgabe (2)
function TForm1.AudioOut1FillBuffer(Buffer: PChar;
var Size: Integer): Boolean;
var P : ^SmallInt;
I, tp, N : Integer;
const Freq = 440;
begin
Ton mit konstanter Frequenz 440 Hz
N := Size div 2;
P := Pointer(Buffer);
for i := 0 to N-1 do
begin
tp := N*AudioOut1.FilledBuffers+i;
P^ := Round(MaxShort*Sin(2*pi*tp*Freq/AudioOut1.FrameRate));
Inc(p);
end;
Result := TRUE;
end; Beim Start werden zunächst alle 4 Puffer mit
Daten gefüllt. Erst dann wird mit der Ausgabe
begonnen. Sobald ein Puffer abgearbeitet ist,
fordert er neue Daten an. In der Zwischenzeit
wird erst mal der nächste Puffer abgearbeitet.
Direkte Ausgabe (2a)
Je nach Qualität von Sound-
karte, Endstufe und
Belastung
SINUS
DREIECK
sind die
Resultate mehr SÄGEZAHN
oder weniger zufrieden- RECHTECK
stellend.
Direkte Ausgabe (3)
function TForm1.AudioOut1FillBuffer(Buffer: PChar;
var Size: Integer): Boolean;
var P : ^SmallInt;
I, tp, N : Integer;
begin
Label1.Caption := Format('Frequenz: %8.1f Hz',[freq]);
N := Size div 2;
P := Pointer(Buffer); Anfangsfrequenz muß vorher
for i := 0 to N-1 do
begin
festgelegt worden sein.
tp := N*AudioOut1.FilledBuffers+i;
P^ := Round(MaxShort*Sin(2*pi*tp*freq/AudioOut1.FrameRate));
Inc(p);
freq := freq*1.000001; Ton mit ansteigender Frequenz
end;
Result := freq < 20000.0; // stop, wenn 20 kHz erreicht
end;
http://www.physik.uni-marburg.de/didact/mnu/mr2001.html
soundkarte%klaushilf@mailings.gmx.de