Pull to refresh

Comments 68

С переходом на микрофонное API оправдались ваши опасения насчет того, что Speech Recognition что-то делает со звуком?
С этим API работал другой человек. Я у него обязательно спрошу и напишу ответ.
ну так как, из нормального потока с микрофона основная гармоника ноты получилась существенно большей амплитуды, чем остальные?
Они работают немного по разному. В чем именно разница мы не разбирались, возможно есть какие-то фильтры.
Как вариант, можно было оценить АЧХ Speech Recongnition и производить коррекцию АЧХ сигнала простым делением. Тогда бы задавленные области приподнялись.
Вариант здравый, но я не уверен, что получилось бы. У нас было такое ощущение, что АЧХ там динамическая, в зависимости от окружающих звуков.
Вполне возможно. Надо конечно проводить измерения, чтобы в этом убедиться…
Вообще еще из курса цифровой обработки сигналов, перед БПФ к полученному сигналу советуют применять оконные функции. В частности наилучший эффект в вашей задаче даст окно Хемминга. Интересно было бы взглянуть на БПФ реализованное на С.
Полностью согласен.
Так же улучшить результаты можно накапливая данные и убирая гармоники которые постоянно изменяются.
Так же не забываем про различные АЧХ различных микрофонов, различную частоту дискритизации на различных девайсах.
Разные варианты настройки, значит, вы не поддерживаете?
В данный момент не поддерживаем, есть только ряд предзабитых пресетов. В планах был редактор пресетов, но опять же, сейчас не хватает ресурсов на реализацию.
а как Вы узнали, что «активных» пользователей более 50000?
я мог бы подумать, что столько было скачиваний, но как узнать пользуются ли программой или нет? если человек играет на досуге скажем на гитаре, то ну наверное раз в неделю настраивает ее, вряд ли чаще, правда? назвать это активным использованием я бы не стал… или я чего не понимаю?
В маркете есть такой параметр, это пользователи которые установили и не удалили.
Выглядит так:

Скачано:
1924 total
1370 active installs (71%)

Парвильнее сказать не активных пользователей, а активных инсталяций.
От гитары зависит, я свою подстраиваю каждый раз практически, колки плохие
А я играю каждый день, подстраиваю раз в недели две-три. С тюнером вообще где-то раз в три месяца, когда струны меняю.
Так что раз в неделю — это активное использование )
У всех разные уши. Мне тоже лень иногда доставать тюнер, тем более мне только четыре струны настраивать. )
Раз в неделю можно настраивать не самые дешевые электрогитары, у которых струны у основания грифа пережимаются специальными тисочками, после настройки.
>>струны у основания грифа пережимаются специальными тисочками, после настройки
независимо от ценовой категории, такая система применяется для «плавющих» тремоло вроде Floyd Rose или Ibanez Edge.

хорошая гитара с хорошими колками и фикс-бриджем или классическим тремоло типа страт держит строй и без «тисочков»
С тисочками, без тисочков.
Если механика некачественная (я бы сказал дешевая) — результат один, строй держать будет плохо.
А прежде чем начать, вы смотрели аналоги? Вообще существуют какие-нибудь тюнеры на Android? Или на Iphone?

Вообще, идея клевая конечно. Всегда мечтал под рукой иметь тюнер чтобы по-быстрому настроить гитару.
ну камертон да, но это отдельное устройство, а тут можно поставить на телефон и не париться. дома я например тоже не пользуюсь камертоном — на компьютере тюнер есть.
ну гитару же вы в чехле носите, в чем проблема кинуть в карман чехла?
… в котором скорее всего уже валяется пара шнуров, примочка, переходники и т.п
Пользуюсь gStrings. Даже платную купил gStrings+ так как уж очень удобна и, главное, отлично справляется с работой. Правда, потом разочаровался во всёх android-поделках, после того, как попробовал на iPhone PolyTune (от создателей одноименной педали) — тут и чувствительность на высоте(возможно микрофон iPhone'a хорошо себя проявил), и качественная и красивая реализация!
UFO just landed and posted this here
К «сожалению» мое сердце покарил Android. iPhone бы позаимствован у жены ;) В любом случае спасибо за совет.
Хм, интересно чем неугодил этот комментарий?
Вы тоже в свою очередь посмотрите на PolyTune ;)
UFO just landed and posted this here
UFO just landed and posted this here
В то время на iPhone было несколько тюнеров. Мы их даже посмотрели и взяли что-то оттуда.

Под Андроид тогда небыло тюнеров, во всяком случае мы не нашли. Сейчас, конечно, появились.
Есть, и море. Сам я, например, пользуюсь Gibson Learn от LLS. (iphone)
Но он есть и для зеленого робота
Очень удобный и хороший тюнер, особенно когда где нибудь просят поиграть, а инструмент расстроен, а ты немного пьян уже.
Сам я на андроиде его не юзал, но на афоне работает замечательно (обработкой звука в афоне чип от TI ведает, поэтому доверяю), ни разу еще не подвел.

  • Бесплатный
  • Имеет несколько вариантомв настройки ( Drop D. Open E ит.д.)
  • Возможность отстойки «на слух» по эталонному звуку, либо путем анализа с микрофона.
Ну и еще несколько вкусностей (типа соответствия нот/апликатур/аккордов)
UFO just landed and posted this here
И на Андроид и на АйФон тюнеров больше чем надо.
Приложений может и много, но удобных и качественных мало!
Блин, не на тот ответил.
Автору за статью спасибо, хоть и не пользуюсь тюнером на телефоне, но было интересно почитать о подводных камнях. Может ещё расскажете о той самой native части?)
Во-первых, в те давние времена первой версии Android OS, не существовало открытого Java API для работы со звуковым потоком с микрофона. Был API для воспроизведения звука, но не для считывания потока с микрофона.

Вы чего-то не то пишете. Какая первая версия Андроид? Начиная с 1.5 мы уже писали вовсю SIP телефоны на яве и Native C и там захватывался поток с микрофона. Откуда сложности со SpeechAPI?
1.5 — это не первая, был ещё как минимум Android 1.1.
Я не помню точно, какой SDK мы тогда юзали, но велика вероятность, что именно 1.1.
Ого, реально старое приложение. А в следующих версиях с нормальным звуковым АПИ проблема «вычленения» главной частоты исчезла?
Сейчас никто тюнером не занимается из-за нехватки ресурсов разработчиков. Версия с другим звуковым API до сих по не вышла в релиз и застряла посреди перехода на новый API.
Мы начинали на Android 1.0, первые публичные версии было 0.x, но мы с ними не работали. Между выходом 1.0 и 1.5 прошло много времени — и мы провели его полезно и весело :)
В PhonTuner, для WM есть удобная штука, которая показывает насколько инструмент «шумит» обертонами. А в вашей програме это можно увидеть?
Нет, но идея хорошая.
Отличная статья, хорошо сделано. По теме я бы предположил использовать косинусное преобразование, т.к. оно может быть выполнено в вещественных числах, и все вычисления можно свести к числам с фиксированной точкой, т.е. по сути – целочисленным вычислениям.
Я реализовывал аппаратный тюнер (причем на 8-битном АВР, без фурье).
Советую сигнал пропускать через какую-нибудь нелинейность, например, возводить в квадрат. Это сильно выделит первую гармонику.

А универсальный тюнер отлично реализуется не через фурье а через АКФ, правда, аппаратные средства коммуникатора, наверное, не позволят организовать захват звука с необходимой для этого ЧД.
Интересная мысль про АКФ. Частоты, мне кажется, должно хватить — у большинства инструментов не такой уж большой диапазон.
Дело не только в диапазоне частот инструмента, но и в том, с какой точностью вы хотите определить отклонение. Вы же для построения АКФ дискретно сдвигаете отсчеты. Я, помнится, ставил задачу определять до десятых долей интервала между нотами, это меньше герца в худшем случае (для басов) — там приходилось брать отсчеты с огромной ЧД.

Но. Вместо того чтобы брать их с АЦП достаточно оказалось брать их напрямую с пина микроконтроллера — ну грубо говоря, 1бит АЦП. Если мне не изменяет память, в схеме стоял триггер шмидта, чтобы избежать постоянных осцилляций, и дальше сигнал заводился на цифровой вход.
Возможно, я чего-то не понял… Зачем было делать пресеты для ограниченного набора инструментов? Разве не проще попросить пользователя ввести искомую ноту (чью частоту мы знаем заранее) и настраивать уже на неё?
А изначальная идея определять звучащую ноту и её же потом настраивать выглядит вообще странно. Если бы это было реализовано, то программка позволяла бы настраивать струны, расстроенные не более чем на полтона. А в реальности инструмент может быть сколь угодно сильно расстроенным. У меня на скрипке, если её потрясти где-нибудь в транспорте, струна могла уйти на 2-3 тона.
По поводу первого вопроса: мы решили, что это плохая идея с точки зрения юзабилити, слишком сложно. По поводу второго — видимо не очень понятно написано: предполагается, что пользователь знает, какая нота должна играть. Тюнер лишь показывает, какая звучит в данный момент (и на сколько относительных долей отклонение от неё). Пользователь смотрит, что нота не та (хоть на полтона, хоть на октаву), и крутит колок в нужную сторону.
Я правильно понимаю, что «плохая идея с точки зрения юзабилити» — это ввод пользователем ноты для последующей настройки на неё? Если так, то может быть, стоило всё-таки это оставить как дополнение — получился бы универсальный настройщик?
Это сделано не было, так что «оставить» — не наш случай :) На будущее планировалось сделать настройку любых наборов струн, но ещё раз повторяю, сейчас ресурсов разработчиков нет.
UFO just landed and posted this here
Добавили в баг треккер, спасибо.
То есть с вашим тюнером я в dropped-B не настрою по открытым струнам? )
не совсем, просто интересно, предзабитый инструмент означает, что для него только один набор струн (EBGDAE) или он задаёт расстояние в полутонах между струнами для инструмента (у баса все в квинту, у обычной гитары 3 струна на полтона меньше)? Со вторым вариантом я смогу гитару настроить если не в dropped, то хотя бы в tune, отличный от E.
Не сможете. Только предзабитый набор.
Причём набор маленький, только стандартный строй.
Странно, в топике про мобильный гитарный тюнер никто ничего не сказал про тюнер от TC Electronic PolyTune Я пробовал версию в педальном виде, так и в айфоне. Несомненный плюс, что можно сыграть аккорд и сразу подтянуть все струны, т.е. ключевое слово poly.
А не пробовали сохранять звук, полученный с помощью этого Speech Recognition, чтобы примерно посмотреть, какого рода преобразования выполнялись? На CodeProject была вполне красивая и рабочая реализация на C#, там как раз можно посмотреть дополнительный анализ спектра при поиске фундаментальной частоты.
Пробовали, естесственно, как иначе мы бы знали, что там вообще что-то не то?
Красивых и рабочих открытых реализаций множество, но они все работают так, как должно быть в теории, а у нас на практике это всё оказалось не применимо.
Ничем, gStrings хорош.
Спасибо за приложение без рекламы! :)
Sign up to leave a comment.