Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2014, 16:52   #1
Fobes
Новичок
Джуниор
 
Регистрация: 21.03.2014
Сообщений: 2
По умолчанию bass.dll в delphi 2010

Всем доброго времени суток, не могу решить проблемку... Нужно записать звук с микрофона, взял для этого bass.dll v2.4 нашел в примерах исходник, отаркыл его в DELPHI 7, все прекрасно скомпилировалось, запустилось и заработало, но мне нужно использовать библиотеку в delphi 2010 и тут началось веселье.

Код:



implementation

{$R *.dfm}

function RecordingCallback(Handle: HRECORD; buffer: Pointer; length, user: DWord): boolean; stdcall;
begin
  if ARecordSet.idpclnt1.Active = True then
  begin
    ARecordSet.idpclnt1.SendBuffer(ARecordSet.idpclnt1.Host,ARecordSet.idpclnt1.Port,buffer);
  end;
	WaveStream.Write(buffer^, length);
	Result := True;
end;

procedure TARecordSet.btn2Click(Sender: TObject);
begin
	BASS_ChannelPlay(chan, True);
end;

procedure TARecordSet.btn3Click(Sender: TObject);
begin
if dlgSave1.Execute then
		WaveStream.SaveToFile(dlgSave1.FileName);
end;

procedure TARecordSet.btn4Click(Sender: TObject);
begin
idpclnt1.Host := '127.0.0.1';

idpclnt1.Active:=True;
rchan := BASS_RecordStart(44100, 2, 0, @RecordingCallback, nil);
end;

procedure TARecordSet.FormClose(Sender: TObject; var Action: TCloseAction);
begin
	Action := caFree;
end;

procedure TARecordSet.FormCreate(Sender: TObject);
var
  i: Integer;
  dName: PChar;
  level: Single;
begin
	// check the correct BASS was loaded
	if (HIWORD(BASS_GetVersion) <> BASSVERSION) then
	begin
		MessageBox(0,'Не верная версия bass.dll', nil,MB_ICONERROR);
		Halt;
	end;
	if (not BASS_RecordInit(-1)) or (not BASS_Init(-1, 44100, 0, Handle, nil)) then
	begin
		BASS_RecordFree;
		BASS_Free();
		MessageDlg('Cannot start default recording device!', mtError, [mbOk], 0);
		Halt;
	end;
	WaveStream := TMemoryStream.Create;
	i := 0;
	dName := BASS_RecordGetInputName(i);
	while dName <> nil do
	begin
		cbb1.Items.Add(StrPas(dName));
		// is this one currently "on"?
		if (BASS_RecordGetInput(i, level) and BASS_INPUT_OFF) = 0 then
        	cbb1.ItemIndex := i;
		Inc(i);
		dName := BASS_RecordGetInputName(i);
	end;
    cbb1Change(Self);	// display info
end;


procedure TARecordSet.FormDestroy(Sender: TObject);
begin
  WaveStream.Free;
	BASS_RecordFree;
	BASS_Free;
	BASS_Stop;
end;

procedure TARecordSet.StartRecording;
begin
	if cbb1.ItemIndex < 0 then Exit;
	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));
	// start recording @ 44100hz 16-bit stereo
	rchan := BASS_RecordStart(44100, 2, 0, @RecordingCallback, nil);
	if rchan = 0 then
	begin
		MessageDlg('Невозможно начать запись!', mtError, [mbOk], 0);
		WaveStream.Clear;
	end
    else
    begin
    btn1.Caption := 'Стоп';
    btn2.Enabled := false;
    btn3.Enabled := False;
    end;
end;

procedure TARecordSet.StopRecording;
var
	i: integer;
begin
	BASS_ChannelStop(rchan);

	// complete the WAV header
	WaveStream.Position := 4;
	i := WaveStream.Size - 8;
	WaveStream.Write(i, 4);
	i := i - $24;
	WaveStream.Position := 40;
	WaveStream.Write(i, 4);
	WaveStream.Position := 0;
	// create a stream from the recorded data
	chan := BASS_StreamCreateFile(false, PChar(WaveStream.Memory), BASS_UNICODE, 0, 0);
	if chan <> 0 then
  begin
		// enable "Play" & "Save" buttons

	end
  else
  begin
      mmo1.Lines.Add(IntToStr(BASS_ErrorGetCode()));
		  MessageDlg('Error creating stream from recorded data!', mtError, [mbOk], 0);
  end;

end;


procedure TARecordSet.tmr1Timer(Sender: TObject);
begin
if WaveStream.Size < 1 then Exit;
    if BASS_ChannelIsActive(chan) = BASS_ACTIVE_STOPPED then
    	lbl3.Caption := IntToStr(WaveStream.Size) else
        lbl3.Caption := IntToStr(BASS_ChannelGetPosition(chan, BASS_POS_BYTE)) + ' / ' + IntToStr(WaveStream.Size);
end;

procedure TARecordSet.trckbr1Change(Sender: TObject);
begin
	BASS_RecordSetInput(cbb1.ItemIndex, 0, trckbr1.Position / 100);
  lbl2.Caption := IntToStr(trckbr1.Position);
end;

end.
все компилируется без ошибок, запись запускажется тоже нормально, но вот когда я использую процедуру остановки записи(TARecordSet.StopRecording, получаю ошибку "2: невозможно открыть файл", помогитей пожалуйста, что я делаю не так ?

Ошибку выдает
Код:
chan := BASS_StreamCreateFile(false, PChar(WaveStream.Memory), BASS_UNICODE, 0, 0);
Fobes вне форума Ответить с цитированием
Старый 18.04.2014, 12:35   #2
Fobes
Новичок
Джуниор
 
Регистрация: 21.03.2014
Сообщений: 2
По умолчанию

ай нид хэлп переместите пожалуйста в мультимедиа
Fobes вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Звуковой осцилограф на Delphi без bass.dll Xaker_Two Помощь студентам 3 24.02.2014 13:18
Delphi + BASS.DLL trojan9912 Мультимедиа в Delphi 4 26.07.2012 04:02
Bass.Dll в Delphi XE не работает. werrey Мультимедиа в Delphi 5 12.06.2011 11:34
Как создать в Delphi mp3 плеер? Без использования bass.dll. megatronx Помощь студентам 2 10.03.2010 17:15
Ошибка при выхове функций Bass.dll из другой DLL SalasAndriy Общие вопросы Delphi 7 21.10.2009 23:36