VB 5/6-Tipp 0127: Wav Dateien von Mikro und CD aufnehmen
von ActiveVB
Beschreibung
Und wieder ein paar weitere Funktionen des Tausendsassas mciSendString. Dieser Tip zeigt wie recht unkompliziert wav Dateien beliebigen Ursprungs aufgenommen werden können. Allerdings ließ bei mir die Aufnahmequalität sehr zu wünschen übrig. Vermutlich liegt dies an irgendeiner voreingestellten Sampling-Rate. Vielleicht hat jemand einen Tip wie sich die Sampling-Rate per Programm einstellen läßt.
Schwierigkeitsgrad: | Verwendete API-Aufrufe: | Download: |
'Dieser Quellcode stammt von http://www.activevb.de 'und kann frei verwendet werden. Für eventuelle Schäden 'wird nicht gehaftet. 'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. 'Ansonsten viel Spaß und Erfolg mit diesem Source! '------------- Anfang Projektdatei Project1.vbp ------------- '--------- Anfang Formular "Form1" alias Form1.frm --------- ' Steuerelement: Schaltfläche "Command1" ' Steuerelement: Schaltfläche "Command2" ' Steuerelement: Schaltfläche "Command3" ' Steuerelement: Schaltfläche "Command4" Option Explicit Private Declare Function mciSendString Lib "winmm.dll" Alias _ "mciSendStringA" (ByVal lpstrCommand As String, _ ByVal lpstrReturnString As String, ByVal uReturnLength _ As Long, ByVal hwndCallback As Long) As Long Private Declare Function PlaySound Lib "winmm.dll" Alias _ "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal _ uFlags As Long) As Long Const Path$ = "c:\Test.wav" Dim RS$, CB& Private Sub Command1_Click() If Dir$(Path, vbNormal) <> "" Then Kill Path RS = Space$(128) Call mciSendString("open new type waveaudio alias capture", _ RS, 128, CB) Call mciSendString("record capture", RS, 128, CB) Command1.Enabled = False Command2.Enabled = True Command3.Enabled = True Command4.Enabled = False End Sub Private Sub Command2_Click() If Command2.Caption = "Aufnahme Pause" Then Call mciSendString("pause capture", RS, 128, CB) Command2.Caption = "Aufnahme Weiter" Command1.Enabled = False Command3.Enabled = False Command4.Enabled = False Else Call mciSendString("record capture", RS, 128, CB) Command2.Caption = "Aufnahme Pause" Command1.Enabled = False Command3.Enabled = True Command4.Enabled = False End If End Sub Private Sub Command3_Click() RS = Space$(128) Call mciSendString("stop capture", RS, 128, CB) Call mciSendString("save capture " & Path, RS, 128, CB) Call mciSendString("close capture", RS, 128, CB) Command1.Enabled = True Command2.Enabled = False Command3.Enabled = False Command4.Enabled = True End Sub Private Sub Command4_Click() Call PlaySound(Path, 0) Command1.Enabled = True Command2.Enabled = False Command3.Enabled = False End Sub '---------- Ende Formular "Form1" alias Form1.frm ---------- '-------------- Ende Projektdatei Project1.vbp --------------
Tipp-Kompatibilität:
Windows/VB-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.
Archivierte Nutzerkommentare
Klicken Sie diesen Text an, wenn Sie die 13 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.
Kommentar von Bernd Lindemann am 13.12.2008 um 10:27
Sie fragen nech der Einstellung der Abtastrate per Programm. Bei mir funktioniert der folgende Zusatz nach dem "open":
Call mciSendString("open new type waveaudio alias capture", RS, 128, CB)
Call mciSendString("set capture samplespersec 44100", 0&, 0, 0) ' <-- <-- <-- works
Form4a.Caption = " SR 44100"
DoEvents
Call mciSendString("record capture", RS, 128, CB)
Kommentar von Leo am 17.06.2008 um 07:49
Hallo Leute,
Alle angesprochenen Probleme können mit folgendem Code gelöst werden:
http://www.vbarchiv.net/tipps/details.php?id=1216
viel Spaß beim Programmieren
Leo
Kommentar von Guest am 23.11.2007 um 14:26
Danke für diesen klasse Tipp!
Da ich noch ein Anfänger bin, mache ich mich
hier wahrscheinlich lächerlich ;-)
Trotzdem möchte ich etwas hinzfügen:
Als ich den Code in Visual Basic Express 2005
ausführen wollte, erschien eine Fehlermeldung.
Ich habe mich erkundigt, wieso der Code
nicht korrekt lief, und konnte die Audio-Aufnahme / Wiedergabe dann folgendermassen fehlerfrei durchführen:
Anstatt LONG zu verwenden, muss man in Visual Basic 2005
.net INTEGER verwenden.
Grüsse
Kommentar von Flo am 19.08.2007 um 11:57
Ich finde das Beispiel super, allerdings
schreibt man abspielen mit B!
Kommentar von GESIA am 11.11.2004 um 14:22
Also hier nochmal zusammengefasst, wie man die Qualität einstellen kann:
Folgende Zeile muss nach dem OPEN und vor dem RECORD eingefügt werden:
[code]mciSendString "SET CAPTURE TIME FORMAT MILLISECONDS BITSPERSAMPLE " & bits & " SAMPLESPERSEC " & samples & " CHANNELS " & c & " BYTESPERSEC " & bytes & " ALIGNMENT 4", RS, 128, CB[code]
Dabei sind das Kleingedruckte Variablen, die wie folgt belegt werden können/müssen:
bits = 8 oder 16
samples = 8000 oder 11000 oder 16000 oder 22050 oder 44100 oder 48000
c = 1 oder 2
bytes = (bits * samples * c) / 8
GESIA
PS: Das Rauschen kommt höchstwahrscheinlich direkt vom Mikro. Versuch' mal, die Eingangslautstärke des Mikros zu verringern.
Kommentar von Michi Maier am 01.10.2003 um 13:00
Kann man die Qualität noch irgendwo ändern. Ansonsten ist das Programm echt spitze, nur halt dieses Rauschen im Hintergrund. Ich hoffe die kann geändert werden.
Danke
Kommentar von Rainer Nagel am 12.02.2003 um 13:53
Versuchen Sie mal nachstehende Variante. Damit ist man zumindest das Problem mit dem schlechten Mono-Sound los. Leider spielt das Multimedia-Steuerelement die damit erzeugte WAV.Datei mit falscher Zeitermittlung (Track-Length) ab. Keine Ahnung, woran das liegen könnte. Somit leider immer
noch keine hundertprozentige Lösung.
Hier nun der Quelltext zum Aufnahmestart:
bitspers = "16"
mon_ster = "2"
samples_per_sec = "44100"
mciSendString "OPEN NEW TYPE WAVEAUDIO ALIAS mysound", "", 0, handle
aufn$ = "SET mysound TIME FORMAT MILLISECONDS BITSPERSAMPLE " + bitspers + " CHANNELS " + mon_ster + " SAMPLESPERSEC " + samples_per_sec + " BYTESPERSEC " + samples_per_sec
mciSendString aufn$, "", 0, handle
mciSendString "RECORD mysound", "", 0, handle
Kommentar von Christoph am 01.09.2002 um 14:59
Um die Soundqualität zu verbessern ist es nötig, den Windows Media Player zu Deinstallieren !
Kommentar von Stephan am 25.10.2001 um 19:42
Hi!
so ich habs raus bekoomen wie man die klang-qualität einstellt!
Tipp:
mciSendStringA("Set capture time format ms bitspersample 16 channels 2 samplespersec 48000 bytespersec 192000 alignment 4",NIL,0,")
Ich hoffe das es bei euch klappt!!!!
Gruß Stephan
(programmiere in Xbase++)
Kommentar von hc am 21.03.2001 um 07:21
Hallo
Kann man die Klangqualität der WAV-Aufnahme nicht besser einstelle?
Kommentar von Horst am 15.01.2001 um 14:35
Einstellen der Aufnahmeparameter(einfügen vor Call mciSendString("record capture...):
Call mciSendString("set capture time format ms bitspersample 16 channels 2 samplespersec 44100", RS, 1024, 0)
siehe:
http://msdn.microsoft.com/library/psdk/multimed/mmcmdstr_8eyc.htm
Kommentar von Bruno Tuchscherer am 27.10.2000 um 14:30
Kann man mit VB die Soundkarte so programmieren, daß sie eine Datei wiedergibt und gleichzeitig auf einer anderen Spur aufnimmt zusammen mit dem Mikrofon-Eingang?
Kommentar von Anonymus am 07.10.2000 um 19:45
Bei"call sndPlaysound" unter Commnand4_Click
Kommt die FehlerMeldung Sub oder Funktion nicht definiert (Kein Wunder , wurde ja auch nicht definiert