我的问题是,如果我想创建3个按钮,我有3个声卡,每个按钮与声卡相关(例如button1与声卡1相关......)当我点击button1时,我想听到声音来自扬声器与声卡1有关(与按钮2和按钮3相同.
我的朋友给了我两个代码:第一次使用Naudio它可以工作,但我仍然无法在三个声卡中播放声音,我的意思是当我安装三个声卡时只有一个声卡工作,这就像程序是总是选择一个默认声卡来自三个外置声卡.
第二个使用DirectX,它适用于我,但我不明白他如何调用设备号,我的意思是在使用NAudio的代码中有"devicenumber = 1例如",我需要知道如何因为我会spicifie每个按钮的设备(例如,当我点击按钮1时,声音将在声卡1中播放)?
我想知道我们如何纠正这两个代码中的一个,如何在第二个代码中指定一个"设备",请帮助我吗?
这是Form2的代码(来自使用NAudio的项目)你可以注意到它如何为每个按钮指定一个设备但不幸的是它引起了提到的问题:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using NAudio.Wave;
using NAudio.CoreAudioApi;
namespace AudioWithNAudio
{
public partial class Form2 : Form
{
string fileName = null;
WaveOut wave = null;
private NAudio.Wave.WaveFileReader waveReader = null;
private NAudio.Wave.DirectSoundOut output = null;
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
hideButtons();
fileName = ("alarm.wav");
detectDevices();
}
public void hideButtons()
{
bttnAudioDevice1.Visible = false; …Run Code Online (Sandbox Code Playgroud) 我想同时在三个外部声卡中播放声音,我的意思是当我点击一个按钮时,我可以听到三个扬声器发出的与我的三张声卡有关的声音.我有一个功能,但它只在一个设备中播放声音,它找到的第一个设备,我的意思是在这个代码中第一个设备是数字0,所以它在其中播放声音,但如果你首先写设备号1,它将在其中播放声音,作为结论它只在一个设备中播放声音,它不能同时适用于所有设备.这是它的代码:
public void playAllAvailableDevices()
{
//create a new class for each wav file & output etc.
WaveOut waveOut1 = new WaveOut();
WaveFileReader waveReader1 = new WaveFileReader(fileName);
WaveOut waveOut2 = new WaveOut();
WaveFileReader waveReader2 = new WaveFileReader(fileName);
WaveOut waveOut3 = new WaveOut();
WaveFileReader waveReader3 = new WaveFileReader(fileName);
switch (waveOutDevices)
{
case 1:
waveOut1.Init(waveReader1);
waveOut1.DeviceNumber = 0;
waveOut1.Play();
break;
case 2:
waveOut1.Init(waveReader1);
waveOut1.DeviceNumber = 0;
waveOut1.Play();
waveOut2.Init(waveReader2);
waveOut2.DeviceNumber = 1;
waveOut2.Play();
break;
case 3:
waveOut1.Init(waveReader1);
waveOut1.DeviceNumber = 0;
waveOut1.Play();
waveOut2.Init(waveReader2);
waveOut2.DeviceNumber = …Run Code Online (Sandbox Code Playgroud)