Gravar um áudio em mp3 usando Bass
Algum amigo teria um exemplo para gravar um som direto em mp3 ou wma usando Bass?
Pleonardomv
Curtidas 0
Respostas
Cebikyn
19/02/2004
No site da BASS (www.un4seen.com), procure por BASSenc e baixe, nele vc encontra um exemplo de como fazer isso. Tb é necessário o programa Lame.exe (não tenho link para ele), que vai receber o áudio capturado pela BASS e converter em MP3 automaticamente.
GOSTEI 0
Pleonardomv
19/02/2004
Baixei os dois mas como funciona? Vc poderia me explicar?
GOSTEI 0
Cebikyn
19/02/2004
Funciona assim:
Primeiro o programa inicia a BASS:
Depois inicia o dispositivo de gravação:
Em seguida inicia o encoder (que grava p/ MP3 a partir do áudio passado pela BASS.dll):
E inicia a gravação:
E qnd terminar a gravação desejada, chama-se estas funções:
[b:70b06b48e7]rchan[/b:70b06b48e7] é uma variável do tipo DWORD. Para que o prgrama funcione, é necessário declarar BASS e BASSenc no Uses e tb colocar as dlls BASS.dll e BASSenc.dll na pasta do programa (juntamente com LAME.exe). Para determinar de qual dispositivo será feita a gravação (microfone, line in/out, etc...), use:
Em que input é o número do dispositivo (0 é o primeiro).
Primeiro o programa inicia a BASS:
if (not BASS_RecordInit(0)) or (not BASS_Init(1,44100,0, win, Nil)) then begin ShowMessage(´Não foi possível iniciar o dispositivo´); Close(); end
Depois inicia o dispositivo de gravação:
rchan:=BASS_RecordStart(44100, BASS_RECORD_PAUSE, nil,0);
Em seguida inicia o encoder (que grava p/ MP3 a partir do áudio passado pela BASS.dll):
if (not BASS_Encode_Start(rchan,´lame.exe --alt-preset standard - arquivo.mp3´,0, Nil,0)) then begin BASS_ChannelStop(rchan); Exit; end;
E inicia a gravação:
BASS_ChannelResume(rchan);
E qnd terminar a gravação desejada, chama-se estas funções:
BASS_Encode_Stop(rchan); BASS_ChannelStop(rchan);
[b:70b06b48e7]rchan[/b:70b06b48e7] é uma variável do tipo DWORD. Para que o prgrama funcione, é necessário declarar BASS e BASSenc no Uses e tb colocar as dlls BASS.dll e BASSenc.dll na pasta do programa (juntamente com LAME.exe). Para determinar de qual dispositivo será feita a gravação (microfone, line in/out, etc...), use:
BASS_RecordSetInput(input,BASS_INPUT_ON);
Em que input é o número do dispositivo (0 é o primeiro).
GOSTEI 0
Pleonardomv
19/02/2004
Puxa cara vc é bom mesmo em BASS. Funcionou legal com algumas alterações mas a aplicação fica muito lenta. Teria como resolver isso? VC clica em um botão e ele demora executar a ação.
Valeu....
Valeu....
GOSTEI 0
Cebikyn
19/02/2004
Não existe nenhuma forma de aumentar a velocidade, que eu saiba...
GOSTEI 0
Pleonardomv
19/02/2004
Desculpa te incomodar mas vc sabe como definir uma placa de som? Tenho 2 na máquina e gostaria de selecionar uma delas...
GOSTEI 0
Cebikyn
19/02/2004
Vou te dar os dois códigos que eu tenho para seleção de dispositivos (para selecionar dispositivo de entrada e saída) e vc vê se as duas placas aparecem em um deles:
[b:c8af2a90b4]Para selecionar dispositivo de entrada:[/b:c8af2a90b4]
Adiciona os dispositivos ao ComboBox:
No OnClick do ComboBox (antes de iniciar a gravação):
[b:c8af2a90b4]Para selecionar dispositivos de saída:[/b:c8af2a90b4]
Adiciona os dispositivos ao ComboBox:
Depois basta passar o ItemIndex do ComboBox como primeiro parâmetro do BASS_Init.
[b:c8af2a90b4]Para selecionar dispositivo de entrada:[/b:c8af2a90b4]
Adiciona os dispositivos ao ComboBox:
var c: Integer; i: PChar; begin c:=0; i:=BASS_RecordGetInputName(c); while i<>nil do begin ComboBox1.Items.Add(StrPas(i)); if (BASS_RecordGetInput(c) and BASS_INPUT_OFF)=0 then begin input:=c; ComboBox1.ItemIndex := c; end; inc(c); i:=BASS_RecordGetInputName(c); end; end;
No OnClick do ComboBox (antes de iniciar a gravação):
var i:Integer; begin Input := ComboBox1.ItemIndex; i:=0; while BASS_RecordSetInput(i,BASS_INPUT_OFF) do Inc(i); BASS_RecordSetInput(input,BASS_INPUT_ON); end;
[b:c8af2a90b4]Para selecionar dispositivos de saída:[/b:c8af2a90b4]
Adiciona os dispositivos ao ComboBox:
var x: Integer; begin x := 0; while (BASS_GetDeviceDescription(x) <> nil ) do begin cmbAuDispositivos.Items.Add(BASS_GetDeviceDescription(x)); Inc(x); end; ComboBox2.ItemIndex := 1; begin
Depois basta passar o ItemIndex do ComboBox como primeiro parâmetro do BASS_Init.
GOSTEI 0
Marcos Silva
19/02/2004
Colega cebikyn ve esse tópico é tenho uma dúvida. usando os procidimentos citados acima, como posso pausar a gravação feia com a bass é depois contuinuar, hoje não consigo fazer isso gravo sem parar pode me ajudar.
GOSTEI 0