Audio-Stream über TCP/IP Senden

  • VB.NET

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

    Audio-Stream über TCP/IP Senden

    Hallo zusammen,

    ich suche schon seit tagen nach einer Lösung, meine WAV-Datei per TCP/IP, am besten während es aufnimmt, an einen anderen Computer zu senden.


    Eine Verbindung zum anderen PC steht schon und komme an dieser stelle einfach nicht weiter.
    Könnte mir jemand einen Ansatz geben, wie ich das anstelle?



    Danke schon mal im voraus
    Gruss Chris






    VB.NET-Quellcode

    1. Public Class Record
    2. Dim bits = 16
    3. Dim samples = 44100
    4. Dim c = 2
    5. Dim bytes = (bits * samples * c) / 8
    6. Public Declare Function mciSendString Lib "winmm.dll" Alias _ "mciSendStringA" (ByVal lpstrCommand As String, _ ByVal lpstrReturnString As String, ByVal uReturnLength _ As Integer, ByVal hwndCallback As Integer) As Integer
    7. Public Declare Function PlaySound Lib "winmm.dll" Alias _ "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal _ uFlags As Integer) As Integer
    8. Const Path$ = "C:\test\Test.wav"
    9. Dim RS, CB
    10. Public Sub record() If Dir$(Path, vbNormal) <> "" Then Kill(Path) RS = Space$(128)
    11. mciSendString("SET CAPTURE TIME FORMAT MILLISECONDS BITSPERSAMPLE " & bits _ & " SAMPLESPERSEC " & samples _ & " CHANNELS " & c _ & " BYTESPERSEC " & bytes _ & " ALIGNMENT 4", RS, 128, CB)
    12. Call mciSendString("open new type waveaudio alias capture", _ RS, 128, CB) Call mciSendString("record capture", RS, 128, CB)
    13. End Sub
    14. Public Sub RecStop() RS = Space$(128)
    15. Call mciSendString("stop capture", RS, 128, CB)
    16. Call mciSendString("save capture " & Path, RS, 128, CB)
    17. Call mciSendString("close capture", RS, 128, CB) End Sub
    18. Public Sub RecPlay()
    19. mciSendString("SET CAPTURE TIME FORMAT MILLISECONDS BITSPERSAMPLE " & bits & " SAMPLESPERSEC " & samples & " CHANNELS " & c & " BYTESPERSEC " & bytes & " ALIGNMENT 4", RS, 128, CB) Call PlaySound(Path, 0) End Sub
    20. End Class

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „crissydge“ ()

    Nimm am besten etwas, was direkt in den Speicher schreibt und nicht in eine Datei->
    BASS
    DirectX

    Außerdem ist WAVE ein ganz schlechtes Format für Streaming, aufgrund der zu übertragenen Datenmenge...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Wenn du das direkt aufnimmst haste ja nen byte array in dem die daten sind. (Wahrscheinlich eh in raw pcm)
    Um die dann zu übertragen müsstest die halt noch in Blöcke unterteilen und anschließend rüberschieben.
    Jedoch bekommst du da das Problem, dass es zu langsam wird.
    Also musste das kompremieren. Es gibt verschiedene Möglichkeiten.
    Am besten du schaust dir mal das hier an mit dem habe ich es mal geschafft.
    en.wikipedia.org/wiki/Speex

    sonst hab ich auch nochma ma was von nem ADPCM gehört, da weiß ich aber nich so genau

    EDIT: ergänzend zu dem Beitrag von jvbsl wäre auch noch die WinAPI eine alternative.


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

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „thefiloe“ ()

    EDIT: ergänzend zu dem Beitrag von jvls wäre auch noch die WinAPI eine alternative.

    WinAPI ist das letzte, was ich im Bereich Multimedia einsetzen würde. Das ist hier ja bereits der Fall...(Außerdem hast du bei meinem Nick ein Buchstabe vergessen und zwei vertauscht...)

    en.wikipedia.org/wiki/Streaming_media

    Außerdem bringt UDP mit einer Direktverbindung einiges mehr an Geschwindigkeit :)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Wieso soll WinAPI das letzte sein? Mit WinAPI hat man alle Möglichkeiten. Es mag zwar etwas aufwendinger sein weshalb ich es aber nicht gleich abschreiben würde.
    Immerhin kannst du auf WinAPI fast alles aufbauen, was mit audio zu tun hat. Ob es eine FFT-Visualation, Internet-Radio, netChat oder einfach nur eine Datei abspielen.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Danke für eure antworten!

    Das ganze läuft in einem separaten Gigabit-Netzwerk, geschwindigkeitstechnisch sollte es da keine Probleme geben.

    Gibt es eine Möglichkeit oder einen Player der den Stream direkt einliest, oder muss es unbedingt eine Datei sein?

    Gruss Chris
    Wieso soll WinAPI das letzte sein?

    Wer lesen kann ist klar im Vorteil...
    Mit WinAPI ist all das begrenzt vlt. möglich, aber man hat mehr Nachteile als Vorteile. Ich kann mir nicht mal Vorstellen, dass der WMP diese benützt, obwohl ichs dem schon zu trauen würde(Aufgrund der so vielen unterstützten Formate - Achtung Ironie)...

    Gibt es eine Möglichkeit oder einen Player der den Stream direkt einliest, oder muss es unbedingt eine Datei sein?

    Wie gesagt ich würde dir entweder zur BASS.dll, oder DirectX empfehlen.
    DirectX heißt so viel wie ManagedDirectX oder XNA, evtl. auch SlimDX oder Irrlicht. <- Geschrieben in der Reihenfolge, in welcher ich darauf zurückgreifen würde...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Nun ja WinAPI ja/nein ist Ansichtssache. Doch wo ich dir recht geben muss um z.B ein mp3 abspielen zu können muss man dieses natürlich erst zur Laufzeit decodieren. Was aber bei z.B. DirectSound meines wissens auch nicht anders ist. Doch auch dafür findet man genug Anleitungen oder gar Bibliotheken und wenn man etwas mehr als 4 Zeilen code haben will um etwas zu lernen ist WinAPI für mich sicher eine intressante Alternative.

    Und ja es ist möglich direkt aus dem Bytes einen Stream zu machen und diesen zur Laufzeit wiederzugeben. Wie dies aber mit der Bass geht darfst du mich leider nicht fragen. Falls du dich für die Bass dll enscheidest würde ich mich am besten einmal an das Forum dieser wenden. (Wenn ich mich recht errinnere un4seen.com)


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