 SLD Software
 Via Traversa, 2 - 25031 Capriolo (BS)
 Tel. 030 7460177 Tel. e Fax 030 7465319
 Cell. 347 8701230 - 349 4290845
 mailto: alexdvdl@libero.it  raudino@tin.it


*****************************************************************************
               SORGENTI PER SVILUPPATORI IN LINGUAGGIO " DELPHI ".
*****************************************************************************

- FAI PARLARE LE TUE APPLICAZIONI IN PERFETTA LINGUA ITALIANA CON   "VOCE VIVA TELLME"-
         
   PER APPLICARE LA SINTESI VOCALE "VOCE VIVA TELLME" AI VOSTRI PROGRAMMI E'
 SUFFICIENTE IMPLEMENTARE NEI VOSTRI SORGENTI QUESTE SEMPLICI CHIAMATE "STDCALL" 
     COME ESEMPLIFICATO NELL'INTERFACCIA DIMOSTRATIVA "PROVAEXE" ALLEGATA.

*****************************************************************************
*****************************************************************************

PROVAEXE  un esempio, con finalit informative sui dati relativi 
alle tecniche di sviluppo dell'interfaccia.
Per procedere alla prova del pacchetto di "VOCE VIVA TELLME" 
bisogna richiedere alla SLD SOFTWARE il "KIT DI SVILUPPO" completo.

*****************************************************************************

------ "VOCEVIVA TELLME - KIT DI SVILUPPO" IN DELPHI 5 ----------

Il "Kit di sviluppo", completo viene fornito su CD-ROM con chiave hardware 
di protezione e contiene:
- base fonemica per la lettura della lingua italiana, con voce maschile;
- VOCEVIVA.DLL motore di sintesi vocale;
- un eseguibile denominato PROVAEXE come esempio di interfaccia dimostrativa 
  (con finestra), realizzato con Delphi 5, che permette di effettuare le prime 
  prove di lettura vocale;
- sorgenti completi, in chiaro, dell'interfaccia PROVAEXE realizzati con 
  Delphi5 (sorgenti in chiaro trascitti a fondo pagina) sviluppabile secondo
  le esigenze di utilizzo da parte di aziende/utenti produttori di programmi
  proprietari.

---------------------------------------------------------------------

INDICAZIONI TECNICHE PER LA REALIZZAZIONE DELL'INTERFACCIA

E' possibile implementare un programma di interfaccia al motore vocale 
VOCEVIVA.DLL utilizzando qualsiasi linguaggio di programmazione che 
chiama con procedure STDCALL le varie funzioni della DLL
(similmente all'interfaccia fornita PROVAEXE, sorgenti realizzati con Delphi 5).

L'elenco delle funzioni disponibili, desumibili anche dal sorgente 
allegato a fondo pagina PROVA.PAS sono:

1) procedure parla(S: string); stdcall;external 'voceviva.dll'
   (legge brevi stringhe, senza punteggiatura e senza caratteri speciali;
   si consiglia in ogni caso di usare per le funzioni di lettura la procedura
   "Leggi_formattato" perche pi completa e funzionale, in grado di leggere
   tutto il contenuto di una stringa);

2) procedure init_dll; stdcall;external 'voceviva.dll'
   (inizializza la DLL);

3) procedure leggi_formattato(S:string); stdcall;external 'voceviva.dll'
   (funzione principale di lettura da stringa, completa di lettura della 
   punteggiatura e dei caratteri speciali);

4) procedure chiudi_dll; stdcall;external 'voceviva.dll'
   (chiude la DLL);

5) procedure lettura_di_testo (nome:string);stdcall;external 'voceviva.dll'
   (legge il contenuto di un file.txt);

6) procedure set_buffer (nome:string);stdcall;external 'voceviva.dll'
   (setta il nome del file.wav di destinazione);

7) procedure chiudi_wave(nome:string);stdcall;external 'voceviva.dll'
   (Chiude il file.wav);

8) procedure set_pitch (freqq:word);stdcall;external 'voceviva.dll'
   (setta la frequenza di emissione file.wav; settaggio di default 11125 Hz)
   (Migliori risultati nella lettura vocale si ottengono con frequenza da 
   11250 a 11475 Hz);

-----------------------------------------------------------------------

 PROCEDURE DISPONIBILI E INDICAZIONI PER L'IMPLEMENTAZIONE 

1)PER LA LETTURA DI BREVI STRINGHE SENZA PUNTEGGIATURA E SENZA L'USO DI CARATTERI SPECIALI

Implementare la procedura seguendo il seguente ordine:

a) Inizializzare la DLL (Procedure init_dll);

b) (Opzionale) Settare la frequenza di emissione wave (Procedure set_pitch);

c) Settare il file.wav di destinazione (Procedure set_buffer);

d) Far leggere indicando la stringa (Procedure Parla(S: string));

e) Chiudere il file.wav (Procedure chiudi_wave);

f) Chiudere la DLL (Procedure chiudi_dll).



2) PER LA LETTURA DI STRINGHE LUNGHE, COMPLETE DI   PUNTEGGIATURA E SENZA 
   LIMITAZIONI DI CARATTERI

Implementare la procedura seguendo il seguente ordine:

a) Inizializzare la DLL (Procedure init_dll);

b) (Opzionale) Settare la frequenza di emissione wave (Procedure set_pitch);

c) Settare il file.wav di destinazione (Procedure set_buffer);

d) Far leggere indicando la stringa (Procedure leggi_formattato(S: string));

e) Chiudere il file.wav (Procedure chiudi_wave);

f) Chiudere la DLL (Procedure chiudi_dll).



3) PER LA LETTURA DI FILE.TXT 

Implementare la procedura seguendo il seguente ordine:

a) Inizializzare la DLL (Procedure init_dll);

b) (Opzionale) Settare la frequenza di emissione wave (Procedure set_pitch);

c) Settare il file.wav di destinazione (Procedure set_buffer);

d) Far leggere il file.txt indicando il percorso e il nome (Procedure lettura_di_testo);

e) Chiudere il file.wav (Procedure chiudi_wave);

f) Chiudere la DLL (Procedure chiudi_dll).


4) PER LA LETTURA DI TESTI DI ORIGINE DIVERSA, DA FILES O STRINGHE DIVERSE, 
   E PER RIUNIRE TUTTO IL CONTENUTO DELLA LETTURA IN UN SOLO FILE.WAV  

E' possibile creare un unico file.wav utilizzando pi files.txt o stringhe di testo.
La procedura e' la seguente:

init_dll;
set_buffer (nome.wav)
leggi_formattato('prima frase');
leggi_formattato('seconda frase');
leggi_formattato('terza frase');
chiudi_wav('nome.wav');
chiudi_dll;

Questo esempio crea un UNICO file.wav in cui sono contenute le letture dei tre testi.
Tutte le letture verranno registrate una di seguito all'altra fino a quando non si chiude il file.wav tramite "chiudi_wav('nome.wav')".
Questa funzione risulta molto utile quando una lettura vocale deve essere costruita utilizzando pi brani di testo provenienti da stringhe o da files di testo diversi.
Anche in questa procedura  possibile sostituire o alternare la funzione "Leggi_formattato" con la procedure "Parla" e la procedura "Lettura_di_testo". 


-------------------------------------------------------------------

ACCORGIMENTI E CONSIGLI PRATICI 

Nell'implementazione di ogni singola procedura  indispensabile seguire 
l'ordine sopra indicato. Inoltre verificare le seguenti condizioni:

- dopo la creazione del file sonoro, chiudere ogni volta il file.wav con "chiudi_wave", 
  altrimenti il file risulta inaccessibile;

- la frequenza di emissione vocale pu essere settata solo all'inizio ( e non in 
  tempo reale), se non viene settata valgono i valori di default;
 
-  possibile sovrascrivere un file.wav, verificare per che il suddetto file non sia 
  utilizzato da altro programma, "appeso", selezionato o evidenziato sullo schermo;
 
- inizializzare e chiudere la DLL all'inizio e alla fine di ogni procedura di lettura;

-  possibile lasciar aperta la DLL e procedere a diverse procedure di lettura 
  producendo files.wav diversi.



*************************************************************************

------------------- SORGENTI FILE PROVA.PAS DI DELPHI 5 -------------------------------

unit prova;

interface

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

type
  TForm2a = class(TForm)
    Button2: TButton;
    Button4: TButton;
    Button5: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    RichEdit1: TRichEdit;
    Label4: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure lett_testo(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure chiudo(Sender: TObject; var Action: TCloseAction);
    procedure Edit1Change(Sender: TObject);
    procedure RichEdit1Change(Sender: TObject);
    procedure Edit2Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2a: TForm2a;
  testo,nfile,nbu:String;

 procedure parla(S: string); stdcall;external 'voceviva.dll';
 procedure init_dll; stdcall;external 'voceviva.dll';
 procedure leggi_formattato(S:string); stdcall;external 'voceviva.dll';
 procedure chiudi_dll; stdcall;external 'voceviva.dll';
 procedure lettura_di_testo (nome:string);stdcall;external 'voceviva.dll';
 procedure set_buffer (nome:string);stdcall;external 'voceviva.dll';
 procedure chiudi_wave(nome:string);stdcall;external 'voceviva.dll';
 procedure set_pitch (freqq:word);stdcall;external 'voceviva.dll';
implementation

{$R *.DFM}

procedure TForm2a.FormCreate(Sender: TObject);
var
pro:string;
begin
//init_dll;
set_pitch(12000);
//exit;
end;

procedure TForm2a.Button2Click(Sender: TObject);
var
pro:string;
begin
label4.caption:='Creazione file.wav in corso';
deletefile (nbu);
init_dll;
set_pitch(11275);
set_buffer(nbu);
pro:= trim (testo);
leggi_formattato (pro);
chiudi_wave(nbu);
label4.caption:='Finito';
chiudi_dll;
end;


procedure TForm2a.lett_testo(Sender: TObject);
begin
label4.caption:='Creazione file.wav in corso';
deletefile (nbu);
init_dll;
set_pitch(11275);
set_buffer(nbu);
lettura_di_testo(nfile);
chiudi_wave(nbu);
label4.caption:='finito';
chiudi_dll;
end;


procedure TForm2a.Button5Click(Sender: TObject);
begin
halt(1);
end;

procedure TForm2a.chiudo(Sender: TObject; var Action: TCloseAction);
begin
//chiudi_dll;
form2a.Hide;
//form2a.Free;
halt (1);
//action:=cafree;

end;

procedure TForm2a.Edit1Change(Sender: TObject);
begin
nbu:=edit1.Text;
end;

procedure TForm2a.RichEdit1Change(Sender: TObject);
begin
testo:=richedit1.Text;
end;

procedure TForm2a.Edit2Change(Sender: TObject);
begin
nfile:=edit2.Text;
end;

end.

******************************************************************************
------------------------------------------------------------------------------
La SLD Software garantisce l'assistenza tecnica telefonica:  
per altre informazioni sull'implementazione dell'interfaccia 
Tel. 030 7460177 - 030 7465319 - Cell. 349 4290845 
 alexdvdl@libero.it     raudino@tin.it
------------------------------------------------------------------------------
