[Biblioteka BASS]Jak nagrywać na raz dźwięki z mikrofonu...

0

Jak nagrywać na raz dźwięki z mikrofonu i głośników za pomocą biblioteki bass?? Próbowałem na wiele sposobów ale za każdym razem nagrywało mi tylko to co jest na drugim kanale [glowa] .
Z góry dziękuję za pomoc :-)
Pozdrawiam Magx2

0

<ort>na pewno </ort>da się nagrywać <ort>po prostu </ort>podczas wybierania urządzenia w jednym kanale ustaw żeby nagrywał z mikrofonu a w drugim bodajże opcja "Mix Stereo" albo "Wave Out Mix" czy jakoś tak i po problemie. Co do samego nagrywania to jak pobierzesz bass.dll to masz tam przykład jak nagrywać z dowolnego źródła wystarczy że przerobisz żeby nagrywał z dwóch jednocześnie a da się to zrobić bo sam coś takiego pisałem i nagrywałem z 8 różnych źródeł.

0

Ja też właśnie przerabiam ten plik z przykładów.
Tylko nie wiem jak włączyć żeby na 2 kanały nagrywało. Mam taki o kod:

(* Start recording to memory *)
procedure TNagrywarka.StartRecording;
var
  i : Integer;
  Data : String;
begin
if ComboBox1.ItemIndex < 0 then Exit;  //tutaj jest mix stereo
if ComboBox2.ItemIndex < 0 then Exit; //tutaj jest mikrofon
if WaveStream.Size > 0 then
  begin	// free old recording
	  BASS_StreamFree(chan);
		WaveStream.Clear;
  end;
// generate header for WAV file
with WaveHdr do
  begin
	  riff := 'RIFF';
		len := 36;
		cWavFmt := 'WAVEfmt ';
		dwHdrLen := 16;
		wFormat := 1;
		wNumChannels := 2;
		dwSampleRate := 44100;
		wBlockAlign := 4;
		dwBytesPerSec := 176400;
		wBitsPerSample := 16;
    cData:= 'data';
		dwDataLen := 0;
  end;
WaveStream.Write(WaveHdr, SizeOf(WAVHDR));
i:= 0;
while BASS_RecordSetInput(i, BASS_INPUT_OFF) do Inc(i);
BASS_RecordSetInput(ComboBox1.ItemIndex, BASS_INPUT_ON);
BASS_RecordSetInput(ComboBox2.ItemIndex, BASS_INPUT_ON); //Teraz jak włączam nagrywanie to nagrywa tylko z tego drugiego źródła
// start recording @ 44100hz 16-bit stereo
rchan:= BASS_RecordStart(44100, 2, 0, @RecordingCallback, 0);
if rchan = 0 then
  begin
		MessageDlg('Nie moge rozpocząc nagrywania.', mtError, [mbOk], 0);
		WaveStream.Clear;
	end else
  begin
		SBPlay.Enabled := False;
		SBSave.Enabled := False;
    SBRec.Glyph.LoadFromFile(ExtractFilePath(Application.ExeName) + '/images/Rec_2.bmp');
  end;
end;

Próbowałem nagrywać z 2 strumieniami ale wtedy około co 1 sec przerywało. Jak mógłbyś wstawić jakiś kod czy coś.
Dzięki za poświęcenie swojego czasu :).

0

Powiem ci dlaczego ci nie nagrywa tak jak potrzeba. Jak zainicjujesz nagrywanie ze źródł np. 0 to potem ustawiasz mu z którego wejśca ma nagrywać. I tu jest twój problem bo najpierw ustawiasz że z mikrofonu a następnie zmieniasz na Mix Stereo (czy na odwrót nieważne :) ). Musiałbyś zainicjować nagrywanie dwa razy za każdym razem z innym wejściem. Ja nie miałem tego problemu bo używałem kilku różnych źródeł a wejście zawsze było takie samo (mikrofon) nie jestem teraz w domu ale jak będę wieczorem to sprubuje to zrobić u siebie. A na razie masz fragment mojego programu odpowiadający za nagrywanie, może coś wymyślisz do tego czasu:

Var
RChan: array [0..5] of HRECORD;

procedure TForm1.StartRecord(UserI: Integer);
Var
Commands, FileName : String;
Dev, Inp, Lev, I, X: Integer;
begin
Dev := 0; //Ustawiasz z którego źródła ma nagrywać
Inp := 0; //Które wejście
Lev := 1; //Poziom nagrywania

if BASS_RecordInit(Dev) then BASS_RecordFree();

BASS_RecordInit(Dev);
I := 0;
while BASS_RecordSetInput(i, BASS_INPUT_OFF, -1) do Inc(I);

BASS_RecordSetInput(Inp, BASS_INPUT_ON, Lev);

RChan[UserI] := BASS_RecordStart(44100, 1, BASS_RECORD_PAUSE, @RecordingCallback, 0);

if RChan[UserI] = 0 then begin
ShowMessage('Nie można rozpocząć nagrywania. Sprawdź czy urządzenie jest podłączone prawidłowo.');
Exit;
end;

FileName := 'Nazwa pliku.mp3'

Commands := 'lame.exe -b 96 - ' + FileName;

if (BASS_Encode_Start(RChan[UserI], PChar(Commands), BASS_ENCODE_AUTOFREE, nil, 0) = 0) then
begin
ShowMessage('Błąd...');

BASS_ChannelStop(RChan[UserI]);
RChan[UserI] := 0;
Exit;
end;
BASS_ChannelPlay(RChan[UserI], FALSE);
0
BASS_RecordSetInput(ComboBox1.ItemIndex, BASS_INPUT_ON, 0); // tutaj jak dodałem ", 0" to jest błąd że za dużo parametrów?? O co chodzi?? U ciebie to działa
BASS_RecordSetInput(ComboBox2.ItemIndex, BASS_INPUT_ON, 1); //j.w.

@Edit
Już działa :).
A zrobiłem tak:

BASS_RecordInit(0);
BASS_RecordSetInput(ComboBox1.ItemIndex, BASS_INPUT_ON);

BASS_RecordInit(1);
BASS_RecordSetInput(ComboBox2.ItemIndex, BASS_INPUT_ON);

1 użytkowników online, w tym zalogowanych: 0, gości: 1