AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Voice-/Sprach-Chat

Offene Frage von "onepiecefreak2"
Ein Thema von onepiecefreak2 · begonnen am 13. Jun 2014 · letzter Beitrag vom 20. Jun 2014
Antwort Antwort
Benutzerbild von BUG
BUG

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

AW: Voice-/Sprach-Chat

  Alt 14. Jun 2014, 11: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
 
#2

AW: Voice-/Sprach-Chat

  Alt 14. Jun 2014, 12: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
 
#3

AW: Voice-/Sprach-Chat

  Alt 14. Jun 2014, 13: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
 
#4

AW: Voice-/Sprach-Chat

  Alt 14. Jun 2014, 15: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
 
#5

AW: Voice-/Sprach-Chat

  Alt 14. Jun 2014, 17: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 17:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Voice-/Sprach-Chat

  Alt 14. Jun 2014, 18: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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

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

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

AW: Voice-/Sprach-Chat

  Alt 14. Jun 2014, 18:56
Deine Idee mit den Threads, wie du sie aufteilst, dachte ich mir auch schon. Das Problem ist nun Folgendes: Ich brauche etwas um das schon vorhandene Tonmaterial umzuwandeln. Wie ich schon in einem früheren Post anmerkte würde ich zum Umwandeln gerne LAME benutzen. Es ist allerdings so, dass ich nicht weiß wie ich das einbinde.

Hast du vllt. eine Idee? Oder gleich einen Code dafür?

Noch interessant wäre: Wenn ich die Datei sofort dann umwandle, wenn sie am Entstehen ist, muss ich da auf mehr Dinge achten, als wenn ich eine schon fertige Datei umwandle?

Geändert von onepiecefreak2 (14. Jun 2014 um 19:07 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 02:57 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