Vista 下的录音问题

xt_jat 2008-03-07 09:48:27
有哪位做个在Vista下录音的程序吗? 就是把当前计算机播放的声音录制下来。
希望能给个思路,当然有一些例子代码更是感谢。以前在xp下的代码工作不正常了。感觉有些原理不一样了
...全文
415 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
duyanbin_sy 2008-03-19
  • 打赏
  • 举报
回复
实际上在VIST下已经没有选择MIC作为当前LINE的功能了.
MIC已经变成设备了,如果用MIC时需要取得MIC的设备号
duyanbin_sy 2008-03-17
  • 打赏
  • 举报
回复
准确的说不是你进行录音(录音应该用WAVEIN类的API),而是控制OS的当前录音设备(应该用MIXER类的API)。

从你的代码和错误现象上看VISTA的声卡类型是HDA的(高保真的)。
XP的设备是AC97的。。

设备类型不同,导致你的代码失效。
jixingzhong 2008-03-14
  • 打赏
  • 举报
回复
看看 ···
xt_jat 2008-03-14
  • 打赏
  • 举报
回复
void SelectMic()
{
// Open the mixer device
HMIXER hmx;
mixerOpen(&hmx, 0, 0, 0, 0);

// Get the line info for the wave in destination line
MIXERLINE mxl;
memset(&mxl, 0, sizeof(mxl)) ;
mxl.cbStruct = sizeof(mxl);
mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
mixerGetLineInfo((HMIXEROBJ)hmx, &mxl,
MIXER_GETLINEINFOF_COMPONENTTYPE);

// Find a LIST control, if any, for the wave in line
LPMIXERCONTROL pmxctrl = (LPMIXERCONTROL)malloc(mxl.cControls * sizeof
MIXERCONTROL);
MIXERLINECONTROLS mxlctrl = {sizeof mxlctrl, mxl.dwLineID, 0,
mxl.cControls, sizeof MIXERCONTROL, pmxctrl};
mixerGetLineControls((HMIXEROBJ) hmx, &mxlctrl,
MIXER_GETLINECONTROLSF_ALL);

// Now walk through each control to find a type of LIST control. This
// can be either Mux, Single-select, Mixer or Multiple-select.
DWORD i;
for(i=0; i < mxl.cControls; i++)
if (MIXERCONTROL_CT_CLASS_LIST == (pmxctrl[i].dwControlType
&MIXERCONTROL_CT_CLASS_MASK))
break;
if (i < mxl.cControls) { // Found a LIST control
// Check if the LIST control is a Mux or Single-select type
BOOL bOneItemOnly = FALSE;
switch (pmxctrl[i].dwControlType) {
case MIXERCONTROL_CONTROLTYPE_MUX:
case MIXERCONTROL_CONTROLTYPE_SINGLESELECT:
bOneItemOnly = TRUE;
}

DWORD cChannels = mxl.cChannels, cMultipleItems = 0;
if (MIXERCONTROL_CONTROLF_UNIFORM & pmxctrl[i].fdwControl)
cChannels = 1;
if (MIXERCONTROL_CONTROLF_MULTIPLE & pmxctrl[i].fdwControl)
cMultipleItems = pmxctrl[i].cMultipleItems;

// Get the text description of each item
LPMIXERCONTROLDETAILS_LISTTEXT plisttext =
(LPMIXERCONTROLDETAILS_LISTTEXT)
malloc(cChannels * cMultipleItems * sizeof
MIXERCONTROLDETAILS_LISTTEXT);
MIXERCONTROLDETAILS mxcd = {sizeof(mxcd), pmxctrl[i].dwControlID,
cChannels,
(HWND)cMultipleItems, sizeof MIXERCONTROLDETAILS_LISTTEXT,
(LPVOID) plisttext};
mixerGetControlDetails((HMIXEROBJ)hmx, &mxcd,
MIXER_GETCONTROLDETAILSF_LISTTEXT);

// Now get the value for each item
LPMIXERCONTROLDETAILS_BOOLEAN plistbool =
(LPMIXERCONTROLDETAILS_BOOLEAN)
malloc(cChannels * cMultipleItems * sizeof
MIXERCONTROLDETAILS_BOOLEAN);
mxcd.cbDetails = sizeof MIXERCONTROLDETAILS_BOOLEAN;
mxcd.paDetails = plistbool;
mixerGetControlDetails((HMIXEROBJ)hmx, &mxcd,
MIXER_GETCONTROLDETAILSF_VALUE);

// Select the "Microphone" item
for (DWORD j=0; j<cMultipleItems; j = j + cChannels)
if (0 == strcmp(plisttext[j].szName, "Microphone"))
// Select it for both left and right channels
plistbool[j].fValue = plistbool[j+ cChannels - 1].fValue = 1;
else if (bOneItemOnly)
// Mux or Single-select allows only one item to be selected
// so clear other items as necessary
plistbool[j].fValue = plistbool[j+ cChannels - 1].fValue = 0;
// Now actually set the new values in
mixerSetControlDetails((HMIXEROBJ)hmx, &mxcd,
MIXER_GETCONTROLDETAILSF_VALUE);

free(pmxctrl);
free(plisttext);
free(plistbool);
}
else
free(pmxctrl);
mixerClose(hmx);
}

我用上面的代码选择录音设备,用MCI录音。
在xp下工作正常。在vista下,就没有声音了,不知道是为什么
scq2099yt 2008-03-14
  • 打赏
  • 举报
回复
ding
wj59 2008-03-14
  • 打赏
  • 举报
回复
vista audio 的编程模式不同于以往,原来的vfw 和 directx 代码虽然可用,但有问题;给你个连接参考一下http://www.ieee.org.cn/dispbbs.asp?boardID=61&ID=49623
duyanbin_sy 2008-03-10
  • 打赏
  • 举报
回复
用什么函数进行录音?WaveIn类的吗?
xt_jat 2008-03-08
  • 打赏
  • 举报
回复
好像问题出在选择声卡的录音设备,不知道在vista下怎么选择
xt_jat 2008-03-08
  • 打赏
  • 举报
回复
普通的声卡
duyanbin_sy 2008-03-07
  • 打赏
  • 举报
回复
我做过MIC的录音,XP和VISTA没有差别啊.
是不是声卡类型不一样啊,设备的ID变了.
lucian2007 2008-03-07
  • 打赏
  • 举报
回复
采集卡是普通的声卡设备么??还是比较特殊的采集卡。
wgm001 2008-03-07
  • 打赏
  • 举报
回复
帮顶帮顶!
MP3音频录音机是一款运行于个人计算机上的功能强大的录音、播放软件。使用它,您可将计算机内部或外部声音(如来自麦克风、线路输入、INTERNET的广播或各影音播放软件正在播放的声音)永久保存到硬盘上。 MP3音频录音机完美支持最新的Realteck HD声卡,支持XP/VISTA/WIN7 32位/WIN7 64位操作系统。 它的主要功能如下: 1、可将录音文件保存为WAV、MP3、WMA格式。对于MP3及WMA格式文件均直接生成,无需生成中间文件及极为耗费时间的转化过程。 2、可对录音文件进行编辑。软件提供常用的音频编辑功能,如截取、复制、合并多个文件等。 3、任务计划功能。您可使用本软件提供的日程管理功能,设定软件在每天、每周或具体某一天的指定时间段内录音录音文件名可手工指定或由系统自动生成。 4、换肤功能,我们在软件内为您提供了12种皮肤界面,您可依个人喜好更改之。 5、支持多声卡。 6、后台静默方式录音功能,您可自定义热键以隐藏或显示软件前台界面,默认切换热键为Ctrl S。 7、音频文件信息写入功能,您可将设定标题、艺术者、专集、作曲家、年代等信息并将以上信息写入到您录音后保存的音频文件内。 8、热键功能,您可使用热键F5(录音)、F6(播放)、F7(暂停/继续)、F8(停止)来完成录音过程,无需操作鼠标,以避免录音中出现由于鼠标点击而产生的噪音。 9、较之其它国内外录音软件,本软件界面更友好,操作更方便。您可只在本程序中选定录音源、设置保存文件并开始录音,无需繁杂的系统设置。 10、新版提供了自动录音功能。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧