Ĺ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
- 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 ;]