我搜索了一些例子,发现了这个:
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)
它只录制麦克风,我可以同时录制扬声器和麦克风吗?还是分开?
执行此操作的能力在很大程度上取决于您使用的 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