討論區快速選單
知識庫快速選單
政府補助!學嵌入式+物聯網 軟體開發過程中有哪些資安漏洞?
[ 回上頁 ] [ 討論區發言規則 ]
怎麼用DirectX選擇多個音效卡各別播放?
更改我的閱讀文章字型大小
作者 : chopper(喬巴)
[ 貼文 15 | 人氣 2111 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/12 上午 10:40:49
最近碰到一個問題
就是在電腦上裝設多張音效卡(用USB擴充)
然後要用程式控制哪一張音效卡放Mp3哪一張音效卡播Wav
參考了很多前輩的程式跟SDK 還是找不出解決辦法
謝謝! <(_ _)>
作者 : player(PLAYER) 貼文超過1000則人氣指數超過100000點
[ 貼文 1595 | 人氣 138661 | 評價 2840 | 評價/貼文 1.78 | 送出評價 104 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人chopper註記此篇回應為很有道理 2005/9/12 下午 12:13:38
可以先列舉出你要的裝置吧?
HRESULT WINAPI DirectSoundEnumerate(
  LPDSENUMCALLBACK lpDSEnumCallback,
  LPVOID lpContext
);

抓到Device的Guid後
你再多開幾個IDirectSound8來用吧?

HRESULT WINAPI DirectSoundCreate8(
  LPCGUID lpcGuidDevice,
  LPDIRECTSOUND8 * ppDS8,
  LPUNKNOWN pUnkOuter
);

作者 : chopper(喬巴)
[ 貼文 15 | 人氣 2111 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/13 上午 09:25:35
謝謝~大概抓到了一個方向 ^^
但是DirectSound不能播放Mp3
以及要從各音效卡取得MIC的聲音並轉到其它的音效卡播放
ex: A~F編號的USB音效卡 要能夠指定由 C音效卡的MIC輸入 再轉到 E&F音效卡輸出
這樣的話怎麼辦?
(手邊沒有一本好書真是不方便 >< 還是有什麼書可以推薦一下呢?)
作者 : chopper(喬巴)
[ 貼文 15 | 人氣 2111 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/13 上午 09:25:46
謝謝~大概抓到了一個方向 ^^
但是DirectSound不能播放Mp3
以及要從各音效卡取得MIC的聲音並轉到其它的音效卡播放
ex: A~F編號的USB音效卡 要能夠指定由 C音效卡的MIC輸入 再轉到 E&F音效卡輸出
這樣的話怎麼辦?
(手邊沒有一本好書真是不方便 >< 還是有什麼書可以推薦一下呢?)
作者 : dorkas(aming) VC++優秀好手遊戲程式設計卓越專家DirectX頂尖高手C++優秀好手貼文超過2000則
[ 貼文 2624 | 人氣 4536 | 評價 11810 | 評價/貼文 4.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人chopper註記此篇回應為很有道理 2005/9/13 上午 09:28:31

你要先把MP3 轉成 WAV格式
DSound只吃Wave格式

網路上有很多MP3解碼模組可以利用..

不過我都是用DShow撥MP3 挖哈哈這個比較簡單
作者 : player(PLAYER) 貼文超過1000則人氣指數超過100000點
[ 貼文 1595 | 人氣 138661 | 評價 2840 | 評價/貼文 1.78 | 送出評價 104 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人chopper註記此篇回應為很有道理 2005/9/13 上午 11:46:23

>啊
>你要先把MP3 轉成 WAV格式
>DSound只吃Wave格式
>
>網路上有很多MP3解碼模組可以利用..
>
>不過我都是用DShow撥MP3 挖哈哈這個比較簡單

也對
用DirectShow 或 WMP會比用DirectSound來得容易
因為由於MP3大多是壓縮到1/10(或是壓得更小)
所以要一口氣解完整首MP3 到Wave會吃滿多RAM的
還要弄幾個多執行緒去邊撥放邊解壓縮
所以問題會變得比較複雜
作者 : chopper(喬巴)
[ 貼文 15 | 人氣 2111 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/13 下午 12:58:04

>啊
>你要先把MP3 轉成 WAV格式
>DSound只吃Wave格式
>
>網路上有很多MP3解碼模組可以利用..
>
>不過我都是用DShow撥MP3 挖哈哈這個比較簡單

謝謝回答 ^^

但是用DShow的話可以做到指定音效卡和MIC的播放嗎?

對DirectX真的不熟的說 @@

作者 : pernghy(pernghy) DirectX卓越專家貼文超過500則人氣指數超過30000點
[ 貼文 618 | 人氣 37721 | 評價 2990 | 評價/貼文 4.84 | 送出評價 48 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人chopper註記此篇回應為很有道理 2005/9/14 上午 02:12:29
在DirectShow中, 每張音效卡都有對應的source filter...你可以個別做你想做的事
請參考SDK中的Audio Capture Filter
和IAMAudioInputMixer Interface.
作者 : chopper(喬巴)
[ 貼文 15 | 人氣 2111 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/14 上午 08:51:23

>在DirectShow中, 每張音效卡都有對應的source filter...你可以個別做你想做的事
>請參考SDK中的Audio Capture Filter
>和IAMAudioInputMixer Interface.

嗯~謝謝回答
原來DirectShow也可以辦得到對應音效卡控制
但我在DX8的SDK裡面沒有找到大大說的
Audio Capture Filter & IAMAudioInputMixer Interface
剛在網路上翻了一下~
完全沒有提到那個在VB上面的用法 Orz
可以請大大再說明仔細一點 <(_ _)>
作者 : pernghy(pernghy) DirectX卓越專家貼文超過500則人氣指數超過30000點
[ 貼文 618 | 人氣 37721 | 評價 2990 | 評價/貼文 4.84 | 送出評價 48 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人chopper註記此篇回應為很有道理 2005/9/14 下午 12:29:22
>Audio Capture Filter & IAMAudioInputMixer Interface
你用GraphEdit堶推雩荋N可以看到了...
我是用DX9 SDK, 不過這東西應該DX8也有才對...不知道你為什麼會找不到..SO..
作者 : chopper(喬巴)
[ 貼文 15 | 人氣 2111 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/14 下午 02:09:47

>>Audio Capture Filter & IAMAudioInputMixer Interface
>你用GraphEdit堶推雩荋N可以看到了...
>我是用DX9 SDK, 不過這東西應該DX8也有才對...不知道你為什麼會找不到..SO..
>
找到了 ^^
因為之前從來沒用過GraphEdit所以才會不懂你在說什麼 @@
現在知道了~但這還是解決不了問題 ^^:
因為最後還是要用程式去控制
一而再 再而三的麻煩大家~~真是過意不去 ><
作者 : pernghy(pernghy) DirectX卓越專家貼文超過500則人氣指數超過30000點
[ 貼文 618 | 人氣 37721 | 評價 2990 | 評價/貼文 4.84 | 送出評價 48 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人chopper註記此篇回應為最佳解答 2005/9/14 下午 06:59:58
Audio capture filter 的資料在這
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/directshow/htm/introductiontodirectshow.asp

IAMAudioInputMixer Interface在這
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/directshow/htm/iamaudioinputmixerinterface.asp

硬體裝置要叫出來, 必須用列舉的方式, 請參考
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/directshow/htm/usingthesystemdeviceenumerator.asp

我自己本身是用VC++在寫程式, 並沒有使用VB在寫, 但是DShow是COM架構的,
因此做法應該是差不多才是...SDK中也有VB的sample, 可以參考一下...
"Using DirectShow with Visual Basic"
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/directshow/htm/imsviddeviceobjectvb.asp


你要做的事大概流程是這樣的...
產生一個graph
先用列舉的方式, 找到你要的Filter(用名字即可). 找到filter之後, 加入graph.
對filter 或是他的pin query IAMAudioInputMixer interface. 然後拿你要的
function來使用.
列舉需要一個參數是filter 的category. 你可以從filter的說明中找到他是屬於那一個category的.
作者 : player(PLAYER) 貼文超過1000則人氣指數超過100000點
[ 貼文 1595 | 人氣 138661 | 評價 2840 | 評價/貼文 1.78 | 送出評價 104 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/14 下午 08:26:10
DirectShow SDK 搬家了吧
應該搬到 Platform SDK (April 2005 - Windows Server 2003 SP 1)
這裡了

可能DirectShow 這塊
MS沒東西好加了
所以把他自DirectX SDK裡先分離到Platform SDK了

DirectInput 這塊目前看起來
也應該沒東西好加了
也許日後也可能搬到Platform SDK吧?
作者 : chopper(喬巴)
[ 貼文 15 | 人氣 2111 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/19 上午 09:48:29
失敗...........Orz
翻找過SDK集(我是到日本跟美國的MSDN去找的)
有找到各DirectShow和DirectSound的函數資料
但是並沒有很明確可以應用在這個功能的方法 (天音:其實是你不會用吧)
也想過用API指定音效卡為主音源 再用 DirectShow播(找不到可以把主音源輸出改變的API指令
)
或者是直接就API指定,API播放(可以用API指定要播放的音效卡卻只能播WAV)
所以再度上來請各位前輩指教

如何用DirectShow建立多音效裝置的管理.....(可以的話~請寫得簡單一點 ^^;)

作者 : pernghy(pernghy) DirectX卓越專家貼文超過500則人氣指數超過30000點
[ 貼文 618 | 人氣 37721 | 評價 2990 | 評價/貼文 4.84 | 送出評價 48 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人chopper註記此篇回應為很有道理 2005/9/19 下午 06:47:33
我在想, 是不是先用DirectShow中的GraphEdit來試著做一下你要做的事, 成功的話我們再來討論程式要怎麼寫..
第一個件, 把GraphEdit打開,
找個category
Audio Renderers.
看看堶惘釣S有你音效卡的名字. 一定要有, 沒有的話. 那就不用玩了,
再來, 開兩個graphedit. 分別把兩個device 叫出來然後直接render media file.(File/ render media file.)
或是先render media file,再把那個 default directsound device換成你要的...
然後按play.

看這樣能不能達到你想要的結果(用兩個音效卡播不同歌). 之前弄錯, 以為你是要capture 所以叫你找capture source filter. sorry.
作者 : chopper(喬巴)
[ 貼文 15 | 人氣 2111 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/20 上午 11:04:12
>看這樣能不能達到你想要的結果(用兩個音效卡播不同歌). 之前弄錯, 以為你是要capture 所以叫你找capture source filter. sorry.

是我要說Sorry ><
看到這篇回應才發現.............我一直都沒講明(應該說是講錯 Orz)
我是要用多張音效卡播放音效(非同時)
也就是說.....
功能是
要哪"一"張音效卡動作,它就動作,但不是同時發聲(同時發聲不就變成混音了嗎 XD) ^^;
作者 : pernghy(pernghy) DirectX卓越專家貼文超過500則人氣指數超過30000點
[ 貼文 618 | 人氣 37721 | 評價 2990 | 評價/貼文 4.84 | 送出評價 48 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人chopper註記此篇回應為很有道理 2005/9/20 下午 12:42:23
了解了, 那解決的方式基本上我是想到兩種, 一種是改system default device. 不過我不建議..
另一個就是自己指定audio renderer device就OK了, 就是我上一次回的方法, 只要建一個圖就OK了...
再來的問題是, 你要能知道系統總共有那些audio device才能正確找到對應的audio renderer.
這時你可以參考之前另一位網友提到的direct sound 的enumerate device.
堶悸漲W字可以拿來做參數...
作者 : chopper(喬巴)
[ 貼文 15 | 人氣 2111 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/29 上午 11:20:52
因為功能上的需要........
現在真的得做多張音效卡並行輸出了 Orz......
Graph Edit <=這個我試過....兩張音效卡同時各別發聲是辦得到的
但是就苦於不知道程式該怎麼寫......
小弟的英文又破破的 ><

請各位前輩指導一下 <(_ _")>
作者 : mhlee(mhlee)
[ 貼文 6 | 人氣 334 | 評價 10 | 評價/貼文 1.67 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/11/17 上午 09:20:15
小弟遇到的問題是. 用 bluetooh 耳機做語音控制輸入 .
動態決定要從哪個音效裝置輸出..

現有 2 個 device , bluetooh啟動後 , 就自動變成慣用裝置
 一個是原音效卡輸出的喇叭 , 一個是 bluetooh耳機
撥 mpeg 檔時希望從音效卡 喇叭輸出
講話時要從 bluetooh 耳機輸出
有時要動態切換

用directsound 可以選取列舉的device
但只有 wav 檔的 file 可以受 directsound 操控輸出到哪個 device
這樣要改用 directshow 去做嗎 ?
目前小弟在 directsohw 也可以撥出 mpeg , avi 檔沒錯 .
但是卻不能指定要輸出的 device 不要從 bluetooh ?

directsound / show 兩者之間要如何整合 ? >-<

手動去改 system sound device default 是可以達到需求 .
但是有沒有 API 可以直接叫用的 ?


作者 : mhlee(mhlee)
[ 貼文 6 | 人氣 334 | 評價 10 | 評價/貼文 1.67 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/11/17 上午 10:01:23
前輩

請問您之前所提的 , directsohow 方法 GraphEdit 怎麼去用 ?
我看了http://blog.donews.com/jiji262/category/100541.aspx
發覺做個菜鳥還真難ㄚ~~~

因為要控制的不只是檔案 , wav , mpeg , avi
還包括人聲從mic 輸入後要輸出的 device .
如果不要從 UI 去決定 輸出的 device

還需要用到 GraphEdit . 感謝前輩指點
作者 : akole8363498(甜筒)
[ 貼文 1 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2011/2/10 下午 09:06:25
請問這個回應串最後有結果嗎?
剛好最近小弟有接到類似的成是要測試
不知道該如何著手,看這個回應串文好像最後沒結果
我遇到的問題是一台電腦兩個音效卡或更多張音效卡
同時進行撥放不同的聲音,請問有撰寫的方向嗎?
謝謝
作者 : pernghy(pernghy) DirectX卓越專家貼文超過500則人氣指數超過30000點
[ 貼文 618 | 人氣 37721 | 評價 2990 | 評價/貼文 4.84 | 送出評價 48 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2011/2/24 上午 01:39:42
每張音效卡都會對應到一個audio renderer..
只要把renderer和source配對好就可以讓各個音效卡各自播自己的來源了.
作者 : pernghy(pernghy) DirectX卓越專家貼文超過500則人氣指數超過30000點
[ 貼文 618 | 人氣 37721 | 評價 2990 | 評價/貼文 4.84 | 送出評價 48 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2011/2/24 上午 01:59:11
補充一下...在一個應用程式中, 為各個音效卡建自己的filter graph,問題會比較少..
 板主 : 白老鼠(Gary)
 > DirectX - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - DirectX - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
DirectX
1 aming 4010 
2 pernghy 1780 
3 白老鼠(Gary) 1120 
4 Akira 1020 
5 冷眼 980 
6 PLAYER 690 
7 阿西德倫 480 
8 andre 450 
9 小弦 430 
10 藍斯洛 410 
DirectX
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.109375