AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi DTMF auswertung über die Soundkarte
Thema durchsuchen
Ansicht
Themen-Optionen

DTMF auswertung über die Soundkarte

Ein Thema von dac424 · begonnen am 11. Dez 2004 · letzter Beitrag vom 28. Jan 2005
 
dac424

Registriert seit: 11. Dez 2004
21 Beiträge
 
#3

Re: DTMF auswertung über die Soundkarte

  Alt 13. Jan 2005, 19:17
So ich habe jetzt was gefunden aber das passiert über ein Wave File ist es möglich ein Stream zu machen und sagen wir mal immer so 1 Minute auf zu nehmen und auszuwerten danach wieder von forne
Code:
interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Wave, dspDTMF;

type
  TfmMain = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    Label1: TLabel;
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);

  private
    DTMF: TdspDTMF; // DTMF decoder (see the dspDTMF unit)
    procedure OnTone(Sender: TObject; Tone: Char);
  end;

var
  fmMain: TfmMain;

implementation

{$R *.dfm}

procedure TfmMain.FormCreate(Sender: TObject);
begin
  Caption:= Application.Title;
  DTMF:= TdspDTMF.Create;
  DTMF.OnTone:= OnTone;
end;

procedure TfmMain.FormDestroy(Sender: TObject);
begin
  DTMF.Free;
end;


procedure TfmMain.Button1Click(Sender: TObject);
var
  B: Byte;
  S: SmallInt;
  Wave: TWaveFileStream;
begin
  if OpenDialog1.Execute then
  begin
    Edit1.Text:= '';
    Wave:= TWaveFileStream.Create(OpenDialog1.FileName, fmOpenRead);
    try
      Wave.Open(false);
      if Wave.Format.nChannels <> 1 then
      begin
        MessageDlg('This demo supports Mono files only', mtWarning, [mbCancel], 0);
        Edit1.Text:= 'Format not supported';
        Exit;
      end;

      DTMF.SampleRate:= Wave.Format.nSamplesPerSec;
      DTMF.Initialize;

      Caption:= 'Searching for tones...';
      Application.ProcessMessages;
      try
        if Wave.Format.wBitsPerSample = 8 then
        begin
          DTMF.Threshold:= 1; // Set amplitude threshold
          while Wave.Read(B, 1) = 1 do DTMF.Put(B)
        end else
        begin
          DTMF.Threshold:= 100; // Set amplitude threshold
          while Wave.Read(S, 2) = 2 do DTMF.Put(S);
        end;

        DTMF.Finilize;
      finally
        Caption:= Application.Title;
      end;
    finally
      Wave.Free;
      if Edit1.Text = '' then Edit1.Text:= 'not found...';
    end;
  end;
end;


procedure TfmMain.OnTone(Sender: TObject; Tone: Char);
begin
  Edit1.Text:= Edit1.Text + Tone;
end;

end.
mann fängt klein an
  Mit Zitat antworten Zitat
 


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 22:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz