請教一下關於JAVA程式的問題(急~20點送上

1.我想問一下關於JAVA抓取音效卡的問題

我現在有個wav檔的音樂

我想要在電腦上面的音效卡撥放該如何撰寫程式碼?

2.還有我想問一下,我現在有一個USB的音效卡(含耳機以及麥克風),插在電腦上,要如何控制只讓這個USB音效卡撥放wav音效,不從電腦系統內的原本音效卡撥放,要如何撰寫程式碼?

3.執行過程中出現Line unsupported: interface TargetDataLine supporting format PCM_SIGNED 44100.0 Hz, 8 bit, mono, 1 bytes/frame 這個錯誤代表什麼意思?

這幾個問題困擾我很久了,如果各位能夠回答的話就感激不盡了,20點就給了,謝謝,能回答多少就回答多少,拜託了,如果有較詳細的程式碼以及網站資料給我那就更好

3 個解答

評分
  • 最佳解答

    老實說我覺得你在這裡發問得到回答的機率為0

    這問題就算拿到javaworld也很難碰到剛好用過這些java sound套件的人可以回答你

    先回答問題3好了, 不支援上述的格式, 或許是用到錯誤的mixer, 因為沒code可以看

    (就算有code我也不確定是否能看出問題點)

    先給你幾行code, 你看看能不能抓到你要的device資訊

    2012-04-29 21:42:59 補充:

    Info[] mis = AudioSystem.getMixerInfo();

    for (int i = 0; i < mis.length; i++) {

    System.out.println("[" + (i) + "]" + mis[i].getName() + " - "

    + mis[i].getDescription() + " - " + mis[i].getVendor());

    }

    2012-04-29 21:44:37 補充:

    import javax.sound.sampled.AudioSystem;

    import javax.sound.sampled.Mixer.Info;

    2012-04-30 14:07:32 補充:

    我的code跟上面網站的不同,

    因為我的電腦只有一個音效卡, 所以沒辦法去測試切換音效卡

    但不管是使用預設音效或是指定那唯一的音效

    要讓它播放wav檔是沒問題的

    所以才問你是否能抓到你電腦上第二張音效卡的資訊

    2012-04-30 20:20:33 補充:

    /**

    * 先說明一下, 因為我的電腦沒有2張音效卡, 所以無法保證以下的程式可以解決你的問題

    * 所以還是要你自行測試

    */

    import javax.sound.sampled.AudioInputStream;

    import javax.sound.sampled.AudioSystem;

    import javax.sound.sampled.Clip;

    import javax.sound.sampled.Mixer.Info;

    /*

    * 取得 Mixer info 的 code, 執行過的應該沒問題

    */

    Info[] mis = AudioSystem.getMixerInfo();

    for (int i = 0; i < mis.length; i++) {

    System.out.println("[" + (i) + "]" + mis[i].getName() + " - "

    + mis[i].getDescription() + " - " + mis[i].getVendor());

    }

    FileInputStream fis = new FileInputStream("E:\\test.wav");

    AudioInputStream ais = AudioSystem.getAudioInputStream(fis);

    /*

    * 這裡getClip傳的參數就是使用哪個mixer, 也就是我要你試測你電腦抓出來的有哪些

    * 如果不傳參數的話就是使用預設, AudioSystem.getClip()

    * 你可以先測試預設的能否成功播放.

    * 可以播放的話再測試傳入你抓到的usb speaker

    * 像我的音效輸出就是第2個mixer

    */

    Clip clips = AudioSystem.getClip(mis[1]);

    clips.open(ais);

    clips.setFramePosition(0);

    clips.loop(0);

    /*

    * 這邊要注意一下, 因為播放音效的code使用background thread,

    * 而且我測試的code也是寫在 main 裡, 所以我必須 delay 幾秒鐘再結束程式

    * 如果不做 delay 的話 main 執行結束會一併結束掉播放, 就會完全聽不到任何聲音

    * 當然如果像是在swing下的話就不用考慮到這個問題.

    */

    Thread.sleep(10000);

    2012-04-30 20:21:22 補充:

    字型設太大了..= =

    參考資料: 什麼時候MADAO才會開花呢?
    • 登入以對解答發表意見
  • 8 年前

    上述的代碼我也已經有試過

    我有印出那些mixer的name和一些資訊

    目前就是卡在切換音效卡這段

    http://www.anyexample.com/programming/java/java_pl...

    相關網站就上面那一個,測試過是可以跑

    目前就是卡在切換音效卡這段

    一直想不出頭緒來

    我也知道這些問題能回答的人真的很少

    因為要遇到剛好寫過這種程式的人否則也找不出答案來

    我的code就是網站上面那一段拿去用的

    不管如何還是謝謝各位來提供我一些意見

    2012-04-30 16:13:26 補充:

    恩 了解 我再試試看

    2012-04-30 16:19:35 補充:

    我有用上面那段程式碼抓

    抓到兩組麥克風和耳機

    包含java engine以及realtek microphone、realtek speatker、usb microphone、usb speaker這五個

    • 登入以對解答發表意見
  • 8 年前

    一、抓取音效卡?請先確定「I\O」元件註冊表。

    二、請先偵錯一下,確定「輸入\輸出」的 IRQ 位置。

    三、你送給音效卡的「位元數」有錯誤!

    程式碼?沒有!因為「寫完、測試、交付」給客戶,就刪除全部「資料」ㄌ

    網站?也沒有

    • 登入以對解答發表意見
還有問題?馬上發問,尋求解答。