AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Sprachein- und ausgabe realisieren
Thema durchsuchen
Ansicht
Themen-Optionen

Sprachein- und ausgabe realisieren

Offene Frage von "LDericher"
Ein Thema von LDericher · begonnen am 23. Feb 2009 · letzter Beitrag vom 3. Mär 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von LDericher
LDericher

Registriert seit: 29. Jan 2007
Ort: Erkelenz
224 Beiträge
 
Delphi 7 Enterprise
 
#1

Sprachein- und ausgabe realisieren

  Alt 23. Feb 2009, 15:11
Hallo DP!

Erstes Problem:
Habe schon seit Längerem mal die Idee eine Spracherkennung zu basteln.
Soweit ja löblich, aber ich bräuchte verwertbare Daten, zB Lautstärke&Frequenz, und das Ganze möglichst als Live-Mikrofon-Stream.
Also dass ich quasi direkt mit einer Art Variablen/Funktion arbeiten kann:

Delphi-Quellcode:
//Ein Passender Datentyp:
type
  TSoundRec:record
    Freq,
    Volume:integer;
  end;

//Das soll den wirklich AKTUELLEN Zustand am Mikrofon liefern:
function CurrentSound:TSoundRec;

//Testprogramm:
begin
while(CurrentSound.Volume<=cSCHWELLE)
     do Application.ProcessMessages;
Windows.Beep;
end;
So dass ich dann die Daten über ein lineares neuronales Netz weiterverarbeiten kann...
Also bräuchte ich dafür nur die Möglichkeit, auf den aktuellen Zustand zuzugreifen zu können.
Habe schon Bass.dll und mciSendString gehört, mci ist imho aber nicht dafür geeignet, bis ich eines Besseren belehrt werde, mit der Bass habe ich noch nie gearbeitet.

Zweites Problem:
Sprachsynthese, oder: Wie kann ich dynamisch Audiodateien generieren (ohne alle Ressourcen zu verbrauchen ist ein höheres Level )

Also, hoffe mal dass wer was weiß, vielleicht hat unser 0v3rki113r ja was

Gruß vom LDer!

[edit]Titel geändert - nun passender[/edit]
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Sprachein- und ausgabe realisieren

  Alt 24. Feb 2009, 03:26
Vielleicht hilft dir das hier ja ein bißchen weiter.
  Mit Zitat antworten Zitat
Benutzerbild von LDericher
LDericher

Registriert seit: 29. Jan 2007
Ort: Erkelenz
224 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Sprachein- und ausgabe realisieren

  Alt 24. Feb 2009, 13:09
Zitat von omata:
Vielleicht hilft dir das hier ja ein bißchen weiter.
Die Dokumentation ist zwar recht hilfreich, aber auch nur, was die Erkennung angeht.
Für die Aufnahme, also das was mich interressiert, ist leider keine Doku vorhanden. Den Quelltext ohne eine Erklärung zu verstehen, bzw. in allen mitgelieferten Units nach der entscheidenden Codezeile zu suchen, ist mir zu viel Arbeit; zumindest in Anbetracht der Tatsache, dass in diesem Forum mindestens Einer ist, der den Quelltext voll und ganz versteht - Der Autor.

Deswegen werde ich ihm eine PN mit diesem Link schicken; mal schauen, was er hierzu sagen kann.

Gruß vom LDer.
  Mit Zitat antworten Zitat
Benutzerbild von LDericher
LDericher

Registriert seit: 29. Jan 2007
Ort: Erkelenz
224 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Sprachein- und ausgabe realisieren

  Alt 24. Feb 2009, 15:07
Zitat von omata:
Vielleicht hilft dir das hier ja ein bißchen weiter.
Gerade ist mir erst aufgefallen, dass du ja der Autor BIST -.- ... Also: könntest du ein paar Wörtchen zum Thema Aufnahme verlieren?

Gruß LDer.
  Mit Zitat antworten Zitat
Benutzerbild von LDericher
LDericher

Registriert seit: 29. Jan 2007
Ort: Erkelenz
224 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Sprachein- und ausgabe realisieren

  Alt 27. Feb 2009, 16:19
Hallo DP! Hallo omata!

Also: Ich glaube, ich verstehe langsam...

Das da ist glaube ich etwa das was ich brauche:
http://www.delphipraxis.net/internal...light=frequenz

Stichwort "BASS_ChannelGetData".
Fraaaage. Wie sind die Daten darin organisiert/wie hängt die Organisation der Daten von der aktuellen Umgebung und den Parametern ab?
Genauer: An welcher Stelle finde ich hier im generierten Array z.B. die Frequenz 480 hz?
(Habe mal überflüssige Codezeilen entfernt und den Source in meine Formatierung umgewandelt):

Delphi-Quellcode:
function RecordingCallback(Handle: HRECORD; buffer: Pointer; length, user: DWord): boolean; stdcall;
var
  fft : array[1..512] of single;
  i : integer;
begin
BASS_ChannelGetData(Handle, @fft, BASS_DATA_FFT512);
for i := 1 to 256 do
   begin
   _BitmapOut.Canvas.MoveTo(i, _BitmapOut.Canvas.ClipRect.Bottom);
   _BitmapOut.Canvas.LineTo(i, _BitmapOut.Canvas.ClipRect.Bottom-round(fft[I] * _BitmapOut.Canvas.ClipRect.Bottom)
   end;
end;
Gruß vom LDer!
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Sprachein- und ausgabe realisieren

  Alt 27. Feb 2009, 23:44
Zitat von Superwinger:
Genauer: An welcher Stelle finde ich hier im generierten Array z.B. die Frequenz 480 hz?
Da deine Soundkarte maximal 20KHz verarbeiten kann, markiert dieser Wert schonmal die ober Schranke für weitere Berechnungen. Bei einer FFT-Breite von 512 ergeben sich 256-Frequenzwerte. Das Frequenzraster ist demnach 78Hz groß. Der Index, der 480Hz entspricht ist also (480/20000)*256 = 6. Dabei ist die wirkliche Frequenz (6/256)*20000 = 468.75Hz.
Genauer wird es, wenn du die FFT-Breite erhöst. Bei einer Breite von 4096 ist der Index (480/20000)*2048 = 49 und die wirkliche Frequenz entspricht dann 478.5Hz, das Frequenzraster ist dann 9.8Hz.
  Mit Zitat antworten Zitat
Benutzerbild von LDericher
LDericher

Registriert seit: 29. Jan 2007
Ort: Erkelenz
224 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Sprachein- und ausgabe realisieren

  Alt 28. Feb 2009, 00:11
Die Lösung klingt vielversprechend und durchaus schlüssig.
Der Haken ist bloß, dass wenn ich den Stereomix abhöre und mir an der Stelle, wo z.B. 8000hz. sein müssten eine rote linie zeichnen lasse und dann per Windows.beep 800hz. anlege, der peak viel zu weit links ist von der Linie - Ich treffe die Linie mit 8800 hz. Kann das an der Soundkarte liegen? verarbeitet meine Soundkarte ein höheres Spektrum? Wie finde ich solche Daten? Ja, Google ist eine gute Idee aber nicht mehr um diese Uhrzeit, wenn die ersten paar Treffer nix bringen; btw ich habe einen realtek AC97 Audiochip... Ich schau morgen mal nach

Gruß vom LDer

P.S.: Habe die Konstante nun auf 22000 gesetzt(8800=8000*110%; 22000=20000*110%). Funktioniert. Werde euch über den Status meines Programms auf dem Laufenden halten.
  Mit Zitat antworten Zitat
Benutzerbild von LDericher
LDericher

Registriert seit: 29. Jan 2007
Ort: Erkelenz
224 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Sprachein- und ausgabe realisieren

  Alt 28. Feb 2009, 16:43
Themensprung zur Sprachausgabe.

Erstmal, hat jemand verständliche Quellen/kann jemand erklären, wie eine Wave-Datei aufgebaut ist? Kann ich in einem Programm Wavedaten puffern, schneiden und abspielen? Dass ich nur einen großen Wave-Stream habe, aus dem ich je nach Bedarf bestimmte Teile kopiere, zu einem neuen Stream zusammensetze und schließlich ausgebe?

Gruß vom LDer!
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#9

Re: Sprachein- und ausgabe realisieren

  Alt 28. Feb 2009, 16:58
Standard WAVE-Dateien enthalten PCM-Wave Daten. Das heißt, dass der aufgenommene Schalldruck im zeitlichen Verlauf aufgezeichnet wird. Frequenzdaten erhälst du erst nach einer Fourier Transformation (Stichwort FFT).

Eine brauchbare Anlaufstelle über den Aufbau von Wave-Dateien findest du bei Wikipedia: http://de.wikipedia.org/wiki/RIFF_WAVE

Die von dir aufgezählten Aufgaben, solltest du mit Memory-Streams (Stichwort TMemoryStream) oder GetMem, Copy und etwas Pointerarithmetik lösen können.
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Sprachein- und ausgabe realisieren

  Alt 28. Feb 2009, 22:35
Zitat von Superwinger:
Erstmal, hat jemand verständliche Quellen/kann jemand erklären, wie eine Wave-Datei aufgebaut ist? Kann ich in einem Programm Wavedaten puffern, schneiden und abspielen? Dass ich nur einen großen Wave-Stream habe, aus dem ich je nach Bedarf bestimmte Teile kopiere, zu einem neuen Stream zusammensetze und schließlich ausgebe?
Diese ganzen Dinge verwende ich alle in meinem oben angegebenen Beispiel.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz