| |
|
|
CB | Hi,
Folgendes Problem: In mein Gutachten-Programm möchte ich ein Diktafon-Modul einbauen, das eine (Mono-)WAV-Datei erzeugt. Diese WAV soll in weiterer Folge einer Spracherkennungssoftware zugeführt werden können.
Habe mir zu Versuchszwecken ein simples Testprogramm gebastelt. Aufnahme einer Wav-Datei mit Profan mittels @MCISend$(record test to 10000) für 10 Sekunden Dauer, Datei speichern als Test.wav. Das Auslesen der Dateilänge mittels @MCISend$(status PlayWave length) zeigt exakt 10000 (Millisekunden).
Aber @MCISend$(record test) und Aufnahme manuell stoppen, Datei speichern als Test.wav und das Auslesen der Dateilänge mittels @MCISend$(status PlayWave length) bringt Hausnummern als Ergebnis! Im TEST: (hier jeweils 12 Sek. Aufnahme, 16 bit, Mono): keine Parameter gesetzt außer Mono: korrekte Länge von 12000 ms, aber saumäßige Störgeräusche! mit 11025 Samplespersec: 23000 ms bei 22050: 47004 ms bei 44100: 95026 ms Offenbar wird das entsprechende Bit bei der Aufnahme - ohne Längenangabe bereits vor der Aufnahme - in der Wav-Datei nicht gesetzt! Wenn ich sämtliche eruierbaren Parameter aus dieser WAV auslese, stelle ich fest, daß 2 Parameter identisch sind, die das gar nicht sein dürften! (Position und die Anzahl der Samples, statt Millisekunden wird Anzahl der Samples gespeichert!!! Daran kann ich leider auch nichts ändern, sämtliche ich-weiß-nicht-wieviele Versuche mit Parameterkombinationen sind erfolglos geblieben!)
Ich würde für mein Projekt aber eine exakte Längenangabe auch bei variabler Aufnahmelänge brauchen und vor allem keine Störgeräusche, also mindestens 22050 Samplespersec, 16 bit.
Wenn die WAVE im PCM-Format gespeichert wird (Set format tag PCM), sind die Störgeräusche deutlich geringer, am grundsätzlichen Problem ändert sich aber nichts!
Der Windows MediaPlayer verweigert das Abspielen der so erzeugten Dateien mit mehr als 11025 Bitspersample und versucht stattdessen einen Codec-Download vom Internet (habe ich ihm bereits abgestellt). Manche Player spielen die Dateien, meist aber mit falscher Längenangabe. Ich brauche aber voll kompatible, klanglich einwandfreie WAV-Dateien, weil sonst die Spracherkennungssoftware Probleme machen würde!
Zum Vergleich: bei Aufnahme über verschiedene externe Audiorecorder und Abspielen über Profan: Immer exakte Längenangabe!
Nachdem die Profan-Hilfe puncto MCI und dessen Parametern leider nicht gerade ergiebig ist, habe ich im Internet gesucht und einen interessanten Artikel (eigentlich zu VisualBasic) gefunden. (Siehe Anhang, die Datei enthält auch Auszüge aus der MCI.hlp und Multimedia.hlp von Borland) Die darin beschriebenen Befehle funktionieren fast alle auch unter Profan. Ganz am Ende der Datei sind die interessantesten Hinweise:
zB. Bytespersec: Wenn ich diesen Parameter korrekt eingebe, passiert folgendes: bei 22050 Samplespersec 16 bit und Mono ist BlockAlign = (Channels x Bitspersample/8), also 1 x 16/8 = 2 und Bytespersec müßte dann 44100 sein (Samplespersec x BlockAlign) Aber: BytesPerSec > 11025 erzeugt einen Fehler: Parameterwert zu groß!
Ich habe Roland kürzlich mit diesem Problem konfrontiert (Ist das ein MCI-Fehler oder liegts an Profan?) Er meinte, daß das ein Windows-Fehler wäre, Profan reicht die MCI-Befehle 1:1 an die API weiter. Aber vielleicht doch nicht so ganz vollständig? Oder liegts an etwas ganz anderem??? Ich weiß einfach nicht mehr weiter! Vielleicht habt Ihr eine Idee? Wenn ich bei diesem Problem hängenbleibe, bringt das mein Projekt tlw. zu Fall!
Im Anhang sind 4 Wav-Dateien, jeweils 2 mit Goldwave (nur digitale Stille!) und 2 mit meinem Testprogramm und Headset erzeugte. (Könnt ihr mich brabbeln hören...) Dazu alles, was ich über MCI bisher ausfindig machen konnte. (Zig-mal mehr, als in der Profan-Hilfe steht!)
Ciao, Christian |
|
|
| |
|
|
|
| Hallo Christian...
Ich kann mir auch nicht vorstellen, daß das an Profan liegt. Leider ist es schon ewig her, daß ich mich mit MCI beschäftigt habe (als ich Die kleine Mathemaus geschrieben habe). Ich brauche deshalb mal ein paar Quelltexte von dir. Wenn ich es zeitlich irgendwie einbauen kann, schau ich mir das Problem mal an... |
|
|
| |
|
|
|
GDL | Hallo Christian,
die ersten drei Dateien gehen,bei der 96k Datei höre ich dich brabbeln,die 4 Datei > 400k bricht mit Fehlermeldung Klasse nicht registriert ab.
Servus Georg |
|
|
| |
|
|
|
Frank Abbing | Hi,
ich denke auch, das liegt nicht an Profan. Hast du es schon mit API versucht? Sieh mal nach unter waveInAddBuffer und ähnlichen Funktionen aus der winmm-library. Erscheint mir eh viel flexibler als die alte MCI-Geschichte... |
|
|
| |
|
|
|
Frank Abbing | P.S.:
Dein Gebrabbel in Diktafon_10Sek_11025_8_1_PCM_USB.wav klingt für mich aber relativ deutlich. Sind nur wenige Störgeräusche darin hörbar. Die andere Datei ist leider nicht lesbar.
Wow, was für ein Dialekt... |
|
|
| |
|
|
|
CB | [quote:7e490223aa=Frank Abbing]P.S.:
Dein Gebrabbel in Diktafon_10Sek_11025_8_1_PCM_USB.wav klingt für mich aber relativ deutlich. Sind nur wenige Störgeräusche darin hörbar. Die andere Datei ist leider nicht lesbar.
Wow, was für ein Dialekt... [/quote:7e490223aa] Hi, bin halt geborener Wiener... , außerdem war ich da auch schon ziemlich müde und frustriert... :roll: Interessanterweise kann der Player von IrfanView (!) beide Dateien normal wiedergeben. Da merkst Du erst, wieviel klarer die Aufnahme mit 22050 ist.
Ich fürchte halt, daß Ihr beide recht habt mit Profan kann nix dafür. Stimmt, MCI ist veraltet und überholt, vom MM-System weiß ich aber leider nur soviel, daß das viel aufwendiger zu programmieren ist und die Resultate manchmal recht überraschend! Und MCI ist ja wirklich ganz simpel!
Habt Ihr vielleicht einen heißen Tip, wo ich an brauchbare Info, ev. sogar Beispielcodes zu WinMM herankomme? Ich habe die wochenlange, erfolglose Probiererei mit MCI bis unter die Haarwurzeln satt!
Ciao, Christian |
|
|
| |
|
|
|
Frank Abbing | Hi,
drück mal [...] und du erhälst jede Menge Dokus. Unter anderem auch die mm.hlp Datei. |
|
|
| |
|
|