我搜索了一些例子,发现了这个:
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;
它只录制麦克风,我可以同时录制扬声器和麦克风吗?还是分开?
答案 0 :(得分:4)
执行此操作的能力在很大程度上取决于您使用的Windows版本。
如果您仍在使用Windows XP,则可能会使用&#34;软件混合&#34;或&#34; Stereo out&#34;重新编码频道。
但是,如果您使用的是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