Rece mi opadaja, nikt nie pomoze? [wave]

0

Nie zlicze, ktory to juz raz pytam :( Jestem zielony, ale przeciez wsrod guru z Delf ;) ktos musi umiec odtwarzac wave'y inaczej niz MPlayerem czy SoundPlay... Juz nie prosze - jak kilka postow nizej o pomoc w odtworzeniu kilku wave'ow jednoczesnie... - chce odtworzyc jeden - ale na podane przez mnie urzadzenie, a nie domyslny mapper... Obok mnie lezy 6 ksiazek o Delphi i totalna kicha - w zadnej poza zdawkowym opisem prostego MPlayera nic o audio... Czy zadaje glupie pytanie, czy Delphi nie nadaje sie do tego? Moze ktos sie zlituje... ;)

Jacek

0

Poszukaj... w sieci jest doskonała biblioteka bass.dll, która rozwiąże Twój problem. Polecam.

0

Nie do konca jest to rozwiazaniem - choc dziekuje, jestes pierwsza osoba, ktora sensownie cos mi doradzila. Ta biblioteka jest wygodna, ale sa dwa 'ale'. Jeden to taki, ze przy odtwarzaniu wielokonalowym - nie jednego pliku interleaved, a kilku strumieni - choc graja synchronicznie rozmijaja sie w chwili startu. jesli ten sam plik wyslesz na kilka wyjsc - kazdy jako niezalezny bass channel, to graja one z delikatnym przesunieciem, co nie jest dla mnie akceptowalne. Drugi problem to taki, ze chcialbym sam... ;-) Chce sie nauczyc, ot co.

Jacek

0

Delphi jako takie nie ma odpowiednich mechanizmów. Albo trzeba znaleźć niezależną bibliotekę czy komponent (w tym wypadku lepszą niż bass), albo wczytać się w windowsowe mechanizmy. Polecam lekturę MSDN. Zgaduję, że DirectSound może pomóc. Z drugiej jednak strony majaczy mi się, że jednoczesne wysyłanie wielu dźwięków tą metodą łączy się ze zmniejszeniem jakości. Jeśli Twój program ma czas, może najprostsze byłoby zmiksowanie wavów w jeden przed odtworzeniem.

Jak (i jeśli) kupię Adobe Audition, to spróbuję podedukować, jak to działa.

0

Tne programik to cos w rodzaju instant player - zaczytuje playliste, kazdy element to 4 wave'y wyzwalane jednoczesnie - kazdy na inne wyjscie, no i wlasnie utknalem w tym momencie. Wczytuje sie jeszcze w te biblioteke bass, moze cos wymysle. Czasu na mixdown nie ma - bo uzytkownik wybiera dany zestaw do odtworzenia i wciska play - i ma grac. Gra, ale kazdy kolejny element jest opozniony o stala (chyba) wartosc. Oczywiscie karta dba o pelna sycnhronizacje - wiec on dalej juz sie nie rozjada, problem jest jedynie z jednoczesnym wystartowaniem. Mixdown odpada z drugiego powodu - kazdy z tych wave'ow musi wychodzic na niezalezne wyjscie.

Jacek

0

Proponuję pokazać kod, jakiego użyłeś, bo nie wierzę, aby bass miał aż takie opóźnienia podczas startu dwóch kanałów.

0

Oto fragment procedury:

{ Channel1, Channel2: DWORD;

BASS_Init(1, 44100, 0, Application.Handle, nil);
BASS_Init(2, 44100, 0, Application.Handle, nil);
if BASS_SetDevice(1) then  Channel1 := BASS_StreamCreateFile(FALSE, PChar('C:\test\wave1.wav'), 0, 0, 0);
if BASS_SetDevice(2) then Channel2 := BASS_StreamCreateFile(FALSE, PChar('C:\test\wave1.wav'), 0, 0, 0); 
BASS_StreamPlay(Channel1, False, 0);
BASS_StreamPlay(Channel2, False, 0);
{ a jak skonczy: }
BASS_StreamFree(Channel1);
BASS_StreamFree(Channel2);
{ i przy zamykaniu formy: }
BASS_Free;

Moze sa tu bledy - bo pisze z glowy, jestem w tej chwili w pracy. Wprawdzie pominalem tu rozpoznawanie urzadzen, ale to nie jest istotne - widzi wszystkie 9 wyjsc i tu bledu nie ma - wave'y trafiaja na niezalezne wyjscia. Sprawdzalem latencje i probowalem ustawic ChannelSetPosition po otwraciu kanalu, ale to nic nie daje - sa caly czas rozsuniete - wrecz pojawia sie flanger - czyli jest to opoznienie mierzone w ms.

Any idea?

Jacek

0

Widze, ze zaczynasz tracic wiare w ludzi;P wiec specjalnie dla Ciebie postanowilem sprawdzic jak to jest z ta synchronizacja...
Z tym ze nie uzylem do tego tak chwalonego przez wszystkich bassa - zassalem z netu cos co sie zwie fmod. Wiec jesli pragniesz wykorzystac cos alternatywnego to pragne Cie poinformowac ze Twoj problem zostal rozwiazany! :)

Sciagnij po prostu ten komponent, nastepnie odpaal przyklad dla delphi co sie zwie "simplest". Zmodyfikuj go tak:

w zmiennych globalnych dodekalruj jedna zmienna:

mdl,mdl2: PFMusicModule; //mdl2 nowa zmienna

w sekcji

// ==========================================================================================
// LOAD SONG
// ==========================================================================================

mdl := FMUSIC_LoadSong('../../media/invtro94.s3m'); {can be xm, s3m...}
if mdl = nil then
begin
writeln('Error! Loading song');
writeln(FMOD_ErrorString(FSOUND_GetError()));
FSOUND_Close();
exit;
end;

dorzuc taki kod:

mdl2 := FMUSIC_LoadSong('../../media/invtro94.s3m'); {can be xm, s3m...}
if mdl = nil then
begin
writeln('Error! Loading song');
writeln(FMOD_ErrorString(FSOUND_GetError()));
FSOUND_Close();
exit;
end;

No i po wszystkim.

Masz dwa moduly grajace bez zadnego opoznienia...uprzedzam ze dla mp3 wav itd nie bedzie dzialac. Zeby zadzialalo to juz polecam helpa:)

Pozdrawiam,

Wodzu

0

Widze, ze nie ja jeden mialem z tym problem. Wczoraj zrobilem nawet test - wyslalem 'jednoczesnie' trzy razy tego samego wave'a, ktory zawieral jedynie impuls o dlugosci jednego sampla. No i niestety po rejestracji wyszlo szydlo z worka, ze nie dostalem zsumowanego sygnalu, a trz impulsy w odstepach 36ms i 20ms (w sumie 56ms). Totalna porazka - BASS nie nadaje sie do profesjonalnych zastosowan. http://www.un4seen.com/forum/?board=1;action=display;threadid=142 - tu potwierdzily sie moje obawy.

Wodzu - dziekuje za sugestie, pobralem i potestuje, choc na pierwszy rzut oka wyglada podobnie do BASSa. Twoj kod nie do konca mi sie sprawdzi. Po pierwsze muza toi byc wave'y lub mp2/mp3. Nie moge ladowac plikow do pamieci - musi to byc streaming z dysku, bo wave'y moga byc bardzo duze i chce az 4 jednoczesnie.

To zapytam inaczej - czy ktos moze mnie wspomoc kodem do odtworzenia wave'a - ale od 'a' do 'z'z, sprawdzam jakie sa porty, owtieram port (i tu juz mi pomoc nieco potrzebna) i jak dalej? Oczywiscie chodzi o streaming, a nie SoundPlay.

Jacek

0

Tak jak mowilem zeby zaladowac wavy albo mp3 musisz tylko zajrzec do helpa i zmienic doslownie jedna linijke kodu. A jesli chodzi ow czytywanie z dysku to tez nie powinno byc problemu...

Pozdrawiam,

Wodzu

1 użytkowników online, w tym zalogowanych: 0, gości: 1