ďťż

Ładny brzuch

Sprawa jest dosyć złożona i wymaga sporej dozy wiedzy, a także tego czegoś ;]. Programuje w Delphi lekko licząc już z 5 lat i teraz mam poważne zajęcie. Rozchodzi się mianowicie o program typu klient-serwer, gdzie klient jest tylko i wyłącznie aplikacją wysylającą dźwięk pobrany z mikrofonu na serwer. Natomiast serwer ma ten dźwięk odebrać i pozwalać na odsłuchanie tegoż dźwięku w czasie rzeczywistym. Tu jest właśnie pies pogrzebany, mianowicie jak przesyłać dźwięk strumieniowo. Myślałem nad tym żeby z pliku *.wav zczytywać kolejne bajty i przesyłać je na serwer gdzie będą dopisywane do kolejnego pliku. Problemy są następujące:
- jak zapisywać dźwięk z mikrofonu w czasie rzeczywistym i ewentualna jego kompresja ponieważ łącze ma przepustowość upload'u rzędu 10 kbps czyli naprawdę mało
- jak odtwarzać dźwięk rozpoczynając od kolejnych bajtów [rozwiązanie dosyć prymitywne to zapisywanie próbek np. 1-sekundowych i przesyłanie ich jako kolejnych plików, ale nie jest to zbyt dobre]

Na razie pewnie tyle, jeśli ktoś ma rozwiązanie tych problemów lub inne ciekawe sposoby zapraszam może akurat się przyda.

// pisz prefixy - Bełdzio
Użytkownik Bełdzio edytował ten post 09 lipiec 2005, 01:09


Po odebraniu jakiejś porcji danych (buforowanie) możesz spróbować ładować od razu dźwięk do pamięci, np. FMOD'em (http://www.fmod.org/ifmoddownload.html).
Użytkownik Cyrkiel edytował ten post 06 lipiec 2005, 16:20
Poleceam BASS-a :)

Ja BASS'a używałem dawno nawet bardzo i jakoś nie pamiętam, jest tam możliwość kompresji w locie?? Bo mnie tylko i wyłącznie taka opcja interesuje. Serwer nie może otrzymywać dźwięku z opuźneniem. Wiadomo, że jakieś opuźnienie zawsze będzie ale raczej niewielkie. Niestety nie jest możliwe przerywanie przesyłu, jedyne przerwy jakie mogą być to niezależne spowodowane spadkiem transweru.

Chyba żeby sprawę rozwiązać plikami o długości 1 s, czy załużmy konkretnej liczby kilobajtów. Wtedy mierzyłbym wilekość zgrywanych plików i wysyłał je z nazwami inkrementowanymi po każdym zapisie. Wydaje mi się to rozwiązaniem najprostszym bo plik, który "namacalnie" jest dostępny na dysku jest łatwiej: skompresować, wysłać i obsłużyć. Jeśli ktoś ma jakiś pomysł jeszcze dotyczący zapisu dźwięku z mikrofonu na dysk za pomocą BASS to byłbym wdzięczny bo jak narazie moją przygoda z nim ograniczała się do odtwarzania *.mp3 ;]
Użytkownik metaxy edytował ten post 06 lipiec 2005, 18:06


w basie mozesz zmienic jakosc dzwieku, ale co do kompersji (np. mp3) to chyba nie :(

Kolejne pytanie, odbieranie strumienia w BASS'ie na podstawie radia jest proste i jak najbardziej możliwe. Teraz pytanie czy jest możliwe utworzenie takiego strumienia i wysyłanie go bo to w poważny sposób rozwiązywałoby moje problemy.

Nie wiem czy o to Ci chodzi, ale w bassie jest mozliwosc gdgrywania z callbackiem czy cos w tym stylu...

Myśl jest prosta, dźwięk który jest zgrywany z mikrofonu chcę wysyłać w sieć a prostym programikiem typu tego radia które jest w przykładach BASS'a odbierać. Jeśli wiesz w jaki sposób wysłać to to napisz. Ewentualnie jakiś inny sposób np. wysyłanie dźwięku z pliku już zapisanego na dysku, choć ten pierwszy sposób byłby najlepszy.

No to pisze: uzyj nagrywania z callback-iem, wysylaj pakiety, buforuj dane, odgrywaj. Ja tak robilem jak pislame program do rozmowy przez siec.

Jak robiłeś taki program i masz taką możliwość to mi go podeślij chętnie skorzystam, bo mnie za cholerę to nie wychodzi ;]

Czemu nie. Brojekt byl tyko testem... ale jakos tam dzialal. Tylko podaj adres.

Puść mi na metaxy@interia.pl
i Bóg Ci zapłać dobry człowieku bo ja nie mam jak ;]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •