Ir para conteúdo
Fórum Script Brasil
  • 0

Gravar audio pelo delphi automaticamente


Vivendo&Aprendendo

Pergunta

5 respostass a esta questão

Posts Recomendados

  • 0

segue um exemplo que voce pode alterar para conseguir fazer o que deseja

Criando um Gravador de Som/Voz

Exemplo de como criar um gravador de som/voz!!!!

Antes de qualquer coisa, você precisa ter um arquivo ".wav" limpo, sem nada gravado nele, você encontra um arquivo assim no gravador de som do Windows, sem gravar nada salve um arquivo vazio como o nome: som.wav IMPORTANTE : Salve o arquivo "som.wav" na mesma pasta onde você vai salvar sua aplicação Delphi!

Crie uma nova aplicação (File - New - Vcl forms application) e coloque o componente TMediaPlayer(Palette - System) coloque o nome de MediaPlayer1, um TLabel(palette - Standard) e dois(2) TBitBtn(Palette - Additional). Altere no nome do TLabel para lb_status, dos botões(TBitBtn) para: btn_salvar e btn_novo -> Adicione um TSaveDialog(Palette - Dialogs) e altere o nome para: salvar -> O nome do formulário coloque: frm_gravador.

Vamos Lá!!

Declare uma variável global com o nome Salvou, tipo Boolean (Salvou : Boolean) (Antes da palavra Implementation);

Exemplo:

var

frm_gravador: Tfrm_gravador;

Salvou : Boolean; //variavel para verificar se a última gravação foi salva

implementation

{$R *.dfm}

...

No Evento OnCreate do Form (frm_gravador Object Inspector - Frm_gravador - Events - OnCreate ) coloque as seguintes linhas:

procedure Tfrm_gravador.FormCreate(Sender: TObject)

var

Nome : string;

begin

Nome := ExtractFilePath(Application.ExeName)+'\som.wav';

CopyFile(PChar(Nome),PChar(extractfilepath(application.exename)+'\nsom.wav'),true); MediaPlayer1.FileName := extractfilepath(application.exename)+'\nsom.wav';

MediaPlayer1.Open;

Salvou := True;

end;

A Variavel "Nome" vai receber o caminho inteiro de onde está salvo o arquivo "som.wav" por exemplo-> C:\som.wavpor isso é obrigatório salvar o arquivo junto com a sua aplicação(Ou pelo menos com o .Exe da sua aplicação)A Função CopyFile vai copiar o arquivo som.wav para que ele nunca se perca(Para que sempre tenha um arquivo em branco para começar uma gravação nova), assim cada vez que você criar uma gravação nova, ele tira uma copia em branco do arquivo som.wav, grava nela, e você salva uma copia do arquivo, e quando for começar outra gravação, vai começar em branco!Veja que o nome do novo arquivo será nsom.wav (extractfilepath(application.exename)+'\nsom.wav), o nome do arquivo não interfere em nada, pois na hora de salvar, o usuário vai dar o nome que ele deseja!MediaPlayer vai recebe o nome do arquivo que foi criado, para que a gravação seja gravada nele(nsom.wav) e não no arquivo em branco principal(som.wav)Abrimos o MediaPlayer para a Gravação (MediaPlayer1.Open;)A variavel Salvou vai receber o valor True pois ainda não foi gravado nada, então se usuário desistir da gravação não vai ter nada para salvar(como se ele já tivesse salvo, por isso-> Salvou := True)

no Evento OnClose do form(frm_gravador Object Inspector - Frm_gravador - Events - OnClose ) coloque as seguintes linhas:

procedure Tfrm_gravador.FormClose(Sender: TObject; var Action: TCloseAction);

begin

//Fechar o MediaPlayer

MediaPlayer1.Close;

//Deleta o Arquivo que foi criado durante a execução para que quando abrir novante

//a aplicação não ocorra de ter alguma coisa gravada nele e dar erro na nova gravação do usuário

DeleteFile(ExtractFilePath(Application.ExeName)+'\nsom.wav');

end;

no Evento OnClick no MediaPlayer1(MediaPlayer1 - Events - Onclick) coloque as seguintes linhas:

procedure Tfrm_gravador.MediaPlayer1Click(Sender: TObject; Button: TMPBtnType; var DoDefault: Boolean);

begin

//se o botão clicado for o Play

if Button = btPlay then

begin

//reproduz a gravação feita

MediaPlayer1.Play;

//o Label "lb_status" serve apenas para indicar qual função está acontecendo

//no momento, nesse caso, a reprodução da gravação

lb_status.Caption := 'Em Execução (Reproduzindo)';

end

else //se o botão clicado for o para começar a gravação

if Button = btRecord then

begin

//informa que uma gravação está em andamento

lb_status.Caption := 'Gravando' ;

//agora que existe uma gravação, podemos informar o usuário que se caso ele

//fechar sem salvar ira perder toda a gravação

Salvou := False;

end

else//caso a gravação for parada

if Button = btStop then

begin

//informa que está parada a gravação

lb_status.Caption := 'Parado';

end;

end;

no Evento OnClick no Bitbtn "btn_salvar" (btn_salvar - Events - Onclick) coloque as seguintes linhas:

procedure Tfrm_gravador.Salvar1Click(Sender: TObject);begin

if salvar.Execute then // se caso você clicar no botão Salvar na caixa de //diálogo que vai abrir(Estude o componente TSaveDialog)

begin

MediaPlayer1.Save; //Salva a gravação

//copia o arquivo com a gravação para onde o usuário informou no SaveDialog(Salvar.FileName) CopyFile(PChar(ExtractFilePath(Application.ExeName)+'\nsom.wav'),PChar(salvar.FileName),true);

//fecha o MediaPlayer

MediaPlayer1.Close;

//deleta o arquivo com a gravação

DeleteFile(ExtractFilePath(Application.ExeName)+'\nsom.wav');

//cria um novo arquivo em branco para a uma nova gravação (som.wav cria o nsom.wav) CopyFile(PChar(ExtractFilePath(Application.ExeName)+'\som.wav'), PChar(extractfilepath(application.exename)+'\nsom.wav'),true);

MediaPlayer1.FileName := extractfilepath(application.exename)+'\nsom.wav';

MediaPlayer1.Open;

Salvou := True;

end;

end;

no Evento OnClick no Bitbtn "btn_novo" (btn_novo - Events - Onclick) coloque as seguintes linhas:

procedure Tfrm_gravador.btn_NovoClick(Sender: TObject);

begin

if not (Salvou) then // se não salvou a gravação( se a variavel Salvou = False )

begin

//perguntamos ao usuário se ele deseja salvar a gravação atual antes de

//começar uma nova

if MessageDlg('Deseja salvar o arquivo?',mtConfirmation,mbyesno,0) = mryes then

//chamamos o evento no botão salvar(btn_salvar)

Btn_salvar.OnClick(Sender);

end;

//fechamos o MediaPlayer para começar uma nova gravação(Arquivo em branco) MediaPlayer1.Close;

//Deletamos o Arquivo de gravação atual, para evitar erros na próxima

//gravação

DeleteFile(ExtractFilePath(Application.ExeName)+'\nsom.wav');

//criamos um novo arquivo em branco (copiamos o arquivo som.wav e criamos

//um arquivo para a gravação com o nome de nsom.wav)

CopyFile(PChar(ExtractFilePath(Application.ExeName)+'\som.wav'), PChar(extractfilepath(application.exename)+'\nsom.wav'),true);

//atribuaimos o nome do arquivo para a gravação

MediaPlayer1.FileName := extractfilepath(application.exename)+'\nsom.wav';

//abrimos o media player para a gravação

MediaPlayer1.Open;

// indicamos que o arquivo ainda não tem nada gravado, então não há nada

//para salvar

Salvou := True;

//deixamos o status em branco

lb_status.Caption := '';

end;

PRONTOO!!!

você pode implemetar várias funções ao seu gravador, uma dica e administrar o

tempo total da gravação, você pode fazer isso TTimer, da Palette System, se eu não me engano...

fica muito legal..

Dúvidas : marcelo-severo@hotmail.com

Faça um para teste que fique + ou - desse jeito, funciona legal ...

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Jhonas

Ocorre o seguinte erro ao executar o programa:

Project Project1.exe raised exception class EMCIDeviceError with message O arquivo especificado não foi encontrado. Verifique se o caminho e o nome do arquivos estão corretos.

Mas já verifiquei o caminho e o nome do arquivo que ele pede para criar e estão todos corretos.

Aguardo

Link para o comentário
Compartilhar em outros sites

  • 0
raised exception class EMCIDeviceError with message

Se não me engano, esse erro é causado por drive corrompido do DirectX... se voce usar um arquivo mp3 esse erro não acontece.

caso não consiga solucionar esse problema com o componente MediaPlayer tente outros componentes

no primeiro link tem o Audio2 entre outros

http://www.edudelphipage.com.br/componente...hp?categoria=20

outros componentes

http://www.torry.net/pages.php?id=167

abraço

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...