malereis Postado Janeiro 8, 2012 Denunciar Share Postado Janeiro 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; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Janeiro 9, 2012 Denunciar Share Postado Janeiro 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
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 para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
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.