从扬声器或立体声混音录制声音

use*_*585 3 delphi delphi-7

我搜索了一些例子,发现了这个:

var
  op: TMCI_Open_Parms;
  rp: TMCI_Record_Parms;
  sp: TMCI_SaveParms;
begin

  // Open
  op.lpstrDeviceType := 'waveaudio';
  op.lpstrElementName := '';
  if mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT or MCI_OPEN_TYPE, cardinal(@op)) <> 0 then
    raise Exception.Create('MCI error');

  try

    // Record
    rp.dwFrom := 0;
    rp.dwTo := 10000;
    rp.dwCallback := 0;
    if mciSendCommand(op.wDeviceID, MCI_RECORD, MCI_TO or MCI_WAIT, cardinal(@rp)) <> 0 then
      raise Exception.Create('MCI error. No microphone connected to the computer?');

    // Save
    sp.lpfilename := PChar(ExtractFilePath(Application.ExeName) + 'test.wav');
    if mciSendCommand(op.wDeviceID, MCI_SAVE, MCI_SAVE_FILE or MCI_WAIT, cardinal(@sp)) <> 0 then
      raise Exception.Create('MCI error');

  finally
    mciSendCommand(op.wDeviceID, MCI_CLOSE, 0, 0);
  end;
Run Code Online (Sandbox Code Playgroud)

它只录制麦克风,我可以同时录制扬声器和麦克风吗?还是分开?

Sil*_*ior 6

执行此操作的能力在很大程度上取决于您使用的 Windows 版本。

如果您仍在使用 Windows XP,您可能有可用的“软件混音”或“立体声输出”重新编码通道。

但是,如果您使用的是 Windows Vista 或更新版本,则这些频道将不再可用。不是没有使用一些非官方的声卡驱动程序。

这样做的主要原因是,记录整个声卡输出的能力使音频文件的任何数字版权保护无效。

因此,为了实现您的需求,您必须找到一些自定义声音库,它可以直接播放来自 Youtube 的音乐,将您的麦克风与帽子混合并将其输出(记录)到某个文件中。

我认为您可以使用 Bass 声音库 ( http://www.un4seen.com/ )来实现这一点,但我不确定。

另一种选择是使用电缆将Wave Out线路直接连接到Line in端口,然后Line in从麦克风录制内容。还要确保允许您的麦克风声音通过扬声器播放(默认情况下在大多数声卡上禁用以避免可能的声音回声)。

编辑:查看名为 Audacity 的程序后,我发现只有选择 WASAPI 作为声音接口才能录制计算机声音输出。

进一步了解 WASAPI,它似乎是 Windows Vista 中引入的新音频接口。现在我必须承认我以前不知道这件事。

因此,答案似乎在于使用 WASAPI 而不是旧的 MME 音频接口。

在 Google 上快速搜索确实表明有些人已经设法使用 Delphi 的 WASAPI。

现在,由于我对这个新的声音 API 没有任何经验,恐怕除了推荐您了解 WASAPI 并为其找到一些示例之外,我对您的帮助无济于事。

EDIT2:设法找到了一个在 Delphi 中使用 WASAPI 接口进行环回记录的小例子。你可以在这里得到它:

http://4coder.org/delphi-source-code/547/

还在 DelphiPraxis 上找到了一个关于有人在 Delphi 中使用 WASAPI 制作用于环回记录的专用单元的线程,但由于我不是 DelphiPraxis 的成员,因此我无法下载并测试它。

http://www.delphipraxis.net/183977-wasapi-loopback-audio-capturing.html