Ir para conteúdo
Fórum Script Brasil
  • 0

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


malereis

Pergunta

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 para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,2k
×
×
  • Criar Novo...