none
Windows7 64位 使用WMEncoder.exe 64 实现录音,找不到WMEncoder.ProfileCollection RRS feed

  • 问题

  • 我用VB.net + WMEncoder.exe 和 引入Interop.WMEncoderLib.dll开发了个小的录音功能(麦克上作为输入源)。在XP下好用,

    可是在Win7 64位下,出现初始化WMEncoder对象的错误。

    对策1,于是我又下了WMEncoder.exe 64,引入C:\Program Files\Windows Media Components\Encoder\WMEncEng.dll

    安装后,初始化可以了,但是找不到ProfileCollection下可用的资源文件了。。有知道的高手请指点。。急呀。。

    对策2,如果我还用XP下的Dll文件,引入Interop.WMEncoderLib.dll或是C:\Program Files(x86)\Windows Media Components\Encoder\WMEncEng.dll文件,把。net的编译模式(CPU)改成X86,这样就和Xp下一样,能找到ProfileCollection下的资源文件,但是m_WMEncoder.PrepareToEncode(True)出现异常,"找不到设备的驱动文件"。

    代码

                dim m_WMEncoder As New WMEncoder
                Dim sg As IWMEncSourceGroup = m_WMEncoder.SourceGroupCollection.Add("SG_1")
                sg.AddSource(WMENC_SOURCE_TYPE.WMENC_AUDIO).SetInput("Default_Audio_Device", "DEVICE", "")
                m_WMEncoder.File.LocalFileName = strSavePath
    
                For i As Integer = 0 To m_WMEncoder.ProfileCollection.Count - 1
                    If m_WMEncoder.ProfileCollection.Item(i).Name = "Windows Media Audio 8 for Dial-up Modem (CD quality, 64 Kbps)" Then
                        sg.Profile = m_WMEncoder.ProfileCollection.Item(i)
                        Exit For
                    End If
                Next
                m_WMEncoder.PrepareToEncode(True)
                m_WMEncoder.Start()

    m_WMEncoder.ProfileCollection.Count 这句话,在XP下能得到33个资源文件,可是在Win7 64下是0。真是不知道问题出在哪。求达人指点。谢谢!!!

    而且,所谓的设备驱动是什么呀?不是很明白?求高手指点,郁闷了好几天了!!

    2012年9月3日 7:52

答案

  • 我试了下你的代码,没问题, 我的环境是win7 64位企业版。

    这里我说下我的操作顺序:

    1, 我不是直接引用那个dll文件,而是选择引用com组件,就是在添加reference时,不是选择browser,而是选择com, 然后“windows Media Encoder”, 其对应的文件是C:\Program Files (x86)\Windows Media Components\Encoder\wmenc.exe

    然后原样复制了你的代码,编译,执行,得到如下结果:

    你再看看?


    Mike Feng
    MSDN Community Support | Feedback to us
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 画皮 2012年9月6日 6:04
    2012年9月5日 6:31
    版主

全部回复

  • 木有人理我。。表示很无助。。。
    2012年9月4日 1:45
  • 表伤心, 我来试试。

    不要用XP上的DLL,就用win7上的,因为这个是跟硬件相关的,所以你看看你是不是指定了声卡。


    Mike Feng
    MSDN Community Support | Feedback to us
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2012年9月4日 8:08
    版主
  • 表伤心, 我来试试。

    不要用XP上的DLL,就用win7上的,因为这个是跟硬件相关的,所以你看看你是不是指定了声卡。


    Mike Feng
    MSDN Community Support | Feedback to us
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    唉。。。吆。。,可算有人拉。哇哈哈

    没指定声卡呀,关键代码就上面那么几行,按理说应该用Win7下的Dll,但是它为什么取不到系统的配置文件呢,其实就是读C:\WINDOWS\WMSysPr9.prx文件内容,可是却读不到,但Xp下就好用。。。版主大人,你要救我呀。。

    2012年9月4日 9:07
  • 我试了下你的代码,没问题, 我的环境是win7 64位企业版。

    这里我说下我的操作顺序:

    1, 我不是直接引用那个dll文件,而是选择引用com组件,就是在添加reference时,不是选择browser,而是选择com, 然后“windows Media Encoder”, 其对应的文件是C:\Program Files (x86)\Windows Media Components\Encoder\wmenc.exe

    然后原样复制了你的代码,编译,执行,得到如下结果:

    你再看看?


    Mike Feng
    MSDN Community Support | Feedback to us
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 画皮 2012年9月6日 6:04
    2012年9月5日 6:31
    版主
  • 还有,我是从这边下载的Windows Media Encoder:http://www.microsoft.com/en-us/download/details.aspx?id=17792 

    Mike Feng
    MSDN Community Support | Feedback to us
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2012年9月5日 6:33
    版主
  • 还有,我是从这边下载的Windows Media Encoder:http://www.microsoft.com/en-us/download/details.aspx?id=17792 

    Mike Feng
    MSDN Community Support | Feedback to us
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    看到你的回复我就热泪盈眶啦,好不好用我先谢谢你的这份认真。。我现在就去调查。哈哈
    2012年9月5日 10:53
  • 试过了,请问你用的Win7 64 位,在编译是Cpu是选的X86吗?

    我按你的方法,如果编译Cpu选AnyCpu的换,直接在 New WMEncoder的时候就出错了,说是初期花失败。

    如果改成X86编译,按你上面的添加Com 的方法,真好用啦。。。。哈哈。。谢谢。很是感谢!!!!!

    但是我还有一事不明,就是我  选择browser,然后在添加Dll文件,和你这种方法有啥区别呀???我就因为这个地方卡了我三天。。我郁闷呀。。。求解释!!

    对您的帮助再次表示感谢!!

    2012年9月5日 11:14
  • >>请问你用的Win7 64 位,在编译是Cpu是选的X86吗?

    是的。

    >>如果编译Cpu选AnyCpu的换,直接在 New WMEncoder的时候就出错了,说是初期花失败。

    这些COM组件都是32位的,当你选AnyCPU时,在32位机器上运行的时,运行时会load32位的版本,在64位机器上运行时,会load对应的64位版本,如果没有嘛就报错咯。

    >>就是我  选择browser,然后在添加Dll文件,和你这种方法有啥区别呀???

    除了加载的文件不一样之外,其他好像没什么区别。这里你也可以浏览那个EXE文件。具体加载那个DLL应该是都行的,只要里面有你要的东西(WMEncoder)。而且我按你说的也试了下,在我这边是可以的,没有问题。


    Mike Feng
    MSDN Community Support | Feedback to us
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2012年9月6日 2:01
    版主
  • 谢谢你的详细回答。

    我的直接加载Dll就是不好用,真是无语了。。

    总的来说,在你的大力帮助下好用了,谢谢版主!!牛逼。

    2012年9月6日 6:04
  • 呃,不客气。

    Mike Feng
    MSDN Community Support | Feedback to us
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2012年9月6日 7:07
    版主
  • 呃,不客气。

    Mike Feng
    MSDN Community Support | Feedback to us
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    版主,我又来了。。现在我用win7 32 下面又不好用了,因为是在客户的电脑上也没有开放环境,直接提示系统错误,我通过打log发现Dim m_WMEncoder As New WMEncoder这句出错了,能不能帮帮我,咋解决呀。。
    2012年9月14日 8:58
  • 现在用的是wmEnc.exe 组件,我怎么注册的他呀??郁闷了
    2012年9月14日 11:17
  • 你下载完这个 安装好了 就注册好了 : http://www.microsoft.com/en-us/download/details.aspx?id=17792

    当你部署到客户机上时 这个也是要安装的

     

    Mike Feng
    MSDN Community Support | Feedback to us
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2012年9月17日 2:20
    版主
  • 你下载完这个 安装好了 就注册好了 : http://www.microsoft.com/en-us/download/details.aspx?id=17792

    当你部署到客户机上时 这个也是要安装的

     

    Mike Feng
    MSDN Community Support | Feedback to us
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    我下载了,在客户机器上也安装了,问题依旧。

    但是,如果我在以上步骤上在加个注册 regsvr32.exe C:\Program Files\Windows Media Components\Encoder\wmEncEng.dll,那么上面的Dim m_WMEncoder As New WMEncoder就没问题了,但是m_WMEncoder.Start() 就是开始录音时,提示我"类没有注册"我就莫名其妙了。因为现在是引用的Com组件也就是wmEnc.exe 组件,是不是我需要注册它呀??怎么注册.exe 组件?被搞迷糊了,求版主指点。谢谢!

    2012年9月18日 2:20
  • 它不是应该是在这个文件夹下么 C:\Program Files (x86)\Windows Media Components\Encoder?

    你现在程序的平台是什么? x86,x64,还是anycpu?

    我这边建议你以管理员权限运行C:\Windows\SysWOW64\cmd.exe 再次注册 regsvr32  "C:\Program Files (x86)\Windows Media Components\Encoder\WMEncEng.dll" 

    希望有用。


    Mike Feng
    MSDN Community Support | Feedback to us
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2012年9月18日 2:56
    版主
  • 它不是应该是在这个文件夹下么 C:\Program Files (x86)\Windows Media Components\Encoder?

    你现在程序的平台是什么? x86,x64,还是anycpu?

    我这边建议你以管理员权限运行C:\Windows\SysWOW64\cmd.exe 再次注册 regsvr32  "C:\Program Files (x86)\Windows Media Components\Encoder\WMEncEng.dll" 

    希望有用。


    Mike Feng
    MSDN Community Support | Feedback to us
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    谢谢你的回答。

    情况是这样的,我原来第一次做的是Win7 64 位,运行是在x86下,按照你提供的方法,运行成功,没有问题。

    现在客户的机器又出现了win7 32位。在32位上,原来的程序就出现以上问题。(win7 32位下 它就在C:\Program Files\Windows Media Components\Encoder\文件下面了)

    我注册的时候是用的管理员权限下运行的cmd.exe的方法做的。

    还有就是现在是引用wmEnc.exe 组件,它不用注册吗?还有我用WIndosw自带的组件服务,手动安装注册了WMEncEng.dll,也是同样问题,Dim m_WMEncoder As New WMEncoder就没问题了,但是m_WMEncoder.Start() 就是开始录音时,提示我"类没有注册"。

    谢谢你在百忙之中的帮助,很是感谢!

    2012年9月18日 3:55
  • 正常情况下,当你安装完好后,相应的组件就都已经注册了。

    这样你查查哪个DLL里实现了start方法,然后再注册那个dll一遍


    Mike Feng
    MSDN Community Support | Feedback to us
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2012年9月18日 5:19
    版主
  • 正常情况下,当你安装完好后,相应的组件就都已经注册了。

    这样你查查哪个DLL里实现了start方法,然后再注册那个dll一遍


    Mike Feng
    MSDN Community Support | Feedback to us
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    通过FramWork的移动到定义来看,在编译完的\bin\Debug\路径下有个『Interop.WMEncoderLib.dll』文件,应该是调用的他里面的Start方法,但是我通过上面的方法注册这个Dll,提示我DllRegisterServer入口找不到。。这是怎么回事呀。。。

    我的注册方法是把Interop.WMEncoderLib.dll复制到C:\Program Files\Windows Media Components\Encoder\下面,然后在管理员权限下运行regsvr32  "C:\Program Files \Windows Media Components\Encoder\Interop.WMEncoderLib.dll"

    顺便问一下,我在注册Dll的时候,比如我想注册Interop.WMEncoderLib.dll,我把它拷皮到C:/windos下注册可以吗?还是必须注册到我现在程序中的位置,比如\bin\DebugInterop.WMEncoderLib.dll下?

    2012年9月18日 7:09