Я пытаюсь написать веб-приложение, которое записывает файлы WAV (например, с микрофона пользователя). Я знаю, что сам по себе Javascript не может этого сделать, но меня интересует наименее проприетарный метод для расширения моего Javascript. Мои целевые браузеры - Firefox для ПК и Mac (без ActiveX).
Я так понимаю, это можно сделать с помощью Flash (но не как файл в формате WAV). Я так понимаю, это можно сделать с помощью Java (но не без подписи кода). Это единственные варианты?
Я хотел бы записать файл как WAV, потому что целью веб-приложения будет сборка библиотеки коротких звуковых фрагментов качества хороший. Я предполагаю, что загрузка будет 50 МБ, что того стоит по качеству. Приложение будет использоваться только в нашей интрасети.
ОБНОВЛЕНИЕ: теперь есть альтернативное решение благодаря предстоящему аудио API JetPack: см. https://wiki.mozilla.org/Labs/Jetpack/JEP/18



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Flash станет вашим лучшим решением.
Надеюсь, это поможет: http://www.kirupa.com/forum/showthread.php?t=17331
Да, я считаю, что Flash или Java-апплет - единственные способы сделать это. Поскольку вы не можете взаимодействовать с микрофоном, вы должны использовать какой-то плагин для браузера, это единственный способ использовать микрофон. Я не знаю ни одного другого плагина, который предоставлял бы такие функции. Быстрый поиск в Google не выявил дальнейших возможностей. Я думаю, что проще всего было бы работать с Flash.
Единственные варианты: Flash, Java, ActiveX или создание собственного расширения Firefox. Flash, вероятно, ваш лучший вариант - вы можете написать или использовать существующее приложение Flash для записи и сохранить почти все остальное в чистом Javascript.
Зачем вам нужен файл WAV? Если вы планируете обрабатывать фактические биты сигнала на клиенте, это, вероятно, плохая идея; клиент может быть очень медленным, и вы не сможете по-настоящему манипулировать файлом. Если вы хотите отправить звук обратно на сервер, то гораздо лучше отправить сжатый файл, а затем распаковать его на сервере.
Flash требует, чтобы вы использовали медиа-сервер (примечание: я все еще использую Flash MX, но быстрый поиск в Google обнаруживает документацию для Flash CS3, которая, похоже, согласуется - обратите внимание, что Flash CS4 скоро выйдет, может измениться). Macromedia / Adobe стремятся заполучить вам свой медиа-сервер, но проект с открытым исходным кодом Red5 может подойти для вашего проекта:
Я думаю, что Java будет более подходящей. Я видел апплет, который может делать то, что вы хотите, в Moodle (виртуальная обучающая среда с открытым исходным кодом):
(сайт требует членства, но открыт для Google, поэтому ссылка ведет на страницу кеша Google).
Начиная с версии Flash 10, вам не нужен медиа-сервер. Вы можете захватить необработанные образцы и отправить их в произвольный сервер с помощью HTTP-сообщения. code.google.com/p/wami-recorder
Вы можете загрузить Real Producer Basic, который здесь бесплатно (http://forms.real.com/rnforms/products/tools/producerbasic/), и встроить его как объект activeX, поскольку он находится в вашей интрасети. Flash будет встраиваться таким же образом, он есть на всех офисных рабочих станциях, но, поскольку это ваша интрасеть, вы можете установить его на всех машинах с AD. Настоящие аудиофайлы очень маленькие по сравнению с wav и отлично звучат. Вот ссылка на руководство по Real Sudio ActiveX. http://service.real.com/help/library/guides/activex/producerx.html
Другое решение, если вы не против того, чтобы ваши пользователи устанавливали плагин, - это использовать плагин Runtime Revolution RevWeb, который поддерживает запись звука в браузере (и его легко реализовать, я сделал тестовый апплет, чтобы подтвердить это примерно через 10 минут). http://revweb.runrev.com/
Это старая ветка, но проблема остается актуальной. Следует отметить, что существует способ записи звука на сервер во Flash без использования собственной серверной части. Вот пример проекта, с которого можно начать:
https://code.google.com/p/wami-recorder/
Я бы сказал, что этот ответ лучше, чем принятый в 2008 году, поскольку он имеет тот же эффект, но компонент выделенного сервера не требуется. Это еще не полное решение, так как оно не будет работать на мобильных устройствах Apple, которые широко распространены. Надеюсь, вскоре появится разумный кроссплатформенный стандарт, сочетающий в себе встроенную запись, открытый формат файла и простой HTTP-пост.
Может быть, вам это пригодится: github.com/milani/microphone.js