Category: музыка

Category was added automatically. Read all entries about "музыка".

lame

Сейчас lame оправдал своё название.
lame тута --decode -t some.mp3 - | lame тама -q 9 -m s -s 44.1 --bitwidth 16 --unsigned --little-endian --abr 320 - - | mpg123 -
Если тута, и тама пусто, то в колонках слышим аццкий шум, говорящий о том, что раскодировать и закодировать взад mp3 через raw pcm у нас не получится.
Если же либо тута, либо тама добавить опцию "-x", то всё работает отлично.
Интересно, что с помощью опций "--{little,big}-endian", поставленных в различных комбинациях, ничего не получается сделать.
Итого: минус полтора часа времени, плюс один отправленный лиловый луч добра и счастья, плюс один баг-репорт.

Как показал наш спектральный анализ...

Встала задачка определения частоты звука. Точнее, две задачи. На входе — дискретизированный звук a0+∑ansin(nωt+φn) (n ∈ N, n ≥ 1), слегка приправленный белым шумом.

Первая задача: приблизительно определить основную частоту. Про преобразование Фурье знаю, но у меня случай сильно проще, и для него требуется всего лишь вычислять Σ|x[0] - x[0-k]| (с затуханием), основная частота определяется по первому минимуму суммы. (недостаток — необходимость игнорировать первый минимум для малых k, когда сигнал совпадает или почти совпадает сам с собой.) На практике для частоты дискретизации 44100Гц хватает k≤221 для быстрого определения частот от 200Гц и выше.

Для простых случаев это лучше, чем тащить библиотеку, реализующую FFT. Однако, если не будет хватать, то возьму fftw.

Вторая задача: имея приближенную частоту, определить частоту с большей точностью. Тут Фурье неприменим: нужна точность ±0.5Гц, что означает необходимость иметь 2 секунды собранных данных. Частота у меня иногда меняется, а нужно фиксировать частоту максимум через 0.5с после её установления (а лучше — 0.2с) и с хорошей точностью. Так как сигнал имеет гораздо более простой вид, нежели "полный спектр", то и тут должен быть подходящий мне метод.

Создаём 2..6 "сумматоров" вида S(ω) = ∑x[0]·(cos(ωt) + i·sin(ωt)) (тоже с затуханием), равномерно распределенных около приблизительно известной частоты так, чтобы отношение их частот было постоянным. Далее, на каждый цикл (когда ωt переходит границу 2πn) определяем аргумент комплексной суммы S(ω), вычитаем из неё аргумент, определенный на предыдущем переходе, получая d(ω). Если сигнал был чистый и частота недалеко от ω, то сдвиг фазы будет небольшим. В идеальном случае (интегрирование вместо суммирования, отсутствие шума, отсутствие гармоник, отсутствие дискретизации) сдвиг был бы постоянным и был бы связан с реальной частотой сигнала нехитрым выражением (если не ошибаюсь, этим: ωреальная = ω · (1 + d(ω)/π) для сдвига на частоте ω, равного d(ω) радиан на каждый цикл).

Проверял на чистом звуке флейты, с помощью указанной формулы определял частоту. ν≈280Гц, 4 "сумматора", отстоящих друг от друга примерно на 3Гц. Получившиеся частоты лежат очень близко друг к другу, отклонение ±0.05Гц от среднего, и это всего на трёх "переходах" ωt через 2πn, что соответствует 0.01с звучания.

Однако зависимость d(ω) не всегда линейная, поэтому, не сильно теряя в точности, можно спокойно забить на формулу для ωреальная, и с помощью интерполяции многочленом по 3-4 близлежащим точкам решить уравнение d(ω)=0. Благо, d(ω) вполне гладкая и даже d'(ω)≈0.

Осталось только доделать интерполяцию и решение уравнения с её помощью, проверить приемлемость метода для других тембров (на всякий случай, а вдруг), определиться с конечным языком реализации (так и оставлять на окамле или переписать на Ц), и "тюнер" готов к использованию. Из внешних зависимостей будет только sox. Да и то, если научиться брать звук напрямую, то и его не будет.

(no subject)

Хамерман Знищує Віруси пишут:
2007-03-13 14:40, Albert: Свежее, теплое музыкальное мясо

Группе «ХЗВ» в очередной раз стало тесно в рамках сугубо компьютерного музицирования, и она серьезно законнектилась с двумя «живыми» музыкантами. «Живыми» - означает такими, которых можно увидеть, пощупать и от которых гораздо труднее, чем от компьютера, добиться нужного звучания и нужных партий. Но с которыми, с другой стороны, гораздо приятнее общаться, чем с компьютером, и самодеятельность и ошибки которых гораздо более полезны для творческого процесса, чем самодеятельность и ошибки железяки.
[...]
Второй гитарист – киевлянин тоже некиевского происхождения Сергей Трушель, исповедующий зубодробительный «металлический» гитарный саунд, по совместительству – веб-дизайнер «ХЗВ». Сергей также играет на бас-гитаре, и этой его способностью группа тоже собирается воспользоваться.
[...]
"Риспект и уважуха". Не, действительно, творческих успехов и всё такое.
("всё такое" -- это значит "буду ждать нового звука")