Bass Echo mit der Datei speichern

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von thefiloe.

    Bass Echo mit der Datei speichern

    Guten Abend Paradiser,
    ich habe ein kleines Programm geschrieben womit man ein Echo unter die Stimme legen kann, dass funktioniert auch sehr gut aber ich möchte gerne das das echo in der .avi mitgespeichert wird und nicht nur drunter gelegt wird.

    Code bisher:

    VB.NET-Quellcode

    1. Option Strict Off 'Wegen Zeile 43..
    2. Imports Un4seen.Bass
    3. Public Class Form1
    4. Public stream As IntPtr
    5. Public Spectrum As New Un4seen.Bass.Misc.Visuals
    6. Public peak(2) As Single
    7. Dim rnd As New Random
    8. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    9. Timer1.Start()
    10. BassNet.Registration("XXX", "XXX")
    11. Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_CPSPEAKERS, IntPtr.Zero, Nothing)
    12. End Sub
    13. Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal Command As String, ByVal ReturnString As String, ByVal ReturnLenght As Integer, ByVal Callback As Integer) As Integer
    14. Dim Path As String = "echo" & rnd.Next(1, 9999) & ".avi"
    15. Dim rs As String
    16. Dim cb As String
    17. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    18. Button1.Enabled = False
    19. Button3.Enabled = True
    20. rs = New String(CChar(" "), 128)
    21. mciSendString("Open New Type waveaudio Alias aufnahme", rs, 128, CInt(cb))
    22. mciSendString("record aufnahme", rs, 128, CInt(cb))
    23. Button1.Text = "Läuft.."
    24. End Sub
    25. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    26. Dim input As String = InputBox("Audiospur bennenen:", "[#] RES-Echo [#]")
    27. mciSendString("Stop aufnahme", rs, 128, CInt(cb))
    28. mciSendString("save aufnahme " & "audio/" & Path, rs, 128, CInt(cb))
    29. mciSendString("Close aufnahme", rs, 128, CInt(cb))
    30. Dim split As String = Path.Split("."c)(0).Replace("echo", "")
    31. ListBox1.Items.Add("[" & split & "]:" & input)
    32. Button1.Enabled = True
    33. Button3.Enabled = False
    34. Button1.Text = "Aufnahme starten"
    35. End Sub
    36. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    37. Label1.Text = CStr(TrackBar1.Value)
    38. PictureBox1.Image = Spectrum.CreateSpectrumLine(stream, PictureBox1.Width, PictureBox1.Height, Color.Lime, Color.Red, Color.White, 8, 5, False, True, True)
    39. End Sub
    40. Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    41. ListBox1.Items.Remove(ListBox1.SelectedItem)
    42. End Sub
    43. Private Sub WiedergebenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles WiedergebenToolStripMenuItem.Click
    44. Dim sPlay As String = CStr(ListBox1.SelectedItem)
    45. If IsNothing(sPlay) Then
    46. MsgBox("Es wurde keine Audiospur ausgewählt!")
    47. Else
    48. Dim sSplit As String = sPlay.Split(":"c)(0)
    49. Dim sReplace As String = sSplit.Replace("[", "").Replace("]", "")
    50. stream = CType(Bass.BASS_StreamCreateFile("audio/echo" & sReplace & ".avi", 0, 0, BASSFlag.BASS_STREAM_AUTOFREE Or BASSFlag.BASS_STREAM_PRESCAN), IntPtr)
    51. Bass.BASS_ChannelPlay(CInt(stream), False)
    52. If CheckBox1.Checked = True Then
    53. Dim Echo As Integer
    54. Dim p As New BASS_DX8_ECHO
    55. Echo = Bass.BASS_ChannelSetFX(CInt(stream), BASSFXType.BASS_FX_DX8_ECHO, 0)
    56. p.fLeftDelay = TrackBar1.Value
    57. p.fRightDelay = TrackBar1.Value
    58. p.fFeedback = 50
    59. p.fWetDryMix = 50
    60. Bass.BASS_FXSetParameters(Echo, p)
    61. End If
    62. End If
    63. End Sub
    64. Private Sub StoppenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles StoppenToolStripMenuItem.Click
    65. ListBox1.Items.Remove(ListBox1.SelectedItem)
    66. End Sub
    67. End Class


    Das Echo soll in der Datei mitgespeichert werden, hoffe jemand kann mir helfen.

    Liebe grüße und einen schönen Abend,
    require
    Bitte keine VB-Fragen üb... Ach scheiß drauf, mich fragt ja eh keiner.
    Wenn ich das richtig verstehe, lässt du etwas abspielen und das nimmst du auf? Jetzt hast du aber noch einen Echo-Effekt angehängt und dieser wird nicht aufgenommen oder wie?
    Wenn du es direkt von der Soundkarte aufnimmst müsste das Echo schon oben sein. Das Problem ist halt, dass Bass hier selbst auf den DirectSound-Echo-Effekt zurückgreift. Ich hätte jetzt spontan gesagt, dass man diesen schon aufnehmen können müsste. Es kann aber natürlich sein, dass Bass diesen auf der Hardware anlegen lässt(kann man angeben). In dem Fall könnte es sein, dass Windows von diesem nichts mehr mitbekommt.
    Hier kommen leider auch schon die ersten Schwächen bei der Bass.dll durch, da man sie nicht wirklich dynamisch einsetzen kann. Eigentlich müsste man es so lösen, dass du den Echo-Effekt ohne abspielen drauf bringst. Nur damit dieser auch schön klingt braucht es etwas mehr.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Wird wahrscheinlich schwierig. Wie gesagt gehe ich davon aus, dass Bass die DirectSound Effekte verwendet(sogar ziemlich sicher). Beim Abspielen hörst du zwar die Effekte nur wirst du diese kaum in ne Datei bringen(zumindest soweit ich das sehe - habe auch nichts gefunden). Eine Möglichkeit wäre natürlich, dass du schon beim Aufnehmen den Effekt drauf packst, nur wird dies auch nicht funktionieren, da DirectSound kein Echo beim Aufnehmen unterstützt(msdn.microsoft.com/en-us/libra…re/ff536327(v=vs.85).aspx).
    Leider weiß ich keine wirklich gute Lösung. Ich habe jetzt auch nicht wirklich viel Zeit um großartig nach einer besseren Lösung suchen zu können. Ich habe aber gestern aus Interesse versucht nen simplen Echo-Effekt hinzubekommen. Bin zwar nicht ganz zufrieden aber für den Anfang hört man zumindest mal nen Echo und dafür ist er auch äußerst überschaubar.

    Er ist aber in C# geschrieben und du kannst ihn in VB nicht einfach so übernehmen. Wenn du Interesse hast kannste mir ne PN schicken und ich kann dir den compiliert geben.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.