Автопроизводители подделывают звуки двигателя. Ios звук двигателя


Как добавить звук двигателя к электромобилю при помощи iPhone или Android

16 Февраль, 2016

Купили себе электромобиль Tesla или хотя бы Nissan Leaf, но не нравится ездить в тишине? Решение есть!

Кроме скоростных характеристик, солидные автомобили с мощными двигателями способны порадовать своих владельцев соответствующим звуковым оформлением – например, басистым ревом или визгом пробуксовывающей на старте резины.

Конечно, не все желающие способны приобрести спорткар своей мечты, а удаление глушителя для достижения впечатляющего звукового эффекта – способ все-таки слишком грубый. Взамен пользователи смартфонов iPhone и телефонов на Android могут воспользоваться новым мобильным приложением XLR8, позволяющим на произвольно взятом автомобиле достаточно искусно имитировать звук работы целого ряда «горячих железных коней» на выбор.

Необычное ПО запускает звуковые эффекты отнюдь не «от фонаря», а аккуратно отслеживая нажатия на педаль газа. При установке в XLR8 загружен «сэмпл» великолепного звука мотора Chevrolet Caprice Classic V8, дополнительные разновидности доступны для закачки из приложения. Чтобы иметь возможность наслаждаться звучанием, звук предлагается выводить через штатную акустическую систему.

Имитировать урчание мощного 12-цилиндрового двигателя внутреннего сгорания можно, соединив мобильное устройство с автомагнитолой посредством беспроводного интерфейса Bluetooth или прямого подключения через стандартный аудиоджек. Приложение использует данные, взятые с акселерометра iPhone или Android-смартфона, для достоверной имитации набора скорости, торможения и резких виражей на дороге.

Приложение XLR8 доступно в интернет-магазинах приложений App Store и Google Play. Автомобиль и магнитола в комплект не входят.

Скачать XLR8 для iPhone, iPod touch и iPad [iTunes]Скачать XLR8 для Android [Google Play]

Источник: macdigger.ru

Поделиться ссылкой:

Похожее

Пожалуйста, оцените материал

Евгений Как добавить звук двигателя к электромобилю при помощи iPhone или Android 16.02.2016

Рейтинг пользователя: 5 (1 Голосования)

autogeek.com.ua

Знакомство с движком AVAudioEngine для работы со звуком на iOS / Блог компании Everyday Tools / Хабрахабр

Просматривая рунет в поисках статей на эту тему, удивляешься их отсутствию. Возможно, людям хватает описания в хэдере класса, а может, все просто предпочитают изучать его опытным путём. Так или иначе, для тех, кто первый раз сталкивается с этим классом или чувствует потребность в наглядных примерах, мы предлагаем это несложное практическое руководство от наших партнеров, Music Topia.

В плане работы со звуком Apple находится впереди своих конкурентов, и это неспроста. Компания предлагает хороший инструментарий для проигрывания, записи и обработки треков. Благодаря этому на AppStore можно увидеть огромное количество приложений, которые так или иначе работают с аудиоконтентом. В их число входят проигрыватели с хорошим звуком (Vox), аудиоредакторы с инструментами для редактирования и наложения эффектов (Sound Editor), приложения, изменяющие голос (Voicy Helium), различные симуляторы музыкальных инструментов, которые дают довольно точную имитацию соответствующего звучания (Virtuoso Piano), и даже симуляторы DJ-установок (X Djing).

Для работы с аудио Apple предоставляет фреймворк AVFoundation, который объединяет в себе несколько инструментов. Например, AVAudioPlayer используется для проигрывания одиночного трека, а AVAudioRecorder — для записи звука с микрофона. И если вам нужны только функции, предоставляемые этими классами, то просто используйте их. Если же вам необходимо наложить какой-либо эффект, проигрывать несколько дорожек одновременно, микшировать их, заняться обработкой или редактированием аудио или записать звук с выхода определенного аудиоузла, то с этим вам поможет AVAudioEngine. Больше всего данный класс привлекает возможностью наложения эффектов на трек. Как раз на основе этих эффектов построена уйма приложений с эквалайзерами и возможностью изменить голос. Кроме того, Apple позволяет разработчикам создавать свои эффекты, генераторы звука и инструменты.

Основные элементы и их взаимосвязь
Начнём, пожалуй, с основного движка AVAudioEngine. Этот движок представляет собой группу соединений аудиоузлов, которые генерируют и обрабатывают аудиосигналы и представляют аудиовходы и выходы. Его также можно описать как схему аудиоузлов, которые расположены определенным образом для достижения необходимого результата. То есть можно сказать, что AVAudioEngine — это материнская плата, на которой расставлены микросхемы (в нашем случае аудиоузлы).

По умолчанию движок соединён с аудиоустройством и автоматически рендерит в режиме реального времени. Он также может быть настроен на работу в ручном режиме, то есть без подключения к устройству, чтобы выполнять рендеринг в ответ на запрос от клиента, как правило, в режиме реального времени или даже быстрее.

Работая с этим классом, необходимо в определенном порядке выполнять инициализации и методы, чтобы все операции осуществлялись корректно. Приведём последовательность действий по пунктам:

  1. Для начала выставляем аудиосессию AVAudioSession.
  2. Создаем движок.
  3. Создаем по отдельности узлы AVAudioNode.
  4. Прикрепляем узлы к движку (attach).
  5. Соединяем узлы между собой (connect).
  6. Запускаем движок.
1. Настройка аудиосессии

Без настройки аудиосессии приложение может работать некорректно или же звука совсем не будет. Конкретный перечень действий по настройке зависит от того, какие функции выполняет движок в приложении: запись, проигрывание или и то, и другое. Следующий пример настроит аудиосессию только на проигрывание:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; [[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil]; [[AVAudioSession sharedInstance] setActive:YES error:nil]; Чтобы настроить на запись, необходимо выставить категорию AVAudioSessionCategoryRecord. Со всеми категориями можно ознакомиться здесь.

2. Создание движка

Для работы этого движка нужно импортировать фреймворк AVFoundation и инициализировать класс.

#import <AVFoundation/AVFoundation.h> Инициализация происходит так:AVAudioEngine *engine = [[AVAudioEngine alloc] init];3. Создание узлов

AVAudioEngine работает с различными дочерними классами класса AVAudioNode, которые к нему прикреплены. У узлов имеются шины входа и выхода, которые можно рассматривать как точки соединений. Например, у эффектов обычно по одной шине входа и одной шине выхода. У шин есть форматы, представленные в виде AudioStreamBasicDescription, в составе которых представлены такие параметры, как частота дискретизации, количество каналов и прочие. Когда создаются соединения между узлами, в большинстве случаев эти форматы должны подходить друг другу, но есть и исключения.

Рассмотрим каждый вид аудиоузлов по отдельности.

Самым распространенным типом аудиоузлов является AVAudioPlayerNode. Эта разновидность, как понятно из названия, используется для воспроизведения аудио. Узел проигрывает звук либо из заданного буфера представления AVAudioBuffer, либо из сегментов аудиофайла, открытого посредством AVAudioFile. Буферы и сегменты могут быть запланированы для воспроизведения в определенный момент или же проигрываться сразу после предшествующего сегмента.

Пример инициализации и проигрывания:

AVAudioPlayerNode *playerNode = [[AVAudioPlayerNode alloc] init]; … NSURL *url = [[NSBundle mainBundle] URLForResource:@"sample" withExtension:@"wav"]; AVAudioFile *audioFile = [[AVAudioFile alloc] initForReading:url error:nil]; [playerNode scheduleFile:audioFile atTime:0 completionHandler:nil]; [playerNode play]; Далее рассмотрим класс AVAudioUnit, который также является дочерним классом AVAudioNode. AVAudioUnitEffect (дочерний класс AVAudioUnit) выступает в качестве родительного класса для классов эффектов. Наиболее часто используются следующие эффекты: AVAudioUnitEQ (эквалайзер), AVAudioUnitDelay (задержка), AVAudioUnitReverb (эффект эхо) и AVAudioUnitTimePitch (эффект ускорения или замедления, высота тона). Каждый из них имеет свой набор настроек для изменения и обработки звука.

Инициализация и настройка эффекта на примере эффекта задержки:

AVAudioUnitDelay *delay = [[AVAudioUnitDelay alloc] init]; delay.delayTime = 1.0f;//Время затрачиваемое входным сигналом для достижения выхода, от 0 до 2 секунд Следующий нод, AVAudioMixerNode, используется для микширования. В отличие от остальных узлов, у которых строго по одному входному узлу, микшер может иметь несколько. Здесь вы можете объединить узлы-проигрыватели с узлами эффектов и эквалайзером, после чего выход узла подключается уже к AVAudioOutputNode для вывода итогового звука.

Пример инициализации узлов микшера и вывода:

AVAudioMixerNode *mixerNode = [[AVAudioMixerNode alloc] init]; AVAudioOutputNode *outputNode = engine.outputNode;4. Прикрепление узлов к движку

Однако одного лишь объявления узла недостаточно, чтобы он заработал. Его нужно прикрепить к движку и соединить с другими узлами посредством шин ввода и вывода. Движок поддерживает динамические подключение, отключение и удаление узлов во время запуска с небольшими ограничениями:

  • все динамические переподключения должны происходить перед узлом микшера;
  • в то время как удаление эффектов обычно приводит к автоматическому соединению соседних узлов, удаление узла с разным количеством входных и выходных каналов или микшером, вероятно, приведет к повреждению графа.
Для прикрепления узлов к движку используется метод «attachNode:», а для открепления от движка — «detachNode:».[engine attachNode:playerNode]; [engine detachNode:delay];5. Соединение узлов между собой

Все прикрепленные узлы необходимо соединить в общую схему для вывода звука. Соединения зависят от того, что вы хотите выводить. Нужны эффекты — подключайте узлы эффектов к узлу проигрывателя, нужно объединить два трека — присоединяйте два узла-проигрывателя к микшеру. Или, может быть, вам нужно два отдельных трека: один с чистым звуком, а второй с обработанным — это тоже можно реализовать. Порядок соединения не так важен, однако последовательность соединений в итоге должна быть подключена к основному микшеру, который, в свою очередь, подключается к узлу вывода звука. Исключением являются разве что входные узлы, которые обычно используются для записи с микрофона.

Приведу примеры на схемах и в виде кода:

1) Проигрыватель с эффектами

[engine connect:playerNode to:delay format:nil]; [engine connect:delay to:reverb format:nil]; [engine connect:reverb to:engine.mainMixerNode format:nil]; [engine connect:engine.mainMixerNode to:outputNode format:nil]; [engine prepare];2) Два проигрывателя, после одного из которых осуществляется обработка звука[engine connect:player1 to:eq format:nil]; [engine connect:eq to:pitch format:nil]; [engine connect:pitch to:mixerNode fromBus:0 toBus:0 format:nil]; [engine connect:player2 to:mixerNode fromBus:0 toBus:1 format:nil]; [engine connect:mixerNode to:outputNode format:nil]; [engine prepare];3) Четыре проигрывателя, два из которых обрабатываются эквалайзером[engine connect:player1 to:mixer1 fromBus:0 toBus:0 format:nil]; [engine connect:player2 to:mixer1 fromBus:0 toBus:1 format:nil]; [engine connect:mixer1 to:eq format:nil]; [engine connect:eq to:engine.mainMixerNode fromBus:0 toBus:0 format:nil]; [engine connect:player3 to: engine.mainMixerNode fromBus:0 toBus:1 format:nil]; [engine connect:player4 to: engine.mainMixerNode fromBus:0 toBus:2 format:nil]; [engine connect:engine.mainMixerNode to:engine.outputNode format:nil]; [engine prepare]; Теперь, когда мы рассмотрели все необходимые шаги для работы с движком, напишем небольшой пример, чтобы увидеть все эти действия вместе и лучше представить порядок, в котором их надо выполнять. Вот пример создания проигрывателя с эквалайзером с регулировкой нижней, средней и высокой частот на движке AVAudioEngine:- (instancetype)init { self = [super init]; if (self) { [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; [[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil]; [[AVAudioSession sharedInstance] setActive:YES error:nil]; engine = [[AVAudioEngine alloc] init]; playerNode = [[AVAudioPlayerNode alloc] init]; AVAudioMixerNode *mixerNode = engine.mainMixerNode; AVAudioOutputNode *outputNode = engine.outputNode; AVAudioUnitEQ *eq = [[AVAudioUnitEQ alloc] initWithNumberOfBands:3]; eq.bands[0].filterType = AVAudioUnitEQFilterTypeParametric; eq.bands[0].frequency = 100.f; eq.bands[1].filterType = AVAudioUnitEQFilterTypeParametric; eq.bands[1].frequency = 1000.f; eq.bands[2].filterType = AVAudioUnitEQFilterTypeParametric; eq.bands[2].frequency = 10000.f; [engine attachNode:playerNode]; [engine attachNode:eq]; [engine connect:playerNode to:eq format:nil]; [engine connect:eq to:engine.mainMixerNode format:nil]; [engine connect:engine.mainMixerNode to:engine.outputNode format:nil]; [engine prepare]; if (!engine.isRunning) { [engine startAndReturnError:nil]; } } return self; } Ну и пример метода проигрывания:-(void)playFromURL:(NSURL *)url { AVAudioFile *audioFile = [[AVAudioFile alloc] initForReading:url error:nil]; [playerNode scheduleFile:audioFile atTime:0 completionHandler:nil]; [playerNode play]; }
Возможные проблемы
При разработке с AVAudioEngine не стоит забывать о некоторых вещах, без которых приложение будет работает некорректно или крашиться.

1. Аудиосессия и проверка на запуск перед проигрыванием

Перед проигрыванием всегда стоит выставлять аудиосессию: по тем или иным причинам она может сброситься или изменить категорию в процессе использования приложения. Также перед проигрыванием следует проверять, запущен ли движок, так как он может оказаться остановленным (например, в результате переключения на другое приложение с тем же движком). Иначе есть риск, что приложение вылетит.

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; [[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil]; [[AVAudioSession sharedInstance] setActive:YES error:nil]; if (!engine.isRunning) { [engine startAndReturnError:nil]; }2. Переключение гарнитуры

Ещё один важный момент — это подключение/отключение наушников или bluetooth-гарнитуры. При этом движок тоже останавливается, и зачастую проигрываемый трек перестает играть. Поэтому стоит этот момент отлавливать, добавив наблюдателя на получение уведомления «AVAudioSessionRouteChangeNotification». В селекторе нужно будет выставить аудиосессию и перезапустить движок.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(audioRouteChangeListenerCallback:) name:AVAudioSessionRouteChangeNotification object:nil];
Заключение
В данной статье мы ознакомились с AVAudioEngine, по пунктам рассмотрели, как с ним работать, и привели несколько простых примеров. Это хороший инструмент в арсенале Apple, с которым вы можете сделать много интересных приложений разной степени сложности, в той или иной мере работающих со звуком.

habr.com

Автопроизводители подделывают звуки двигателя / Хабрахабр

В течение многих лет автопроизводители добивались как можно более тихой работы двигателя. Сейчас приходится решать противоположную задачу. Для электромобилей генерируют фальшивые звуки через скрытые динамики. Производители машин на бензине придают солидности двигателю внутреннего сгорания, который тоже стал слишком тихим, не внушающим никакого уважения.

Проблема возникла более пяти лет назад с появлением первых электромобилей. Слишком тихая их работа вызвала беспокойство у экспертов по безопасности дорожного движения. В США решили на законодательном уровне обязать производителей ставить динамики, чтобы машины при движении на низкой скорости издавали звук мотора (на большой скорости в этом смысла мало, потому что нет разницы, будет перед смертью пешеход повёрнут лицом к машине или нет).

Разработчики сразу проявили фантазию. Например, создатели гибридного автомобиля Fisker Karma (2011-2012) снабдили машину футуристическим звуком, чем-то средним между звуком космического корабля и болида «Формулы-1». Компания Nissan вообще пригласила специалистов из Голливуда, чтобы оснастить гибрид Leaf звуком машины из культового фильма «Бегущий по лезвию бритвы». Остальные производители последовали примеру электрокаров, пишет The Washington Post. Оказывается, почти на всех популярных седанах и пикапах звук двигателя тщательно тюнингуется с использованием специальных трубок или цифровым способом, и это приводит автолюбителей в бешенство.

Фальшивый звук двигателя стал одним из грязных маленьких секретов автоиндустрии. Производители боятся, что если дать людям услышать хлюпенькое шуршание реального двигателя, то многие откажутся от покупки автомобиля в пользу более «серьёзной» модели, которая рычит уверенным басом.

Опросы покупателей явно показали, что люди хотят двух несовместимых вещей: 1) эффективного экономичного двигателя; 2) классического звучания мотора. Поэтому приходится искать компромиссы.

Например, тихая модель 2015 Mustang EcoBoost оснащена системой Active Noise Control, которая усиливает звук мотора через колонки в салоне автомобиля. В то же время «Форд» посоветовался на форумах автолюбителей, какая конкретно «звуковая концепция» выглядит для них более привлекательно.

Volkswagen для усиления звука мотора использует специальную колонку под названием Soundaktor. Компания Lexus наняла звукоинженеров Yamaha, чтобы скорректировать конструкцию салона и усилить звучание мотора на водительском месте. Porsche использует звукопроводящие трубки для передачи звука мотора в кабину. BMW играет сэмплы через динамики в салоне, изменяя их в зависимости от актуальных оборотов двигателя.

В рекламе 2015 Mustang EcoBoost сказано, что звук винтажного двигателя V-8 «давно считался призывным вызовом «Мустанга», готового к спариванию» (mating call of Mustang), но новая система обработки и усиления звука «спортивна и энергична», обеспечивает «более изящное рычание» и «низкочастотное ощущение всемогущества».

Судя по маркетинговым приёмам компаний, создаётся впечатление, что для многих людей автомобиль — это нечто большее, чем просто транспортное средство.

habr.com