Potestujcie plz - funkcja do wavów

0

Wziąłem sie za pisanie pewnego programiku w którym miedzy innymi muszę odgrywać wavy określoną liczbę razy. Zacząłem się przeto wgryzać w BASSa i ze zdziwieniem zauważyłem, że nie pozwala on na to. Podobnie jak w banalnym PlaySound, można albo odegrać raz, albo odgrywać w kółko - czyli potencjalnie nieskończoną liczbę razy.

No to napisałem funkcję, która tworzy wava składającego się z zadanej liczby powtórzeń wava źródłowego. Wav wynikowy może lądować w pamięci lub na dysku, dodatkowo zwracana jest informacja o formacie dźwięku.
Niejako z konieczności wyszła mi dodatkowa funkcjonalność. Format wave poza istotnymi składnikami (format dźwięku i sam dźwięk) może zawierać kupę innych informacji - teksty, cue points itd, które do zrobienia powtórzeń tylko przeszkadzają. Wynikowy wav jest więc pozbawiony takich dodatkowych danych, innymi słowy, sprowadzony do postaci kanonicznej<font color="red">*</span>. To się może komuś przydać, bo niektóre zwłaszcza starsze lub prymitywniejsze programy (np. niektóre moje :-P ) czytają tylko postać kanoniczną. Podobno niektóre CD-burnery potrafią się wyłożyć na dodatkowych danych. A za konwerterek pewien autor chce $25... http://www.lightlink.com/tjweber/StripWav/StripWav.html :-)

Proszę więc uprzejmie o przetestowanie tej funkcji, w razie wykrycia bugów chętnie zobaczę nie tylko opis, ale i problematycznego wava.

Przemogłem własne lenistwo i skomentowałem porządnie tę funkcję. Przed testem proszę więc łaskawie zapoznać się z komentarzem - zawiera istotne informacje co do sposobu uruchamiania i ograniczeń.

Gdyby ktoś chciał wykorzystać tę funkcję w swoim programie, to zaprszam, ale tylko niekomercyjnie i bez jakichkolwiek gwarancji z mojej strony :-).

No to już tylko link: http://pq.royy.net/WavProcs.pas

<font color="red">* w pewnych szczególnych wypadkach postępowanie takie może spowodować zgubienie dźwięków, np. gdy w wavie zaszyta jest lista aiffów. Ale takimi chorymi sytuacjami nie mam zamiaru się zajmować :-P</span>

0

Hmm... A wracając do sedna problemu - konkretnie BASS'a - nie możesz po prostu kazać mu odtwarzać kolejny raz wav'a, po skończeniu pierwszego odtwarzania (bass po zakończeniu ustawia pozycję na -1 s, może to być przydatne info) i zwiększać licznik? Jak by była określona ilość odtworzeń, to by przerwał odtwarzanie od nowa?

0

Hm, a skąd będę wiedział, że skończył poprzedniego wava? Mam ciągle sprawdzać czy pozycja jest -1?

Poza tym to zajmie zawsze troszkę czasu a u mnie będzie gładko.

PS. Funkcja ma drobny błędzik: nie uzwzględnia, że długość chunku musi być parzysta. Ma to szansę ujawnić się chyba tylko przy niektórych plikach 8-bit nono o nieparzystej liczbie sampli, lub z jakimiś dziwnymu chunkami. Pracuję nad tym i wkrótce będzie poprawka.

(już jest poprawione)

0

pq - to zależy.
Możesz zrobić tak jak ktoś proponował apropos czegoś innego: Przy starcie pliku sprawdzasz jego długośći ustawiasz timer'a na tę długość właśnie. No i jak ten timer się uruchomi (w gwoli ścisłości - wywoła zdarzenie OnTimer), puszczasz kolejną piosenkę czy co by to tam nie było i ew. sprawdzasz wcześniej, czy piosenka się skończyła (sprawdzasz, czy pozycja jest -1).

0

Rozumiem o co Ci chodzi, ale w moim wypadku konieczna jest idealna precyzja i looping co do sampla. Którego w BASSie niestety nie ma. A szkoda, bo to chyba nietrudno zrobić - zwłaszcza, że looping 'nieskończony' jest.

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