Vivendo&Aprendendo Postado Fevereiro 23, 2011 Denunciar Share Postado Fevereiro 23, 2011 Olá pessoalGostaria de saber como faço para gravar audio pelo delphi sem precisar dar rec. Tipo automáticamente, quando abrir o programa já começar a gravar e depois quando fechar ele savar um arquivo no hd com esse audio.Grato Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Fevereiro 24, 2011 Denunciar Share Postado Fevereiro 24, 2011 voce esta usando o componente MediaPlayer ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Vivendo&Aprendendo Postado Fevereiro 24, 2011 Autor Denunciar Share Postado Fevereiro 24, 2011 sim Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Fevereiro 24, 2011 Denunciar Share Postado Fevereiro 24, 2011 segue um exemplo que voce pode alterar para conseguir fazer o que desejaCriando 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 salvaimplementation{$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)varNome : string;beginNome := 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 MediaPlayerMediaPlayer1.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árioDeleteFile(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 Playif Button = btPlay thenbegin//reproduz a gravação feitaMediaPlayer1.Play;//o Label "lb_status" serve apenas para indicar qual função está acontecendo //no momento, nesse caso, a reprodução da gravaçãolb_status.Caption := 'Em Execução (Reproduzindo)';endelse //se o botão clicado for o para começar a gravaçãoif Button = btRecord thenbegin//informa que uma gravação está em andamentolb_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çãoSalvou := False;endelse//caso a gravação for parada if Button = btStop thenbegin//informa que está parada a gravaçãolb_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);beginif salvar.Execute then // se caso você clicar no botão Salvar na caixa de //diálogo que vai abrir(Estude o componente TSaveDialog)beginMediaPlayer1.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 MediaPlayerMediaPlayer1.Close;//deleta o arquivo com a gravaçãoDeleteFile(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);beginif 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 novaif 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çãoDeleteFile(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çãoMediaPlayer1.FileName := extractfilepath(application.exename)+'\nsom.wav';//abrimos o media player para a gravaçãoMediaPlayer1.Open;// indicamos que o arquivo ainda não tem nada gravado, então não há nada //para salvarSalvou := True;//deixamos o status em brancolb_status.Caption := '';end;PRONTOO!!!você pode implemetar várias funções ao seu gravador, uma dica e administrar otempo 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.comFaça um para teste que fique + ou - desse jeito, funciona legal ...abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Vivendo&Aprendendo Postado Fevereiro 24, 2011 Autor Denunciar Share Postado Fevereiro 24, 2011 Olá JhonasOcorre 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Fevereiro 24, 2011 Denunciar Share Postado Fevereiro 24, 2011 raised exception class EMCIDeviceError with messageSe 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 outroshttp://www.edudelphipage.com.br/componente...hp?categoria=20outros componenteshttp://www.torry.net/pages.php?id=167abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Vivendo&Aprendendo
Olá pessoal
Gostaria de saber como faço para gravar audio pelo delphi sem precisar dar rec. Tipo automáticamente, quando abrir o programa já começar a gravar e depois quando fechar ele savar um arquivo no hd com esse audio.
Grato
Link para o comentário
Compartilhar em outros sites
5 respostass 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.