Профессиональный звуковой софт в большинстве случаев не нужен. Вот мне он не нужен, а звуковая карта нужна. Правильный ответ - потому что звуковая подсистема в Линуксе не годится вообще никуда, кроме планшетика, да и то под вопросом.
Сама по себе чистая Alsa архитектурно уродлива. Простейший пример вывода звука - это 1000 грёбаных строк кода, нифига не тривиальных. Это щто вообще ? Это Unix-way ? Был прекрасный OSS, где вывод звука можно было огранизовать из командной строки. Красиво, мощно. Это можно было в шоу показывать. Нет, надо было убить прекрасное API, и внедрить эту бороду. Все эти звуковые серверы - они не пустом месте появились, понимаешь. Не пульса первая, и не пульса последняя. Они всего лишь для того, чтобы замаскировать ЭТО.
OSS v3 отправлял поток данных в формате PCM в файл /dev/dsp. Из-за этого не работало микширование.
Микширование в OSS работало на звуковых картах, поддерживающих аппаратное микширование. А вот уже софтверное микширование, кому оно надо, логично было бы положить на звуковой сервер.
Ну и заодно микширование починили.
Не починили, а сгородили комбайн. Не должен драйвер делать то, что не умеет звуковая карта. Это называется костыль.
Простейший пример вывода звука - это 1000 грёбаных строк кода, нифига не тривиальных.
И откуда ты это взял? У меня файл с вводом-выводом звука через поллинг с поддержкой нескольких потоков воспроизведения в одной нити, с перечислением устройств ввода занимает 638 строк. Без вычета пустых строк и строк с комментариями. Хотя последних не особо много.
Судя по такому высказыванию, о «простейшем» примере, ты даже близко не подходил к собственно кодированию.
У меня файл с вводом-выводом звука через поллинг с поддержкой нескольких потоков воспроизведения в одной нити, с перечислением устройств ввода занимает 638 строк.
Ну, всё. Это меняет дело. Зарываюсь в землю, молчу. Только это. Даже в win32 api это от силы строк 50 (с запасом). А нормальным я, старый пирдун, вот лично считаю три строки : open, ioctl, write.
Даже в win32 api это от силы строк 50 (с запасом).
Ты сравнивал минимальный пример на win32 api (кстати, что это? Для звука там другие API) с подробным pcm.c, где напихали много всего ради того, чтобы это всё посмотреть. Научись уже адекватно сравнивать.
Вот я смотрю в реальный код, который в Firefox для звука используется, и что-то не вижу особого отличия в размерах. Там прослойка с различными бекендами.
А зачем в лисе поддержка джека? Я всегда думал что джек это для профессиональной звукозаписи с низкими задержками, что не пробраузер. Или я чего не понимаю?
Ещё больше заинтриговал. К чему такой аппарат, если не для работы с музыкой? Могу ещё озвучку фильмов/сериалов и запись подкастов предположить, но м-аудио за 10к+микрофона+преампа для этого за глаза
Ну, ещё такой параметр, как надёжность. У меня были : Aurion топовый, Creative X-Fi топовый. Сдохли. Про m-audio, esi ничего не скажу, но у знакомых дохли. А эта живёт, как новенькая.
>> OSS v3 отправлял поток данных в формате PCM в файл /dev/dsp. Из-за этого не работало микширование.
> Микширование в OSS работало на звуковых картах, поддерживающих аппаратное микширование. А вот уже софтверное микширование, кому оно надо, логично было бы положить на звуковой сервер.
Ну не так же всё было, ну! Я тоже можу ошибаться, так что если что, поправьте:
OSS v.3 создавал файл /dev/dsp. Когда одна программа копировала в него поток данных в формате PCM, другая программа не могла делать то же самое: файл занят, он монопольно захвачен другой программой.
Не от сладкой жизни в те годы появились ESD и aRts. Конечно, их задача не сводилась к одному только микшированию:
http://www.linuxlib.ru/mmedia/linmuz.htm
Программирование звука - интересная тема. Тем, кому нравится звучание «ямаховского» DX7, рекомендую обратить внимание на совсем юный проект LegaSynth (reduz.com.ar/legasynth) - программный эмулятор Yamaha DX7 FM. Любители модульных синтезаторов наверняка найдут все, что им необходимо, в проекте aRts - это стандартный KDE-шный сервер, синтезатор и сэмплер. Как аудиосервер и сэмплер aRts мне не нравится, однако читать фирменные CD-ROM со звуковыми библиотеками в формате Akai в Linux может только он.
Но 99% пользователям от них было нужно микширование, и только микширование! Потому что OSS его не умел. Кстати, советую почитать процитированную статью - она всё расставляет по местам.
>> Ну и заодно микширование починили.
> Не починили, а сгородили комбайн. Не должен драйвер делать то, что не умеет звуковая карта. Это называется костыль.
Ммм, первые лет 5 после релиза ALSA не умела программное микширование. Она работала только с аппаратным. А OSS не работал даже с аппаратным! Совсем недавно программный микшер dmix в ALSA включили по умолчанию - раньше приходилось править конфиг.
// Ищу соведущего для видеоблога. Соведущий должен уметь создавать музыку, и должен показать типичные use-кейсы JACK. Всего ведущих будет три: я расскажу теорию, девушка покажет сиськи фейс и покажет практику за компьютером. Парень тоже покажет практику: покажет как настраивать JACK и сыграет на гитаре :-)
Когда одна программа копировала в него поток данных в формате PCM, другая программа не могла делать то же самое: файл занят, он монопольно захвачен другой программой.
ТОЛЬКО В ТОМ СЛУЧАЕ, ЕСЛИ ЗВУКОВУХА НЕ УМЕЛА АППАРАТНОЕ МИКШИРОВАНИЕ. Если звуковуха умела аппаратное микширование, никакого захвата файла не происходило. Это Unix - магия, товарищ.
Не от сладкой жизни в те годы появились ESD и aRts
Разумеется. Вендоламеры, покупающие убожища за $10 вместо звуковой карты, а также, счастливые владельцы AC-97, хотели как Венде. Вот для них, и постарались.
Но 99% пользователям от них было нужно микширование, и только микширование!
А мне надо 99.000.000 долларов США и прямо сейчас ! Мало ли что они хотят. Если делать систему, с которой может работать каждый идиот - только идиот и сможет с ней работать.
Ищу инфу. Тут пишут что в Fedora Core 1 не работает микширование, потому что: 1). Там ядро 2.4 и OSS. 2). У юзера AC97. И предлагают обновиться до Fedora Core 2 - там ALSA, там можно включить dmix. Например так.
То, что на OSS из ядра 2.4 нет микшера в принципе, не опровергнуто. Сейчас попробую гуглить emu10k и Fedora Core 1.
OSS version 3 was the original sound system for Linux, but was superseded by the Advanced Linux Sound Architecture (or ALSA) in 2002 when OSS version 4 became proprietary software. OSSv4 became free software again in 2007 when 4Front Technologies released its source code
То есть 4Front взяла такая и говорит «всё, ребята, кина не будет. Теперь платите за звук». А Линус им такой «мы сделаем свой OSS!» И сделали.
И в таком раскладе я хрюны ловил ТОЛЬКО при пуске прилаги через валгринд. Да и то, у меня там были настройки, можно было забивать буфер быстрее и/или влиять на расчет значения output_latency.
Тут еще могут набежать, мол, а чего ты задержки реализуешь сам? Да, по сути сам, и что? Невесть какая, кода то с гулькин нос.
Используется, чтобы заворачивать ALSA приложения в PulseAudio.
хрюны ловил
Думаю, в твоём варианте проблемы не получится заметить. Я делал через поллинг, там приходило событие, пока несколько мегабайт семплов туда не ухало. Причём, это сначала воспроизводилось у меня, я поправил код, потом стало воспоизводиться у какого-то пользователя, где я отлаживаться уже не мог.
Тут еще могут набежать, мол, а чего ты задержки реализуешь сам? Да, по сути сам, и что? Невесть какая, кода то с гулькин нос.
Когда нужно много звуков сразу воспроизводить, такой подход плохо работает. Придётся кучу нитей заводить, по штуке на поток. Плюс проблемы с синхронизацией ещё.
Но если ты абсолютно точно знаешь, сколько по времени будешь воспроизводить звук, если он только один, то можно и так.