hi,
ich möchte gerne mal zum test den live sound den ich übers mikrophone rein bekomme auf den lausprecher ausgeben...aber in echtzeit!! geht das?
dann will ich halt den sound über udp zu einem anderen pc schicken also live streaming...
irgendwas klappt hier nicht bei (byte[])applicationBuffer.Read ... bekomm ne exception!?
cu
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using Microsoft.DirectX;
using Microsoft.DirectX.DirectSound;
namespace Sound_Streaming
{
public partial class Form1 : Form
{
private Thread CaptureSoundThread = null;
public CaptureBuffer applicationBuffer = null;
private SecondaryBuffer soundBuffer = null;
private Device soundDevice = null;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
CaptureSoundThread = new Thread(new ThreadStart(WaitThread));
CaptureSoundThread.Start();
}
private void Form1_Load(object sender, EventArgs e)
{
soundDevice = new Device();
soundDevice.SetCooperativeLevel(this, CooperativeLevel.Normal);
// Set up our wave format to 44,100Hz, with 16 bit resolution
WaveFormat wf = new WaveFormat();
wf.FormatTag = WaveFormatTag.Pcm;
wf.SamplesPerSecond = 44100;
wf.BitsPerSample = 16;
wf.Channels = 1;
wf.BlockAlign = (short)(wf.Channels * wf.BitsPerSample / 8);
wf.AverageBytesPerSecond = wf.SamplesPerSecond * wf.BlockAlign;
int samplesPerUpdate = 512;
// Create a buffer with 2 seconds of sample data
BufferDescription bufferDesc = new BufferDescription(wf);
bufferDesc.BufferBytes = samplesPerUpdate * wf.BlockAlign * 2;
bufferDesc.ControlPositionNotify = true;
bufferDesc.GlobalFocus = true;
soundBuffer = new SecondaryBuffer(bufferDesc, soundDevice);
}
private void WaitThread()
{
while (true)
{
byte[] CaptureData = null;
CaptureData = (byte[])applicationBuffer.Read(0, typeof(byte), LockFlag.None);
soundBuffer.Write(0, CaptureData, LockFlag.None);
// Start it playing
soundBuffer.Play(0, BufferPlayFlags.Looping);
}
}
}
}
Hallo c++coder,
bekomm ne exception!
Grundregel: Immer die genaue Exception angeben.
herbivore
ja sry,
NullReferenceException was unhandled
Object reference not set to an instance of an object.
kann man den applicationBuffer so verwenden wie ich es mache?
cu
Hallo c++coder,
Grundregel: Erst in die FAQ gucken: NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt
herbivore
hi,
ja hab ich glatt vergessen eine instanz zu machen...
nur welche 2 param übergebe ich hier?
applicationBuffer = new CaptureBuffer(... , ...);
cu
hi c++coder,
hast du rausbekommen welche parameter man angeben muss?
Gruß Floyd
"...denn wir arbeiten nicht nur um uns selbst zu verbessern, sondern auch den Rest der Menschheit!"
Der Thread ist zwar schon etwas älter, aber ich würd mal gern wissen, welche Parameter hier Sinnvollerweise übergeben werden sollen
applicationBuffer = new CaptureBuffer(... , ...);
Visit my Blog: http://michael.barz.de
Hat jemand gerausgefunden welche Parameter übergeben werden müssen bzw. hat einer dieses Programm zum laufen bekommen ?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using Microsoft.DirectX;
using Microsoft.DirectX.DirectSound;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private Thread CaptureSoundThread = null;
public CaptureBuffer applicationBuffer = null;
private SecondaryBuffer soundBuffer = null;
private Device soundDevice = null;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Loading();
CaptureSoundThread = new Thread(new ThreadStart(WaitThread));
CaptureSoundThread.Start();
}
private void Loading()
{
soundDevice = new Device();
soundDevice.SetCooperativeLevel(this.Handle, CooperativeLevel.Normal);
Capture Mic = new Capture();
WaveFormat wf = new WaveFormat();
wf.FormatTag = WaveFormatTag.Pcm;
wf.SamplesPerSecond = 44100;
wf.BitsPerSample = 16;
wf.Channels = 1;
wf.BlockAlign = (short)(wf.Channels * wf.BitsPerSample / 8);
wf.AverageBytesPerSecond = wf.SamplesPerSecond * wf.BlockAlign;
int samplesPerUpdate = 512;
BufferDescription bufferDesc = new BufferDescription(wf);
bufferDesc.BufferBytes = samplesPerUpdate * wf.BlockAlign * 2;
bufferDesc.ControlPositionNotify = true;
bufferDesc.GlobalFocus = true;
soundBuffer = new SecondaryBuffer(bufferDesc, soundDevice);
applicationBuffer = new CaptureBuffer(this.Handle, Mic);
}
private void WaitThread()
{
while (true)
{
byte[] CaptureData = null;
CaptureData = (byte[])applicationBuffer.Read(0, typeof(byte), LockFlag.None, new Int32[] { 0, 10, 100 });
soundBuffer.Write(0, CaptureData, LockFlag.None);
soundBuffer.Play(0, BufferPlayFlags.Looping);
}
}
}
}
ich denk mal das ist nahe der lösung bloß ^^ eine AccessViolation besteht immernoch ^^
CaptureData = (byte[])applicationBuffer.Read(0, typeof(byte), LockFlag.None, new Int32[] { 0, 10, 100 });
Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.