Fórum Leitura de texto e reprodução controlada. #411617
16/01/2012
0
Preciso transferir linha por linha de um arquivo texto de Memo1, para Memo2.
Cada linha vai ter sua posição marcada pelo seu ponto final (.) e guardada essa posição em uma base de dados.
A cada linha lida, ela é reproduzida por uma procedure de áudio.
Assim que finalizar o áudio, imediatamente nova frase é lida e reproduzida.
Esse processo é contínuo, até acabar o texto todo em Memo1.
Somente se em algum tempo for clicada a tecla enter, a última linha é lida é reproduzida e para tudo.
Quando retornar à aplicação novamente, as linhas são lidas de onde pararam na última posição. (para isso serve a posição no Banco de dados.
O texto pode então ter sua leitura interrompida quantas vezes se desejar, mas deve sempre começar da útima posição lida.
Quando terminar de ler o texto, o valor da base de dados deve voltar a ser ‘0’ ZERO.
Abaixoa procedure de áudio que estou usando.
procedure Tform1.Audio;
var xvoice: string;
begin
voice:= CreateOLEObject (SAPI.SpVoice);
voice.volume:=100;
voice.Rate:=-5;
voice.Speak(xvoice, 1);
end;
onde xvoice é uma var para ir guardando as linhas do texto.
Tentei o procedimento POS, mas não consegui o resultado desejado.
Não consegui fazer a leitura das frases respeitar o final do áudio e prever o próximo ponto final de cada frase, caso for teclado Enter.
QQ ajuda é bem vinda.
Abraços
Alexandre
Alexandre
Curtir tópico
+ 0Posts
16/01/2012
Leandro
//Troca o . por Enter temos quebra de linha lLinha := StringReplace(Memo1.Lines.Text,,,#13,[rfReplaceAll, rfIgnoreCase]); //varre o stringList e executa linha por linha for i := 0 to lLinha.Count - 1 do begin executaAudio(lLinha[i]); lLinha.Delete(i); end; // procedure que executa o audio procedure executaAudio(ALinha : String); begin voice:= CreateOLEObject (SAPI.SpVoice); voice.volume:=100; voice.Rate:=-5; voice.Speak(ALinha , 1); FreAndNill(voice); end;
ai ta a parte de executar as linhas
vc pode ir lendo a stringList e apagando as linhas sendo que quando para, vai saber onde continuar.
Bem acho que com isso ja vai dar uma clareada nas ideias...
Gostei + 0
16/01/2012
Leandro
erro de sintaxy vai ter ta...
hehhehehe
Gostei + 0
17/01/2012
Alexandre
Alguma coisa tá,dando erado aqui.
Pode esclarecer melhor o código..
Sou novato e sabe como é...
Essa linha abaixo tá dando erro.
lLinha := StringReplace(Memo1.Lines.Text,,,#13,[rfReplaceAll, rfIgnoreCase]);
Grde abraçpo e grato pela resposta
Alexandre
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)