Fórum Leitura de texto e reprodução controlada. #411617

16/01/2012

0

Olá pessoal.

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

Alexandre

Responder

Posts

16/01/2012

Leandro

Tente usar uma StringList algo do tipo:
//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...
Responder

Gostei + 0

16/01/2012

Leandro

lLinha.Text := StringReplace(Memo1.Lines.Text,.,#13,[rfReplaceAll, rfIgnoreCase]);

erro de sintaxy vai ter ta...


hehhehehe
Responder

Gostei + 0

17/01/2012

Alexandre

Olá Leandro..

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
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar