Hallo,
ich bin seit einigen Tagen am Versuchen, mein Mikrofon zu streamen. Ich verwende dazu CSCore.
Bisher nur lokal, später werden die Daten dann über einen Server an alle anderen Clienten versendet.
Zurzeit habe ich das Problem, dass die Signale meines Mikrofons nicht aufgenommen werden.
Mein derzeitiger Stand:
Wenn es mit einer anderen Methode einfacher/besser geht, steige ich gerne um
Ich danke schonmal für eure Hilfe.
MfG
ich bin seit einigen Tagen am Versuchen, mein Mikrofon zu streamen. Ich verwende dazu CSCore.
Bisher nur lokal, später werden die Daten dann über einen Server an alle anderen Clienten versendet.
Zurzeit habe ich das Problem, dass die Signale meines Mikrofons nicht aufgenommen werden.
Mein derzeitiger Stand:
VB.NET-Quellcode
- Imports System.IO
- Imports CSCore
- Imports CSCore.CoreAudioAPI
- Imports CSCore.Streams
- Public Class Form1
- Dim Zuhören As Integer = 0
- Dim WithEvents SoundOut As New SoundOut.DirectSoundOut
- Dim WithEvents SoundIn As New SoundIn.WasapiCapture
- Dim BufferingSource As WriteableBufferingSource
- Dim _finalSource As IWaveSource
- Dim DataStream As String = "Funk.wav"
- Dim AufnahmeTon As Byte()
- Dim _BufferingSource As WriteableBufferingSource
- Dim FileStream As Stream
- Dim audioMeter As AudioMeterInformation
- Private Sub Aufnehmen()
- If SoundIn.RecordingState = CSCore.SoundIn.RecordingState.Recording Then
- SoundIn.Stop()
- End If
- Dim soundInSource = New SoundInSource(SoundIn)
- Dim singleBlockNotificationStream = New SingleBlockNotificationStream(soundInSource.ToSampleSource)
- _finalSource = singleBlockNotificationStream.ToWaveSource()
- AufnahmeTon = New Byte(_finalSource.WaveFormat.BytesPerSecond / 2 - 1) {}
- SoundIn.Start()
- End Sub
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- If Button1.Text = "Funk an" Then
- SoundIn.Initialize()
- Button1.Text = "Funk aus"
- Aufnehmen()
- Timer1.Start()
- Else
- Button1.Text = "Funk an"
- Timer1.Stop()
- Aufnehmen()
- SoundIn.Stop()
- End If
- End Sub
- Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
- If Button2.Text = "Zuhören an" Then
- If Not BackgroundWorker1.IsBusy Then
- AufnahmeTon = New Byte() {}
- SoundOut.Stop()
- BackgroundWorker1.RunWorkerAsync()
- Button2.Text = "Zuhören aus"
- Zuhören = 1
- End If
- Else
- Button2.Text = "Zuhören an"
- Zuhören = 0
- SoundOut.Stop()
- _BufferingSource = New WriteableBufferingSource(New WaveFormat(11000, 8, 2))
- BackgroundWorker1.CancelAsync()
- End If
- End Sub
- Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
- Aufnehmen()
- End Sub
- Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
- If Zuhören = 1 Then
- Do
- If AufnahmeTon.Length > 0 Then
- _BufferingSource = New WriteableBufferingSource(New WaveFormat(11000, 8, 2))
- _BufferingSource.FillWithZeros = True
- _BufferingSource.Write(AufnahmeTon, 0, AufnahmeTon.Length)
- Dim Source = _BufferingSource.ToSampleSource
- If SoundOut.PlaybackState = CSCore.SoundOut.PlaybackState.Stopped Then
- SoundOut.Initialize(Source.ToWaveSource)
- SoundOut.Play()
- End If
- AufnahmeTon = New Byte() {}
- End If
- Loop
- Else
- _BufferingSource.Dispose()
- _BufferingSource = New WriteableBufferingSource(New WaveFormat(11000, 8, 2))
- BackgroundWorker1.CancelAsync()
- End If
- End Sub
- End Class
Wenn es mit einer anderen Methode einfacher/besser geht, steige ich gerne um
Ich danke schonmal für eure Hilfe.
MfG