Ir para o conteúdo
Malereis

Ler arquivo texto e gerar áudio a cada linha

Mensagens Recomendadas

Malereis

Boas 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


EDIT: GeSHi adicionado. thoga31

Edit: Correcção de gralha no título

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
apocsantos

    Boa noite,

    Penso que usando 

SpVoice.Pause()

e

SpVoice.Resume()

possas solucionar essa questão uma vez que o SpVoice.Pause para a leitura e o SpVoice.Resume retoma no ponto em que foi interrompida.

Cordiais cumprimentos,

Apocsantos


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

assinatura.jpg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

Dividindo em partes, precisas:

1. Dividir em frases (terás tantas frases quantos pontos finais, certo?)

2. Uma flag de continuação: quando a tecla enter é detectada, a flag deve passar a false

3. Capturar entradas do teclado, por forma a detectar o enter

Deverá passar a flag a false, e memorizar o índice da proxima frase na DB

4. "Base de Dados" para memorizar o índice, e eventualmente as frases

Que tipo de DB queres usar? Podes ir desde os ficheiros de texto, records, xml, sql...

5. Ciclo de leitura, desde 1* ao indice da ultima frase

Deverá testar no inicio do ciclo se a flag é positiva. Se for, continua o ciclo, lndo a próxima frase. Se for negativa, salta fora do ciclo

Quando o ciclo acabar com a leitura da ultima frase, deverá gravar na DB o índice da primeira frase.

6. Leitura de frase

Esse já tens, embora o xVoice não possa ser uma variavel local, mas sim um parametro do procedimento.

Em que parte(s) tens duvidas?

ApocSantos: Acho que a ideia é terminar mesmo o programa, e quando iniciar, voltar de onde parou... É assim?

*: EDIT:

O programa deverá a começar a ler as frases desde a nº 1, caso não exista nenhum índice gravado na BD.

Se houver um índice, deverá começar a partir deste.


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
apocsantos

    Bom dia,

    Se for esse o caso a coisa complica-se um bocadito mais, uma vez que o SpVoice.pause() apenas pausa a leitura e o SpVoice.Resume() retoma no ponto em que terminou para um objecto que esteja com "on-focus". Se o programa não fechar, pode usar com o SpVoice.Pause() e SpVoice.Resume(), de contrário não creio que seja possivel.

Cordiais cumprimentos,

Apocsantos


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

assinatura.jpg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

de contrário não creio que seja possivel.

Possivel é, mas como eu disse, separando as frases e guardando um indice de qual a frase seguinte.

Se o programa terminar, ao voltar a ligar ele pega na frase cujo indice está guardado e começa a ler a partir daí!


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
apocsantos

    Boa tarde,

    Sim possível é sempre, mas não pelo uso directo daquelas funções da Speach API (SAPI). As implementações possiveis são virtualmente ilimitadas.

Cordiais cumprimentos,

Apocsantos


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

assinatura.jpg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

As implementações possiveis são virtualmente ilimitadas.

heheheh Especialmente tratando-se de uma linguagem tão "fraca" como o Delphi...

NOTA: Para os menos atentos, estou a ser irónico!  ;):thumbsup:


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
I-NOZex

heheheh Especialmente tratando-se de uma linguagem tão "fraca" como o Delphi...

NOTA: Para os menos atentos, estou a ser irónico!  :):cheesygrin:

ainda bem xD Delphi é tudo, menos uma linguagem fraca... infelizmente tenho que apanhar com VB (2010) na escola e para mim aquilo é simplesmente... como dizer de uma forma bonita? hmmm... Uma *****!

Delphi é aquela base  *o* bendito dia em que andava a ler manuais de hacker e falava la de como fazer um trojan em delphi... foi ali que a paixao começou :D

EDIT (nunopicado): Embelezei-te um pouco mais a forma de dizer! :) Estava ainda assim muito explicito!


B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado
:):cheesygrin:

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.