Renderowanie offline / w czasie rzeczywistym za pomocą interfejsu API Web Audio
Pracuję nad aplikacją internetową, w której użytkownicy mogą sekwencjonować próbki audio i opcjonalnie stosować efekty do tworzonych wzorów muzycznych za pomocą interfejsu API Web Audio. Wzory są przechowywane jako dane JSON i chciałbym przeprowadzić analizę renderowanego audio każdej strony wzorcowej po stronie serwera. Pozostawia mi to dwie opcje, o ile widzę:
Uruchom mój własny kod renderujący po stronie serwera, starając się uczynić go jak najbardziej wiernym do renderowania w przeglądarce. Może mógłbym nawet wyciągnąć kod Web Audio z projektu Chromium i zmodyfikować go, ale wydaje się, że to potencjalnie dużo pracy.
Wykonaj renderowanie po stronie klienta, miejmy nadzieję, że szybciej niż w czasie rzeczywistym, a następnie wyślij renderowane audio na serwer. Jest to idealne rozwiązanie (i DRY), ponieważ do renderowania wzorców używany jest tylko jeden silnik.
TheMożliwy RozwiązanieTo pytanie poprowadź mnie doten przykładowy kod w repozytorium Chromium, co wydaje się wskazywać, że przetwarzanie w trybie offline jest możliwe. Sztuką wydaje się być skonstruowaniewebkitAudioContext
z pewnymi argumentami (zwykle używany jest konstruktor o zerowym argumencie). Oto moje przypuszczenia dotyczące znaczenia parametrów:
new webkitAudioContext(2, // channels
10 * 44100, // length in samples
44100); // sample rate
Dostosowałem nieco próbkę i przetestowałem ją w Chrome 23.0.1271.91 na Windowsie, Macu i Linuksie.Oto przykład na żywoi wyniki (otwórz Konsolę JavaScript Narzędzia Dev, aby zobaczyć, co się dzieje):
Mac -To działa!!Windows -ZAWIEŚĆ - SYNTAX_ERR: wyjątek DOM 12Linux -ZAWIEŚĆ - SYNTAX_ERR: wyjątek DOM 12ThewebkitAudioContext
Konstruktor opisany powyżej powoduje wyjątek w systemach Windows i Linux.
Byłoby renderowanie offlineidealny za to, co próbuję zrobić, ale nie mogę znaleźć dokumentacji w żadnym miejscu, a wsparcie jest mniej niż idealne. Czy ktoś ma więcej informacji na ten temat? Czy powinienem oczekiwać wsparcia dla tego systemu w Windows i / lub Linuxie wkrótce, czy też powinienem oczekiwać wsparciaznikać wkrótce na Macu?