Hey zusammen.
Ich schreibe momentan ein Programm welches mir bei meiner "Musikverwaltung" hilft.
Eine Funktion ist, dass der Systemsound aufgenommen wird; Nach Recherchen im Internet, wurde dafür die API NAudio empfohlen, auch hier. Allerdings komme ich nicht wirklich damit zurecht. Ich habe mir die vom Macher erstellten Tutorials zur Implementierung dieser Funktion durchgelesen. Am Ende habe ich praktisch den vorgegebenen C#-Quellcode durch nen Converter gepackt, und dabei die restlichen noch in VB angezeigten Fehler selbst "behoben". Eigentlich sollte das Ganze ziemlich gut übersetzt worden sein, allerdings hier nochmal die vorgegebenen Quelltexte und die dazugehörigen Übersetzungen von mir in VB.NET:
Spoiler anzeigen
Übersetzung von mark-dot-net.blogspot.de/2009/…ard-output-to-wav-in.html:
Spoiler anzeigen
Übersetzungen von mark-dot-net.blogspot.de/2009/…-sine-wave-in-naudio.html:
Spoiler anzeigen
Spoiler anzeigen
Spoiler anzeigen
Es scheint zunächst auch alles zu klappen: Auf Knopfdruck startet er eine "Aufnahme" und erstellt nach Beendigung am angegebenen Speicherort die WAV, die auch die Länge hat, die es haben soll. Wenn man die WAV jedoch abspielt, hört man nichts. Nichtmal ein bisschen. Mein Stereomix ist aktiviert und mit anderen Programmen laufen Aufnahmen des Systemsounds auch problemlos. Daher muss es an meinem Programm liegen. Ich habe auch schon versucht, die WAV mit dem VLC Media Player zu öffnen, und es lässt sich auch öffnen, jedoch gibt es auch hier keinen Sound.
Ich hoffe ihr könnt mir da helfen!
MfG
*Topic verschoben*
Ich schreibe momentan ein Programm welches mir bei meiner "Musikverwaltung" hilft.
Eine Funktion ist, dass der Systemsound aufgenommen wird; Nach Recherchen im Internet, wurde dafür die API NAudio empfohlen, auch hier. Allerdings komme ich nicht wirklich damit zurecht. Ich habe mir die vom Macher erstellten Tutorials zur Implementierung dieser Funktion durchgelesen. Am Ende habe ich praktisch den vorgegebenen C#-Quellcode durch nen Converter gepackt, und dabei die restlichen noch in VB angezeigten Fehler selbst "behoben". Eigentlich sollte das Ganze ziemlich gut übersetzt worden sein, allerdings hier nochmal die vorgegebenen Quelltexte und die dazugehörigen Übersetzungen von mir in VB.NET:
Übersetzung von mark-dot-net.blogspot.de/2009/…ard-output-to-wav-in.html:
VB.NET-Quellcode
- Public Class WaveRecorder
- Implements NAudio.Wave.IWaveProvider, IDisposable
- Private writer As NAudio.Wave.WaveFileWriter
- Private source As NAudio.Wave.IWaveProvider
- Public Sub New(pSource As NAudio.Wave.IWaveProvider, pDestination As String)
- MyBase.New
- source = pSource
- writer = New NAudio.Wave.WaveFileWriter(pDestination, Me.source.WaveFormat)
- End Sub
- Public Function Read(ByVal buffer() As Byte, ByVal offset As Integer, ByVal count As Integer) As Integer Implements NAudio.Wave.IWaveProvider.Read
- Dim bytesRead As Integer = Me.source.Read(buffer, offset, count)
- writer.Write(buffer, offset, count)
- Return bytesRead
- End Function
- Public ReadOnly Property WaveFormat As NAudio.Wave.WaveFormat Implements NAudio.Wave.IWaveProvider.WaveFormat
- Get
- Return Me.source.WaveFormat
- End Get
- End Property
- Public Sub Dispose() Implements IDisposable.Dispose
- If (Not (Me.writer) Is Nothing) Then
- Me.writer.Dispose()
- Me.writer = Nothing
- End If
- End Sub
- End Class
Übersetzungen von mark-dot-net.blogspot.de/2009/…-sine-wave-in-naudio.html:
VB.NET-Quellcode
- Public MustInherit Class WaveProvider32
- Implements NAudio.Wave.IWaveProvider
- Private daswaveFormat As NAudio.Wave.WaveFormat
- Public Sub New()
- Me.New(44100, 1)
- End Sub
- Public Sub New(ByVal sampleRate As Integer, ByVal channels As Integer)
- MyBase.New
- Me.SetWaveFormat(sampleRate, channels)
- End Sub
- Public Sub SetWaveFormat(ByVal sampleRate As Integer, ByVal channels As Integer)
- Me.daswaveFormat = NAudio.Wave.WaveFormat.CreateIeeeFloatWaveFormat(sampleRate, channels)
- End Sub
- Public Overloads Function Read(ByVal buffer() As Byte, ByVal offset As Integer, ByVal count As Integer) As Integer Implements NAudio.Wave.IWaveProvider.Read
- Dim waveBuffer As NAudio.Wave.WaveBuffer = New NAudio.Wave.WaveBuffer(buffer)
- Dim samplesRequired As Integer = (count / 4)
- Dim samplesRead As Integer = Me.Read(waveBuffer.FloatBuffer, (offset / 4), samplesRequired)
- Return (samplesRead * 4)
- End Function
- Public MustOverride Overloads Function Read(ByVal buffer() As Single, ByVal offset As Integer, ByVal sampleCount As Integer) As Integer
- Public ReadOnly Property waveFormat As NAudio.Wave.WaveFormat Implements NAudio.Wave.IWaveProvider.WaveFormat
- Get
- Return Me.daswaveFormat
- End Get
- End Property
- End Class
VB.NET-Quellcode
- Public Class SineWaveProvider32
- Inherits WaveProvider32
- Private sample As Integer
- Public Sub New()
- MyBase.New
- Frequency = 1000
- Amplitude = 0.25!
- ' let's not hurt our ears
- End Sub
- Public Property Frequency As Single
- Get
- Return Frequency
- End Get
- Set
- End Set
- End Property
- Public Property Amplitude As Single
- Get
- Return Amplitude
- End Get
- Set
- End Set
- End Property
- Public Overrides Function Read(ByVal buffer() As Single, ByVal offset As Integer, ByVal sampleCount As Integer) As Integer
- Dim sampleRate As Integer = waveFormat.SampleRate
- Dim n As Integer = 0
- Do While (n < sampleCount)
- buffer((n + offset)) = CType((Me.Amplitude * Math.Sin(((2 _
- * (Math.PI _
- * (Me.sample * Me.Frequency))) _
- / sampleRate))), Single)
- Me.sample = (Me.sample + 1)
- If (Me.sample >= sampleRate) Then
- Me.sample = 0
- End If
- n = (n + 1)
- Loop
- Return sampleCount
- End Function
- End Class
VB.NET-Quellcode
- Dim waveOut As NAudio.Wave.IWavePlayer
- Dim recorder As WaveRecorder
- Private Sub startStopSineWave()
- If (waveOut Is Nothing) Then
- Dim dersineWaveProvider = New SineWaveProvider32
- dersineWaveProvider.SetWaveFormat(16000, 1)
- ' 16kHz mono
- dersineWaveProvider.Frequency = 1000
- dersineWaveProvider.Amplitude = 0.25!
- recorder = New WaveRecorder(dersineWaveProvider, "D:\Dokumente\sine.wav")
- waveOut = New NAudio.Wave.WaveOut
- waveOut.Init(recorder)
- waveOut.Play()
- Else
- waveOut.Stop()
- waveOut.Dispose()
- waveOut = Nothing
- recorder.Dispose()
- recorder = Nothing
- End If
- End Sub
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- startStopSineWave()
- End Sub
Es scheint zunächst auch alles zu klappen: Auf Knopfdruck startet er eine "Aufnahme" und erstellt nach Beendigung am angegebenen Speicherort die WAV, die auch die Länge hat, die es haben soll. Wenn man die WAV jedoch abspielt, hört man nichts. Nichtmal ein bisschen. Mein Stereomix ist aktiviert und mit anderen Programmen laufen Aufnahmen des Systemsounds auch problemlos. Daher muss es an meinem Programm liegen. Ich habe auch schon versucht, die WAV mit dem VLC Media Player zu öffnen, und es lässt sich auch öffnen, jedoch gibt es auch hier keinen Sound.
Ich hoffe ihr könnt mir da helfen!
MfG
*Topic verschoben*
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()