ich habe mir ein Audiorecorder-Include gebastelt, welches Töne aufnehmen und wiedergeben kann. Das läuft über das MCI. Das funktioniert auch schon. Das soll auch gleichzeitig noch eine Soundausgabe für nicht-DX-Programme werden.
Nun der Haken, der mir erst auffiel, als ich mir mit dem Include einen einfachen Soundrecorder machen wollte: Wenn man z.B. mit dem Mikro aufnimmt (meinetwegen auch eien andere Quelle oder Line-IN), hätte man gerne auch eine Balkenuhr mit Lautstärke drauf, damit man gut genug aussteuert.
Kann man irgendwie das aufgenommene während der MCI-Aufnahme mit "record" abgreifen und dafür auswerten?
Hatte mir sowas überlegt:
-Neben der eigentlichen Aufnahme zusätzlich immer kleine Happen von soundso vielen Millisekunden aufzeichnen.
-Diese Happen irgendwie aus dem Speicher fischen
-Den Ton gleichrichten (bzw. Vorzeichen killen) und einmal rms (=Arithmetisches Mittel?) und einmal peak (den größten Wert) ermitteln.
-Die Werte normieren und als Rückgabeparameter abliefern, damit man sein virtuelles Messinstrument daraus kreativ basteln kann.
Das ganze in eine Procedure stopfen. Nennen wir das Kind z.B. GetRecorderLevel()
Als bestimmzeitspanne hatte ich so an den Abschnitt zwischen dem dieshierigen und letzteren Aufruf von GetRecorderLevel() gedacht, damit kein Peak übersehen wird, weil die procedure zu wenig aufgerufen wurde.
Wie mache ich das konkret?
Wenn das bei MCI nicht geht, kann ich die Sampledaten aus dem Windows-Mixer irgendwie anzapfen?
Das Include hat folgende Struktur:
Code: Alles auswählen
InitRecorder() ;enthält die Tests, ob mci-Record zur Verfügung steht. Bisher ebenfalls auf Grund von Faulheit nicht vorhanden
a=CreateRecorder(#pb_any,44100,16,2) ;Recorder erstellen. Das mit dem #pb_any und sonst die Struktur ist analog zu z.B. CreateSprite(). Die Parameter sind die bekannten Eckdaten einer .wav.
StartRecorder(a) ;Aufnahme starten
;Hier müsste zur Perfektion die Dezibel-Uhr (wie heißt so ein Ding eigentlich??) angesteuert werden. Also irgendwas mit Startdrawing() auf irgendeinem Fenster-wie-auch-immer und der oben erklärten bisher fehlenden Funktion.
StopRecorder(a) ;Aufnahme stoppen
SetRecorderPos(a,0) ;Zurückspulen
PlayRecorder(a) ;Nochmal hören
SaveRecorder(a,"test.wav") ;Und abspeichern
FreeRecorder(a); und nun in Müll damit
;recorder is putt! :-(
lg