Jump to content
Fórum Script Brasil
  • 0

Ler texto e parar assim que acionar enter, e continuar com outro enter


malereis

Question

Olá pessoal.

Bom dia...

Preciso ler um arquivo em um Memo e transformar em áudio.

As linhas vão sendo lidas e transformadas em áudio, até que uma tecla (Enter) seja acionada e a leitura e áudio

são interrompidos, mas no próximo ponto final da frase que estiver lendo. (assim termina a frase)

A tecla Enter deve servir para Interromper e Continuar a ler.

Consegui esse efeito, mas só a cada ponto final e tenho que clicar em um botão a cada ponto final. (substituir botão pelo enter)

Mando o código que tenho e se alguém puder ajudar, agradeço.

var

frmPrincipal: TfrmPrincipal;

voice: OLEVariant; //Var de áudio

PosicaoAux, PosicaoAnt: integer; //Para paradas no texto

implementation

uses MMSystem, StrUtils;

procedure TfrmPrincipal.Posicao;

begin

//Lendo Paragrafo por paragrafo

PosicaoAnt:=Table1.fieldByName('Posic').AsInteger;

Inc(PosicaoAnt);

if PosicaoAnt > Length(Memo1.Text) then

begin

//Quando o arquivo texto chega ao fim, sonta a msg, fim da mensagem

voice:= CreateOLEObject ('SAPI.SpVoice');

voice.volume:=100;

voice.Rate:=-1;

voice.Speak('Fim da Mensagem.');

PosicaoAnt:=0;

PosicaoAux:=0;

Table1.Open;

Table1.Edit;

Table1.FieldByName('Posic').AsInteger:=PosicaoAnt;

Table1.Post;

Table1.Refresh;

end

else

begin

PosicaoAux := PosEx('.', Memo1.Text, PosicaoAnt);

if PosicaoAux = 0 then

PosicaoAux := Length(Memo1.Text);

Memo2.Text := Copy(Memo1.Text, PosicaoAnt, PosicaoAux - PosicaoAnt + 1);

PosicaoAnt := PosicaoAux;

//Marcando no BDE a posição de parada.

Table1.Open;

Table1.Edit;

Table1.FieldByName('Posic').AsInteger:=PosicaoAnt;

Table1.Post;

end;

end;

procedure TfrmPrincipal.Audio; //Aqui vem as linhas de Memo1 para serem lidas linha a linha

begin

//Lendo as linhas de Memo2.

voice:= CreateOLEObject ('SAPI.SpVoice');

voice.volume:=100;

voice.Rate:=-1;

voice.Speak(Memo2.Text, 1);

end;

procedure TfrmPrincipal.btnTutorialClick(Sender: TObject); //Esse evento vai ser substituído pelo clique do botão Enter

begin

Posicao;

Audio;

end;

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

voce pode usar um componente do RXLib chamado SecretPanel

esse componente rola um texto tanto na horizontal como na vertical ( no seu caso seria horizontal )

então com um botão voce aciona o play desse componente para que o texto começe a rolar, depois voce pode montar um código para que conforme as palavras forem sendo passadas na tela elas sejam faladas

a clicar outro botão voce aciona o stop, e guarda a ultima posição da palavra dentro texto do memo, e ao clicar o play, começa a rolar novamente a partir dessa ultima posição.

com alguma alteração no código, voce pode ainda fazer com que ao ser clicado o stop, ele continue rolando o texto até encontrar um ponto final no texto

abraço

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...