⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 u_vcbassdemo_main.pas

📁 Voice Commnucation Components for Delphi
💻 PAS
📖 第 1 页 / 共 3 页
字号:
    //
    // channels
    c_comboBox_musicChannel.clear();
    c_trackBar_musicChannelVolume.position := 0;
    c_trackBar_musicChannelVolume.enabled := false;
    //
    a_bass_musicPlay.Enabled := false;
    a_bass_musicStop.Enabled := false;
    a_bass_musicUnload.Enabled := false;
  end;
  //
  f_noChangeTrack := false;
end;

// --  --
procedure Tc_form_main.c_listBox_musicModulesClick(Sender: TObject);
begin
  updateMusicInfo(true);
end;

// --  --
procedure Tc_form_main.c_trackBar_musicAmpChange(Sender: TObject);
var
  music: unaBassMusic;
begin
  if (not f_noChangeTrack) then begin
    music := getSelectedMusic();
    if (nil <> music) then
      music.set_ampLevel(c_trackBar_musicAmp.position);
  end;    
end;

// --  --
procedure Tc_form_main.c_trackBar_musicPanChange(Sender: TObject);
var
  music: unaBassMusic;
begin
  if (not f_noChangeTrack) then begin
    music := getSelectedMusic();
    if (nil <> music) then
      music.set_panSeparation(c_trackBar_musicPan.position);
  end;    
end;

// --  --
procedure Tc_form_main.c_trackBar_musicChannelVolumeChange(Sender: TObject);
var
  music: unaBassMusic;
begin
  if (not f_noChangeTrack) then begin
    music := getSelectedMusic();
    if (nil <> music) then
      if (0 <= c_comboBox_musicChannel.itemIndex) then
	music.set_channelVol(c_comboBox_musicChannel.itemIndex, c_trackBar_musicChannelVolume.position);
  end;	
end;

// --  --
procedure Tc_form_main.c_trackBar_musicPosChange(Sender: TObject);
var
  music: unaBassMusic;
begin
  if (not f_noChangeTrack) then begin
    //
    music := getSelectedMusic();
    if (nil <> music) then
{$IFDEF BASS_AFTER_21 }
      // fucked in 2.2
      music.asChannel.set_position(music.seconds2bytes(c_trackBar_musicPos.position));
{$ELSE }
      music.asChannel.set_position(c_trackBar_musicPos.position and $FFFF, true);
{$ENDIF }
    //
  end;
end;

//=============== CD ===================

// --  --
procedure Tc_form_main.updateCDinfo();
var
  t: unsigned;
  c: int;
begin
  c_memo_cdInfo.clear();
  c_comboBox_cdTrack.clear();
  c_checkBox_cdInDrive.checked := false;
  //
  if ((nil <> f_bass) and (' ' <> f_cdDrive)) then begin
    //
    c := f_bass.cd_get_tracks();
    if ((0 <= c) and f_bass.cd_inDrive()) then begin
      c_memo_cdInfo.lines.add('CDID_IDENTITY=' + f_bass.cd_get_ID(BASS_CDID_IDENTITY));
      c_memo_cdInfo.lines.add('CDID_UPC=' + f_bass.cd_get_ID(BASS_CDID_UPC));
      c_memo_cdInfo.lines.add('CDID_CDDB=' + f_bass.cd_get_ID(BASS_CDID_CDDB));
      c_memo_cdInfo.lines.add('CDID_CDDB2=' + f_bass.cd_get_ID(BASS_CDID_CDDB2));
      c_memo_cdInfo.lines.add('-------');
      c_memo_cdInfo.lines.add('Track count=' + int2str(c));
    end
    else
      c_memo_cdInfo.lines.add('<no disc in drive>');
    //
    c_checkBox_cdInDrive.checked := f_bass.cd_inDrive();
    //
    if (f_bass.cd_inDrive()) then begin
      //
      for t := 1 to c do
	c_comboBox_cdTrack.items.add(int2str(t));
    end;
  end;
end;

// --  --
procedure Tc_form_main.c_button_updateCDinfoClick(Sender: TObject);
begin
  updateCDinfo();
end;

// --  --
procedure Tc_form_main.enumCD();
var
  volume: string;
  d: char;
begin
  c_comboBox_cdDrive.clear();
  f_cdDrive := ' ';
  //
  volume := 'x:\';
  for d := 'A' to 'Z' do begin
    volume[1] := d;
    if (DRIVE_CDROM = Windows.GetDriveType(pChar(volume))) then
      c_comboBox_cdDrive.items.add(volume);
  end;
  //
  if (0 < c_comboBox_cdDrive.items.count) then begin
    c_comboBox_cdDrive.itemIndex := 0;
    //a_bass_cdInit.Execute();
    c_comboBox_cdDriveChange(nil);
  end
  else begin
    a_bass_cdInit.Enabled := false;
    a_bass_cdFree.Enabled := false;
  end;
end;

// --  --
procedure Tc_form_main.a_bass_cdInitExecute(Sender: TObject);
begin
  if (nil <> f_bass) then begin
    //
    if (' ' <> f_cdDrive) then
      f_bass.cd_free();
    //
    f_cdDrive := getSelectedCDDrive();
    if (' ' <> f_cdDrive) then
      if (not f_bass.cd_init(f_cdDrive, 0)) then begin
	showMessage('CD_Init() for drive ' + f_cdDrive + ':\ fails, error code=' + int2str(f_bass.get_errorCode()));
	f_cdDrive := ' ';
      end;
    //
    updateCDinfo();	
    //
    c_comboBox_cdDriveChange(sender);
  end;
end;

// --  --
procedure Tc_form_main.a_bass_cdFreeExecute(Sender: TObject);
begin
  if (nil <> f_bass) then begin
    //
    if (' ' <> f_cdDrive) then
      f_bass.cd_free();
  end;
  //
  f_cdDrive := ' ';
  c_comboBox_cdDriveChange(sender);
  //
  updateCDinfo();
end;

// --  --
procedure Tc_form_main.c_comboBox_cdDriveChange(Sender: TObject);
var
  newDrive: char;
begin
  newDrive := getSelectedCDDrive();
  a_bass_cdInit.Enabled := (newDrive <> f_cdDrive);
  a_bass_cdFree.Enabled := not a_bass_cdInit.Enabled;
  //
  c_label_cdDrive.caption := 'Initialized CD Drive: ' + f_cdDrive;
end;

// --  --
function Tc_form_main.getSelectedCDDrive(): char;
var
  drive: string;
begin
  result := ' ';
  //
  if (0 <= c_comboBox_cdDrive.itemIndex) then begin
    drive := c_comboBox_cdDrive.items[c_comboBox_cdDrive.itemIndex];
    if (1 < length(drive)) then
      result := drive[1];
  end;
end;

// --  --
procedure Tc_form_main.a_bass_cdDoorOpenExecute(Sender: TObject);
begin
  if (nil <> f_bass) then
    f_bass.cd_door(true);
end;

// --  --
procedure Tc_form_main.a_bass_cdDoorCloseExecute(Sender: TObject);
begin
  if (nil <> f_bass) then
    f_bass.cd_door(false);
end;

// --  --
procedure Tc_form_main.a_bass_cdTrackPlayExecute(Sender: TObject);
begin
  if (nil <> f_bass) then
    f_bass.cd_play(c_comboBox_cdTrack.itemIndex + 1, c_checkBox_cdTrackPlayLoop.checked, false);
end;

// --  --
procedure Tc_form_main.a_bass_cdTrackStopExecute(Sender: TObject);
begin
  if (nil <> f_bass) then
    f_bass.cd_stop();
end;

// ================= FILE STREAM =================

// --  --
procedure Tc_form_main.a_bass_streamBrowseExecute(Sender: TObject);
begin
  if (c_openDialog_stream.execute()) then
    c_edit_streamPath.Text := c_openDialog_stream.fileName;
end;

// --  --
function Tc_form_main.getStreamFlags(): DWORD;
begin
  result := 0;
  with (c_checkListBox_streamFlags) do begin
    //
    if (checked[0]) then
      result := result or BASS_SAMPLE_3D;
    if (checked[1]) then
      result := result or BASS_SAMPLE_MONO;
    if (checked[2]) then
      result := result or BASS_SAMPLE_LOOP;
    if (checked[3]) then
      result := result or BASS_SAMPLE_FX;
    if (checked[4]) then
      result := result or BASS_MP3_HALFRATE;
    if (checked[5]) then
      result := result or BASS_MP3_SETPOS;
  end;
end;

// --  --
function Tc_form_main.getSelectedStream(): unaBassStream;
begin
  if ((nil <> f_bass) and (LB_ERR <> sendMessage(c_listBox_streamModules.handle, LB_GETCURSEL, 0, 0))) then
    result := unaBassStream(c_listBox_streamModules.items.objects[c_listBox_streamModules.itemIndex])
  else
    result := nil;
end;

// --  --
procedure Tc_form_main.updateStreamInfo();
var
  stream: unaBassStream;
  len: int64;
  pos: int64;
begin
  f_noChangeTrack := true;
  //
  stream := getSelectedStream();
  if (nil <> stream) then begin
    // stream
    len := stream.get_length();
    c_label_streamLength.caption := 'Length: ' + floatToStrF(stream.bytes2seconds(len), ffFixed, 8, 2) + ' sec.';
    //
    pos := stream.asChannel.get_position();
    if (0 <= pos) then begin
      //
      c_label_streamPos.caption := 'Position: ' + floatToStrF(stream.bytes2seconds(pos), ffFixed, 8, 2) + ' sec.';
      c_trackBar_streamPos.position := percent(pos, len);
      c_trackBar_streamPos.enabled := true;
    end
    else begin
      //
      c_label_streamPos.caption := 'Position: 0.00 sec.';
      c_trackBar_streamPos.position := 0;
      c_trackBar_streamPos.enabled := false;
    end;
    //
    a_bass_streamPlay.Enabled := true;
    a_bass_streamStop.Enabled := true;
    a_bass_streamUnload.Enabled := true;
  end
  else begin
    // no stream
    c_label_streamLength.Caption := 'Length: 0.00 sec.';
    c_label_streamPos.caption := 'Position: 0.00 sec.';
    //
    c_trackBar_streamPos.position := 0;
    c_trackBar_streamPos.enabled := false;
    //
    a_bass_streamPlay.Enabled := false;
    a_bass_streamStop.Enabled := false;
    a_bass_streamUnload.Enabled := false;
  end;
  //
  f_noChangeTrack := false;
end;

// --  --
procedure Tc_form_main.c_edit_streamPathChange(Sender: TObject);
begin
  a_bass_streamLoad.Enabled := fileExists(c_edit_streamPath.text);
end;

// --  --
procedure Tc_form_main.a_bass_streamLoadExecute(Sender: TObject);
var
  flags: DWORD;
  stream: unaBassStream;
begin
  if ((nil <> f_bass) and fileExists(c_edit_streamPath.text)) then begin
    // try to add new stream
    flags := getStreamFlags();
    stream := unaBassStream.create(f_bass);
    stream.createStream(c_edit_streamPath.text, 0, 0, flags);
    if (0 <> stream.handle) then begin
      c_listBox_streamModules.itemIndex := c_listBox_streamModules.items.addObject(c_edit_streamPath.text, pointer(stream));
      updateStreamInfo();
    end
    else begin
      freeAndNil(stream);
      showMessage('Unable to load stream file, error code=' + int2str(f_bass.get_errorCode()));
    end;
  end;
end;

// --  --
procedure Tc_form_main.a_bass_streamLoadMemExecute(Sender: TObject);
var
  res: unaResourceStream;
  flags: DWORD;
  stream: unaBassStream;
begin
  if (nil <> f_bass) then begin
    res := unaResourceStream.createRes('MEMSTREAM');
    try
      if (nil <> res.data) then begin
	// try to add new stream
	flags := getStreamFlags();
	stream := unaBassStream.create(f_bass);
	stream.createStream(res.data, res.getAvailableSize(), flags);
	if (0 <> stream.handle) then begin
	  //
	  c_listBox_streamModules.itemIndex := c_listBox_streamModules.items.addObject('<stream from memory>', pointer(stream));
	  updateStreamInfo();
	  //
	  showMessage('Music courtesy of Mystic Circle.');
	end
	else begin
	  freeAndNil(stream);
	  showMessage('Unable to load stream, error code=' + int2str(f_bass.get_errorCode()));
	end;
      end
      else
	showMessage('Unable to locate resource.');
    finally
      freeAndNil(res);
    end;
  end;  
end;

// --  --
procedure Tc_form_main.a_bass_streamPlayExecute(Sender: TObject);
var
  stream: unaBassStream;
  flags: DWORD;
begin
  stream := getSelectedStream();
  if (nil <> stream) then begin
    stream.preBuf();
    flags := getStreamFlags();
    if (stream.play(not c_checkListBox_streamFlags.checked[6], flags)) then
      // OK
    else
      showMessage('PlayEx() fails, error code=' + int2str(f_bass.get_errorCode()));
  end;
end;

// --  --
procedure Tc_form_main.a_bass_streamStopExecute(Sender: TObject);
var
  stream: unaBassStream;
begin
  stream := getSelectedStream();
  if (nil <> stream) then
    stream.asChannel.stop();
end;

// --  --
procedure Tc_form_main.a_bass_streamUnloadExecute(Sender: TObject);
var
  stream: unaBassStream;
begin
  stream := getSelectedStream();
  if (nil <> stream) then begin
    //
    freeAndNil(stream);
    c_listBox_streamModules.items.delete(c_listBox_streamModules.itemIndex);
    updateStreamInfo();
  end;
end;

// --  --
procedure Tc_form_main.c_listBox_streamModulesClick(Sender: TObject);
begin
  updateStreamInfo();
end;

// --  --
procedure Tc_form_main.c_trackBar_streamPosChange(Sender: TObject);
var
  stream: unaBassStream;
begin
  if (not f_noChangeTrack) then begin
    //
    stream := getSelectedStream();
    if (nil <> stream) then
{$IFDEF BASS_AFTER_21 }
      // fucked in 2.2
      stream.asChannel.set_position(stream.get_length() * c_trackBar_streamPos.position div 100);
{$ELSE }
      stream.asChannel.set_position(stream.get_length() * c_trackBar_streamPos.position div 100, true);
{$ENDIF }
  end;
end;


end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -