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

record sound from speakers or stereo mix

我搜索了一些示例并找到了这个:

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;

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

能否做到这一点在很大程度上取决于您使用的 Windows 版本。

如果您仍在使用 Windows XP,您可能有 "Software mix" 或 "Stereo out" 可用的重新编码频道。

但是如果您使用的是 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 制作一个用于环回记录的专用单元,但因为我不是 [=] 的成员59=]Praxis我下载不了测试

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