malereis Posted January 8, 2012 Report Share Posted January 8, 2012 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 áudiosã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 textoimplementationuses 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 linhabegin //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 Enterbegin Posicao; Audio;end; Quote Link to comment Share on other sites More sharing options...
0 Jhonas Posted January 9, 2012 Report Share Posted January 9, 2012 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 faladasa 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 Quote Link to comment Share on other sites More sharing options...
Question
malereis
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
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.