TECHNOLOGIES
FORUMS
JOBS
BOOKS
EVENTS
INTERVIEWS
Live
MORE
LEARN
Training
CAREER
MEMBERS
VIDEOS
NEWS
BLOGS
Sign Up
Login
No unread comment.
View All Comments
No unread message.
View All Messages
No unread notification.
View All Notifications
Answers
Post
An Article
A Blog
A News
A Video
An EBook
An Interview Question
Ask Question
Forums
Monthly Leaders
Forum guidelines
sawass sawass
NA
36
23.7k
broadcasr a vocal message in two external spécific sound card
Jun 9 2011 6:44 PM
Hello
everyone,
By
calling
this
function
in the
main class
of my
project,
it
allows me
to
leave
a
voice message
directly
from
a
specific
sound card
,
specifying
the
number
of
sound card
where I
want to
broadcast my
voice message
.
in
parameter
.
Now
I have
another
problem
:
How
can I
read
in
two
sound cards
at
the
same time
.Is
someone can
help me
please
.
Here is
my
code
:
using System;
using System.Windows.Forms;
using NAudio.Wave;
using System.Runtime.InteropServices;
using System.Data.Odbc;
namespace PaGa
{
public partial class StreamingForm : Form
{
int device;
string fileName;
WaveOut wave = null;
private NAudio.Wave.WaveFileReader waveReader = null;
private NAudio.Wave.DirectSoundOut output = null;
public StreamingForm(int device)
{
InitializeComponent();
this.device = device;
}
public static int DeviceCount
{
get { return WaveNative.waveOutGetNumDevs(); }
}
private const string mmdll = "winmm.dll";
[DllImport(mmdll)]
public static extern int waveOutGetNumDevs();
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <summary>
/// The main entry point for the application.
/// </summary>
//[STAThread]
private PaGa.WaveOutPlayer m_Player;
private PaGa.WaveInRecorder m_Recorder;
private PaGa.FifoStream m_Fifo = new PaGa.FifoStream();
private byte[] m_PlayBuffer;
private byte[] m_RecBuffer;
private void Filler(IntPtr data, int size)
{
if (m_PlayBuffer == null || m_PlayBuffer.Length < size)
m_PlayBuffer = new byte[size];
if (m_Fifo.Length >= size)
m_Fifo.Read(m_PlayBuffer, 0, size);
else
for (int i = 0; i < m_PlayBuffer.Length; i++)
m_PlayBuffer[i] = 0;
System.Runtime.InteropServices.Marshal.Copy(m_PlayBuffer, 0, data, size);
}
private void DataArrived(IntPtr data, int size)
{
if (m_RecBuffer == null || m_RecBuffer.Length < size)
m_RecBuffer = new byte[size];
System.Runtime.InteropServices.Marshal.Copy(data, m_RecBuffer, 0, size);
m_Fifo.Write(m_RecBuffer, 0, m_RecBuffer.Length);
}
private void Stop()
{
if (m_Player != null)
try
{
m_Player.Dispose();
}
finally
{
m_Player = null;
}
if (m_Recorder != null)
try
{
m_Recorder.Dispose();
}
finally
{
m_Recorder = null;
}
m_Fifo.Flush(); // clear all pending data
}
private void Start()
{
//Stop();
//try
//{
PaGa.WaveFormatStream fmt = new PaGa.WaveFormatStream(44100, 16, 2);
m_Player = new PaGa.WaveOutPlayer(device, fmt, 16384, 3, new PaGa.BufferFillEventHandler(Filler));
m_Player = new PaGa.WaveOutPlayer(device, fmt, 16384, 3, new PaGa.BufferFillEventHandler(Filler));
m_Recorder = new PaGa.WaveInRecorder(-1, fmt, 16384, 3, new PaGa.BufferDoneEventHandler(DataArrived));
// wave = new WaveOut();
// stop previous sounds before starting
//}
//catch
//{
//Stop();
//throw;
//}
}
public void playChime(int device)
{
OdbcConnection cn = new OdbcConnection("DSN=cp1");
cn.Open();
OdbcCommand cmd1 = new OdbcCommand("select chemin from alarme where code_alarme=41", cn);
cmd1.Connection = cn;
fileName = cmd1.ExecuteScalar().ToString();
wave = new WaveOut();
disposeWave();
// DisposeAll(); // stop previous sounds before starting
waveReader = new NAudio.Wave.WaveFileReader(fileName);
var waveOut = new NAudio.Wave.WaveOut();
waveOut.DeviceNumber = device;
var output = waveOut;
output.Init(waveReader);
output.Play();
}
public void disposeWave()
{
if (output != null)
{
if (output.PlaybackState == NAudio.Wave.PlaybackState.Playing)
{
output.Stop();
output.Dispose();
output = null;
}
}
if (wave != null)
{
wave.Dispose();
wave = null;
}
}
private void StreamingForm_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
Stop();
}
private void StartButton_Click(object sender, System.EventArgs e)
{
playChime(device);
Start();
}
private void StopButton_Click(object sender, System.EventArgs e)
{
Stop();
}
private void bttnexit_Click(object sender, EventArgs e)
{
this.Close();
}
}
}
And thanks very much for your help.
Reply
Answers (
2
)
How can create an image from a single page of a multi-page TIFF without ingesting the whole file?
Text Message through Internet