Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Die Soundkarte im Informatikunterricht © 2001 Klaus J. Koch, Marburg

Ähnliche Präsentationen


Präsentation zum Thema: "Die Soundkarte im Informatikunterricht © 2001 Klaus J. Koch, Marburg"—  Präsentation transkript:

1 Die Soundkarte im Informatikunterricht © 2001 Klaus J. Koch, Marburg
Was ist eine Soundkarte? Verwendung als Analog-I/O in der Schule Vorbereitungen, Programmierung in Delphi Samplen und Darstellen Erfassen und Auswerten Erzeugen und Wiedergeben einer Datei Direkte Ausgabe Weitere Informationsquellen, Diskussion Deutscher Verein zur Förderung des mathematischen und naturwissenschaftlichen Unterrichts Landesverband Hessen, 30. Hessische Landestagung, 5. September 2001 in Marburg, 14:30 Uhr, HS 113

2

3 Didaktische Begründung
Siehe entsprechende Beiträge aus den 80er Jahren Hohe Motivation bei Schülern (und Lehrern) überzeugende Demonstration des EVA-Prinzips E V A

4 Was ist eine Soundkarte? (1)
Die erste Sound Blaster für IBM-PCs wurde von Creative Labs bereits 1989 eingeführt. 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

5 Was ist eine Soundkarte? (2)
Analoge Eingänge: Line Mikrofon Audio-CD Analoge Ausgänge [Line] Kopfhörer [Lautsprecher] Zusätzliche Optionen wie digitale Ein-/Ausgänge, Wavetable, MIDI etc. werden hier nicht behandelt.

6 Was ist eine Soundkarte? (3)
Einige zusätzliche technische Angaben: der Mikrofon-Eingang unterstützt i.a. nur ein Mono-Mikrofon. Auf dem für den zweiten Kanal vorgesehenen Stift liegt oft eine Hilfsspannung (1,5 - 5 V) für Mikrofonvorverstärker. Der ist meist auch erforderlich! Falls kein Lautsprecher-Anschluß vorhanden ist, können an den Line- oder Kopfhörer-Ausgang auch Kleinlautsprecher mit W angeschlossen werden. An dem GAME-Anschluß liegt u.a. eine Spannung von 5 V. Achtung: Dieser Anschluß ist i.a. nicht abgesichert!

7 Verwendung als Analog-I/O in der Schule
Vorteile: durch Treiber ins Betriebssystem eingebunden, keine Peeks und Pokes hohe Auflösung: 16 Bit hohe Geschwindigkeit: Samples/s 2 Kanäle Oft ohne Aufpreis enthalten (Notebook) Nachteile: nur für Wechselspannungen ab ca. 20 Hertz für manche Zwecke zu langsam Eingangsempfindlichkeit (modellabhängig) oft zu niedrig

8 Vorbereitungen, Programmierung in Delphi
Einbau und Installation einer Soundkarte (falls noch nicht erfolgt. Gedenket der Interrupts und DMAs!) Beschaffen einer geeigneten Delphi-Komponente (Empfohlen: AudioIO.ZIP* von John Mertus, weil mit Sourcen, verwendbar ab Delphi 2!) und Installation *) zu finden auf:

9 Alternativen zur eigenen Programmierung
Verwendung separater Programme zur Kommunikation mit der Soundkarte (Schreiben der erfassten Daten in eine Datei bzw. Ausgabe einer Datei an die Soundkarte), z.B. Cooledit, Goldwave, etc. zur Datenmanipulation, Auswertung, Aufbereitung und Darstellung mit Tabellenkalkulationsprogramm, z.B. Excel

10 Konventionelle Programmierung ohne Ereignissteuerung
Start Konventionelle Programmierung ohne Ereignissteuerung { (time ist die Systemzeit) T=time V=input V speichern, anzeigen, verarbeiten Die Meßwerte sind in konstanten Zeitabständen zu erfassen. Daher muß sichergestellt werden, daß die Anweisungen in der Schleife innerhalb des Zeitintervalls dt abgearbeitet werden können. T=T+dt time<T? ja Stop (Abfrage für Stop fehlt noch)

11 Samplen und Darstellen (1)
Vergessen Sie Peeks und Pokes Unter Windows werden Ressourcen bereitgestellt Die Puffergröße unterliegt den üblichen Systembegrenzungen. Mono, 16 Bit, Samples/s, Size=1MByte ergibt 22,67 Sekunden. und Botschaften versandt

12 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^; xMax := xMin; for i := 0 to N-1 do v := SP^; Inc(SP); if xMin > v then xMin := v; if xMax < v then xMax := v; end; if Min > xMin then Min := xMin; if Max < xMax then Max := xMax; TempMax := xMax; if Abs(xMin) > xMax then TempMax := Abs(xMin); Result := TRUE; (aus dem Beispiel des Autors) Diese Methode ermittelt jedesmal, wenn der Puffer gefüllt wurde, den Maximalwert, der in dieser Zeitspanne auftrat.

13 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.

14 Samplen und Darstellen (4)
function TForm1.AudioIn1BufferFilled(Buffer: PChar; var Size: Integer): Boolean; type puffer = array[ ] 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 PaintBox1.Canvas.LineTo(x,128+zeiger^[i] div 256); inc(i); inc(x); end; Result := TRUE; Hier haben wir bereits einen vollständigen Oszillographen. Es fehlen lediglich noch Anweisungen zum Löschen des vorhergehenden Bildschirms und Algorithmen zur Triggerung.

15 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 Canvas.LineTo(i,128+f*(rechts[i]-128)); Canvas.Pen.Color := clRed; // zeichne rechts den Anfang von neuem Puffer v := SP^; Inc(SP); Canvas.LineTo(256+i,128+f*(v-128)); end; SP := Pointer(Buffer); // kopiere das Ende von neuem Puffer Inc(SP,N-256); // in ein temporäres Array for i := 0 to 255 do // rechts[i] := SP^; Inc(SP); Result := TRUE; Vertrauen Sie fremden Puffern? Visuelle Prüfung, ob das Ende des vorausgehenden Puffers mit dem Anfang des folgenden Puffers „stetig“ fortgesetzt wird.

16 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 v := SP^; Inc(SP); Chart1.Series[0].AddXY(i, v, '', clBlack) end; result := true; Wer sich die Arbeit mit dem Canvas sparen will, kann einfach die in Delphi enthaltene TChart-Komponente benutzen.

17 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.

18 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.

19 Erfassen und Auswerten (1a)
Impulse sehen in der Realität meist nicht so aus wie einem die Literatur es weismachen will. Zur Definition eines Impulses Abstand Schwelle Die Festlegungen von Schwelle und Abstand sind mehr oder weniger willkürlich.

20 Erfassen und Auswerten (2)
function TForm1.AudioIn1BufferFilled(Buffer: PChar; var Size: Integer): Boolean; var SP : ^SmallInt; i, N, v : Integer; begin N := Size div 2; SP := Pointer(Buffer); for i := 0 to N-1 do v := SP^; Inc(SP); t := pz*N+i; case zustand of BinInPause : WarteAufEreignis; WarteAufPause : WarteAufEreignisEnde; end; inc(pz); Result := TRUE; procedure WarteAufEreignis; begin if abs(v) > MindestAmpl then zustand := WarteAufPause; Shape1.Brush.Color := clRed; inc(zaehler); Label1.Caption := IntToStr(zaehler); tEvent := t; end; procedure WarteAufEreignisEnde; begin if abs(v) > MindestAmpl then tEvent := t; if t - tEvent > PausenDauer then zustand := BinInPause; Shape1.Brush.Color := clGreen; end;

21 Erfassen und Auswerten (3)
Viele akustische Signale, z.B. Musikinstrumente, werden sinnvollerweise in der Frequenzverteilung analysiert. Um dies während der Erfassung durchzuführen, ist die konventionelle diskrete Fourieranalyse zu langsam. Erst mit der Fast-Fourier-Analyse kann in Echtzeit ausgewertet werden. Die zugrundeliegenden Algorithmen sind jedoch i.a. für die Behandlung in der Schule zu komplex.

22 Erzeugen und Wiedergeben einer Datei
Für das programmgesteuerte Abspielen einer Sound-Datei gibt es mehrere Möglichkeiten: Unit MMSystem: SndPlaySound('Clock.wav',0) Unit Classes: TMemoryStream Komponente TMediaPlayer: MediaPlayer1.Filename := 'Clock.wav'; MediaPlayer1. Open; MediaPlayer1. Play;

23 Aufbau von Dateien im WAV-Format
Alle bisherigen Versuche zum effektiven und verlustfreien Komprimieren von Audio-Dateien müssen als gescheitert betrachtet werden. (MP3 ist hochkompliziert und nicht verlustfrei!) Nur so ist es zu erklären, daß das unkomprimierte Windows-Format *.WAV (genauso wie das entsprechenden Graphik-Format *.BMP) nach wie vor so weit verbreitet ist. Die Analyse des Aufbaus gelingt durch Vergleich einiger Audio-Dateien:

24 Direkte Ausgabe (1) Vergessen Sie Peeks und Pokes
Unter Windows werden Ressourcen bereitgestellt und Botschaften versandt

25 Direkte Ausgabe (2) Ton mit konstanter Frequenz 440 Hz
function TForm1.AudioOut1FillBuffer(Buffer: PChar; var Size: Integer): Boolean; var P : ^SmallInt; I, tp, N : Integer; const Freq = 440; begin N := Size div 2; P := Pointer(Buffer); for i := 0 to N-1 do tp := N*AudioOut1.FilledBuffers+i; P^ := Round(MaxShort*Sin(2*pi*tp*Freq/AudioOut1.FrameRate)); Inc(p); end; Result := TRUE; Ton mit konstanter Frequenz 440 Hz 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.

26 Direkte Ausgabe (2a) Je nach Qualität von Sound-
karte, Endstufe und Belastung SINUS DREIECK sind die Resultate mehr oder weniger zufrieden- stellend. SÄGEZAHN RECHTECK

27 Direkte Ausgabe (3) Anfangsfrequenz muß vorher festgelegt worden sein.
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); for i := 0 to N-1 do tp := N*AudioOut1.FilledBuffers+i; P^ := Round(MaxShort*Sin(2*pi*tp*freq/AudioOut1.FrameRate)); Inc(p); freq := freq* ; end; Result := freq < ; // stop, wenn 20 kHz erreicht Anfangsfrequenz muß vorher festgelegt worden sein. Ton mit ansteigender Frequenz Diese Methode sollte einen gleichmäßig ansteigenden Ton erzeugen. Klingt aber merkwürdig ...

28 Direkte Ausgabe (4) function TForm1.AudioOut1FillBuffer(Buffer: PChar; var Size: Integer): Boolean; var P : ^SmallInt; I, tp, N : Integer; fneu : extended; begin Label1.Caption := Format('Frequenz: %8.1f Hz',[freq]); N := Size div 2; P := Pointer(Buffer); for i := 0 to N-1 do inc(sample); tp := N*AudioOut1.FilledBuffers+i; P^ := Round(MaxShort*Sin(2*pi*tp*freq/AudioOut1.FrameRate+phase)); Inc(p); fneu := freq* ; phase := 2*pi*tp/AudioOut1.FrameRate*(freq-fneu)+phase; freq := fneu; end; Result := freq < ; // stop, wenn 20 kHz erreicht Erst mit einer Phasenkorrektur ergibt sich das gewünschte Ergebnis.

29 Direkte Ausgabe (5) Beispiel für akustische Täuschungen:
Ein Klang, der aus drei Teiltönen besteht; deren Tonhöhe fortlaufend ansteigt. Erreicht ein Ton die obere Frequenzgrenze, so wird sie auf die unter Frequenzgrenze zurückgesetzt, um erneut anzusteigen. Damit dieser Vorgang unkenntlich gemacht wird, wird die Amplitude der Teiltöne an den Frequenzgrenzen auf Null abgesenkt. (nach R. Shepard)

30 Weitere Informationsquellen (1)
W. Stein: Versuche mit der Soundkarte. Aus der Klett-Buchreihe Impulse Physik. ISBN F. Bönsel (Ober-Ramstadt): Schallwellen mit der PC-Soundkarte vermessen. Vortrag auf der 26. MNU-Landestagung am in Darmstadt S. Schaal, G. Braune: Physik lernen am Fahrrad. Gert Braune (Humboldt-Schule Kiel/IPN): Fachübergreifende Unterrichtsprojekte mit der Soundkarte. Vortrag auf der 47. MNU-Tagung in Bremerhaven am Versuchsanleitungen der TU München.

31 Weitere Informationsquellen (2)
Using a sound card in QBasic. FreeVIEW sound Gymnasium Korschenbroich: Messung der Schallgeschwindigkeit mit einer Soundkarte. Messungen zum freien Fall mit der Soundkarte. Eine Messung zum Dopplereffekt. Akustische Täuschungen

32 Diskussion Das vorgestellte Material ist abrufbar unter:
Fortführung der Diskussion in Form einer öffentlichen Mailingliste. an:


Herunterladen ppt "Die Soundkarte im Informatikunterricht © 2001 Klaus J. Koch, Marburg"

Ähnliche Präsentationen


Google-Anzeigen