AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Voice-/Sprach-Chat

Offene Frage von "onepiecefreak2"
Ein Thema von onepiecefreak2 · begonnen am 13. Jun 2014 · letzter Beitrag vom 20. Jun 2014
Antwort Antwort
Seite 1 von 6  1 23     Letzte » 
onepiecefreak2

Registriert seit: 13. Jun 2014
50 Beiträge
 
#1

Voice-/Sprach-Chat

  Alt 13. Jun 2014, 22:22
Liebe Community,

ich bin schon seit mehreren Jahren im Programmieren tätig. Dies beschränkt sich auf alles Lokale was mit Delphi möglich ist. Nun versuche ich mit meinem Delphi 5 Standard einen Voice-Chat zu programmieren. Bisher habe ich einen Text-Chat fertiggestellt. Zumindest funktioniert er von der Übermittlung der Nachrichten her. Nun will ich diesen um einen Voice-Chat erweitern.

Ich habe wie gesagt, schon fortgeschrittenes Wissen mit Delphi 5 Standard und grundlegende Kenntnisse zu Server/Client-Verbindungen.
Ich besitze 3 Versionen von Delphi 5 Standard: Einmal ohne Indy und zweimal mit Indy (9 und 10).

Meine Frage wäre: Mit welchen (Zusatz-)Komponenten und welchen Aufrufen von Devices etc. ist eine solche Liveübertragung von Ton möglich? Sollte es Zusatzkomponenten geben, wären gute Tutorials zur Benutzung dieser erwünscht. Am Allerbesten wären auch Codebeispiele. Allerdings sollten diese Beispiele auch Kommentare enthalten.

Wenn ich mir anmaßen darf zu sagen, dass es mir wenig weiterhilft, wenn ihr "nur" Fachbegriffe verwendet. Sollten die Befehle oder Komponenten nicht durch ihren Namen oder ähnliches schon ausreichend erklärt sein, wäre ich euch ebenfalls für Erklärungen diesseits dankbar. Das gleiche würde bei Codebeispielen gelten.

Ich würde mich sehr darüber freuen, wenn wir in diesem Thread einen funktionstüchtigen Voicechat fertig gebastelt bekommen. Sollte es irgendwelche Fragen geben, fehlen euch Informationen zu meinem Delphi oder ähnliches oder sind euch meine "Anforderungen" zu grob/zu ungenau, schreibt es in den Thread.

Ich habe jetzt Zeit en masse. Und da ich Fachinformatiker lerne, ist so ein Voicechat ein guter Anfang in Sachen Netzwerkübertragung/Liveübertragung.

Solltest du bis hierher gelesen haben, hoffe ich, dass du Ahnung hast und mir helfen kannst. Der Chat den ich schon fertig habe, habe ich aus Gründen zur Komplettheit mit an diesen Thread angehangen.

P.S: Bevor jemand was sagt oder meckert. Ich suche schon seit mehreren Tagen das ganze Inet durch und auch das Forum hier. Dennoch ist es nie ein Thread genau über einen Voice-Chat. Daher fehlen mir die Zusammenhänge zwischen den ganzen Erklärungen und Codeschnipseln.
Angehängte Dateien
Dateityp: zip Server.zip (200,1 KB, 66x aufgerufen)
Dateityp: zip Client.zip (190,6 KB, 61x aufgerufen)
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Voice-/Sprach-Chat

  Alt 14. Jun 2014, 02:34
Beispiele findest du hier:

http://lakeofsoft.com/vc/a_voicechat.html
http://www.torry.net/pages.php?id=207

Ist kein einfaches Thema. Das Hauptproblem ist die effiziente Ausnutzung der zur Verfügung stehenden Bandbreite, zum einen durch intelligente Pufferungsmechanismen und zum anderen durch die Verwendung entsprechender Codecs.
Und solange genug Bandbreite zur Verfügung steht, ist das weniger ein Problem. Aber du musst bedenken, dass Voice Chats in der Regel zum Spielen eingesetzt werden und der Datenstrom dabei so gering wie möglich sein sollte, um den Ping nicht negativ zu beeinflussen, ohne dabei aber auch zur sehr an Qualität zu verlieren.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Voice-/Sprach-Chat

  Alt 14. Jun 2014, 12:31
Hi!

Da hast Du Dir eine nicht gerade einfache Aufgabe ausgesucht.

Auch wenn ich ein Freund davon bin, dass Rad neu zu erfinden. Würde ich Dir empfehlen ggf. ein Interface für TeamSpeak oder Skype
zu nehmen.

Selbst wenn Du einen fertigen Codec nimmst, die Sache mit dem Timing, Latenz, Bandbreite, Sprachqualität usw. verlangt schon 2-3 Threads die alle "richtig" Synchronisieret werden müssen.

Im lokalen 1000er Netzwerkt mit dauersenden kein Thema, aber wenn es darum geht gemäß eine Vorgabelautstärke nur zu senden, wenn auch gesprochen wird, wird es schon komplizierter (war bisher meine Hürde). Bei (push to talk) wäre da einfacher.

Mavarik
  Mit Zitat antworten Zitat
onepiecefreak2

Registriert seit: 13. Jun 2014
50 Beiträge
 
#4

AW: Voice-/Sprach-Chat

  Alt 14. Jun 2014, 12:43
@nuclearping
Danke erstmal für die Antwort.

Der Chat soll hauptsächlich zur Kommunikation im Allgemeinen (also außerhalb von Spielen erstmal) genutzt werden. Erstmal soll er nur funktionieren, heißt Optimierung und weniger Bandbreite nutzen, kann auch noch "später" gemacht werden.

Ich werde mir mal die Seiten und Beispiele anschauen. Werde mich melden sobald ich Fragen zu den beiden Seiten habe.

@Mavarik
Über die Komplexität bin ich mir bewusst. Mein Ziel ist dennoch "simpel" gehalten. Es soll zuallererst über haupt eine Verbindung stehen über die live Ton versendet wird. Ob es nun asynchron ist oder der Ton knackt ist dabei erstmal egal. Sobald eine solche Verbindung besteht, lassen sich diese "Feinheiten" immernoch einbringen.

Das ist meine bescheidene Meinung. Oder glaubt ihr diese Optimierungen MÜSSEN im Vorfeld getroffen werden? Glaube ich nämlich nicht.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#5

AW: Voice-/Sprach-Chat

  Alt 14. Jun 2014, 12:53
Im großen Ganzen her gesehen brauchst du drei Sachen:
  • Aufnahme/Wiedergabe von unkomprimierten Soundaten
  • einen Codec (z.B. MP3 oder OPUS)
  • ein Netzwerkprotokoll (z.B. RTP)
Da es quasi kaum zu schaffen ist, das alles selbst zu programmieren, musst du dich einschränken. Es wäre auch möglich das du zB. das Netzwerkprotokoll selbst entwirfst, allerdings sollte schon das richtige "Zusammenstecken" fertiger Implementierungen nicht ganz einfach sein.

Die Sache mit dem "erstmal laufender Prototyp" ist die: Codecs und Echtzeitübertragung sind nicht ganz einfach und du kannst dann leicht in die Situation kommen, dass du merkst, das du deinen bisherigen Entwurf quasi wegschmeißen musst, um es ordentlich zu machen.
  Mit Zitat antworten Zitat
onepiecefreak2

Registriert seit: 13. Jun 2014
50 Beiträge
 
#6

AW: Voice-/Sprach-Chat

  Alt 14. Jun 2014, 13:16
@BUG
Mir ist es schon oft passiert, dass ich alles wegwerfen muss. Das mach ich sogar lieber als immer wieder was im Code zu ergänzen. Wenn ich den Code dann immer wieder neu schreibe, bekomm ich manchmal sogar neue Einfälle zur Optimierung.

Ich glaube bevor hier mehr "allgemeines" Wissen ausgetauscht wird (nicht so ernstnehmen ), würde ich sagen stellen wir eine Schrittfolge auf.

Machen wir erstmal die Aufnahme vom Mikrofon. Wie ist das zu bewerkstelligen? Welche Komponenten? Und gibts Beispiele dazu?

@nuclearping
Die Seiten habe ich mir angeschaut und bin noch am Durchlesen und Probieren. Sollte sich darin die Lösung für die Aufnahme befinden, werde ich es hier sagen. Ansonsten, lasst die Ideen strömen.
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Voice-/Sprach-Chat

  Alt 14. Jun 2014, 14:53
@BUG
Mir ist es schon oft passiert, dass ich alles wegwerfen muss. Das mach ich sogar lieber als immer wieder was im Code zu ergänzen. Wenn ich den Code dann immer wieder neu schreibe, bekomm ich manchmal sogar neue Einfälle zur Optimierung.
Wenn du einfach nur rumprobieren und experimentieren willst, spricht nichts dagegen. Aber wenn du wegen fehlender Strukturierung, Planung und Modellierung ständig Codes verwirfst, ohne mit deinem Projekt wirklich vorwärts zu kommen, ist das längerfristig frustrierend.

Du solltest dir jetzt unbedingt schon Gedanken machen, wie du Protokolle, Klassen und Threads entwirfst, um die verschiedenen Aufgaben (Aufnahme, Wiedergabe, Komprimierung, Dekomprimierung, Senden, Empfangen, ...) zu erledigen, wenn du das Projekt irgendwann in nächster Zeit auch mal soweit haben willst, dass es läuft.

Und wenn du dir schon so ein komplexes und kniffliges Projekt raussuchst, sollte auch ein gewisser und halbwegs vertrauter Umgang mit den dazugehörigen Themen gegeben sein. Ohne an dir zweifeln zu wollen, aber wenn du schon danach fragst, wie man Sachen vom Mikrofon aufnimmt und welche Komponenten man dafür braucht, dann sind das keine guten Vorraussetzungen. Oder?
  Mit Zitat antworten Zitat
onepiecefreak2

Registriert seit: 13. Jun 2014
50 Beiträge
 
#8

AW: Voice-/Sprach-Chat

  Alt 14. Jun 2014, 16:01
Ja, mag schon stimmen. Dennoch ist in deinem Post ein guter Ablaufplan vorhanden. Wenn ich diesen Ablauf Stück für Stück abarbeite, wäre es möglich mein Wissen entsprechend auszubauen.

Natürlich ist es eine dumme Frage nach Aufnahme- oder Wiedergabekomponenten. Ich glaube dazu könnte ich noch was finden. Das Senden und Empfangen kann ich ja schon mit Strings. Allerdings ist es ja ein Unterschied ob ich nun mit SendText und ReceiveText einen String versende oder mit anderen Befehlen eine Audiodatei. Demnach ist das Senden und Empfangen wohl noch eine Frage für diesen Thread hier.
Andererseits noch eine Frage: An welchem Punkt muss die Komprimierung/Dekomprimierung stattfinden?

Ich danke für eure Mühen bisher!
  Mit Zitat antworten Zitat
onepiecefreak2

Registriert seit: 13. Jun 2014
50 Beiträge
 
#9

AW: Voice-/Sprach-Chat

  Alt 14. Jun 2014, 18:04
Um den aktuellen Status zu Seite zu bringen: Ich habe nun die Aufnahme von Ton in Delphi gebracht.

Das ist der Code dazu. (Sollte der dem einen oder anderen bekannt vorkommen, ich habe ihn aus diesem Thread entnommen: http://www.delphipraxis.net/7803-sound-aufnehmen.html)
Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, mmSystem; //Die Unit mmSystem muss hier stehen, sonst sind die Befehle nicht zu nutzen.

//...

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin

//Aufnahme des Tons.
     mciSendString('OPEN NEW TYPE WAVEAUDIO ALIAS mySound',nil,0,Handle);
     mciSendString('SET mySound ' +
                   'TIME FORMAT MS ' +
                   'BITSPERSAMPLE 16 ' +
                   'CHANNELS 2 ' +
                   'SAMPLESPERSEC 44100 ' +
                   'BYTESPERSEC 176400 ' +
                   'ALIGNMENT 4',
                   nil,0,handle);
     mciSendString('RECORD mySound',nil,0,Handle);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin

//Beenden der Aufnahme und Speichern der Datei.
mciSendString('STOP mySound',nil,0,Handle);
     mciSendString('SAVE mySound "c:\datei.wav"',nil,0,Handle);
     mciSendString('CLOSE mySound',nil,0,Handle);
end;
Nun versuche ich diese Datei zu konvertieren und will am Besten LAME benutzen. Wie kann ich das Einbinden? Sollte das nicht gehen, wie kann ich das sonst aus dem Programm heraus realisieren?

P.S: Ich habe mich derweil ein wenig in das Thema "Threads" reingelesen. Heißt, ich kann diese Konvertierung auch in einem Thread laufen lassen, was mir doch sicher geraten wird, oder?

Geändert von onepiecefreak2 (14. Jun 2014 um 18:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.100 Beiträge
 
Delphi 12 Athens
 
#10

AW: Voice-/Sprach-Chat

  Alt 14. Jun 2014, 19:47
Also so kannst du das wohl gleich wieder vergessen.

Was willst du denn damit machen?
Jeweils 1-x Sekunden aufnehmen, das danach speichern, umwandeln und dann auch noch übertragen?
Erstmal gibt es dann entweder ständig Aussetzer, wenn du die Aufnahme immer wieder stoppst, weil die aufgenommenen Stückchen nicht zu lang sein dürfen,
denn sonst ergibt das schließlich eine ganz schöne Verzögerung, bis das andere Ende endlich mal was hören kann.

Fazit: Du brauchst auf jeden Fall eine Aufnahmemethode, welche per Streaming aufnimmt und wo man die Daten bereits während der Aufnahme einlesen, umwandlung und versenden kann.

Eventuell ist die bass.dll da schon bissl geeigneter.


PS: Man mag es nicht glauben, aber die Suchfunktion ist nicht ganz umsonst.
http://www.delphipraxis.net/106489-a...-oder-udp.html
http://www.vclcomponents.com/s/0__/a...ponent_delphi/
uvm.




Aber ja, so kann man das natürlich dennoch machen, aber dann mußt du das anders regeln.
z.B.:
- man drückt auf einen Knopf, nimmt auf, bis man loslässt,
- dann wird die Aufnahme umgewandelt, übertragen und danach drüben abgespielt.

Das ist dann so ähnlich, wie mit den Walkie-Talkies früher.




Und ja, man kann natürlich die Zeitkrittischen Teile auf mehrere Threads aufteilen.
z.B.:
- in einem Thread aufnehmen
- im nächsten Thread parallel dazu das bereits aufgenommene Umwandeln
- im dritten Thread das übertragen,
- dann 'nen Thread zum Empfangen des Tons der Gegenseite (den Thread braucht man nicht unbedingt selber machen ... je nach Übertragungskomponenten)
- und dann 'nen Thread zum Abspielen des Tons

Je nach Auslastung kann man auch mehrere Dinge zusammen in einem Thread machen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.

Geändert von himitsu (14. Jun 2014 um 19:55 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz