Программно 'слушая' звук (обработка сигналов?)

Это хорошие вопросы и его великое, чтобы видеть, что Вы проводите это исследование и кажетесь соответствующими с изучением, как "сделать его правильно" вместо того, чтобы просто взломать его вместе.

Первый , я соглашаюсь с предыдущими ответами, которые фокусируются на важности помещения данных в объектах модели когда соответствующий (на шаблон разработки MVC). Обычно Вы не хотите помещать информацию состояния в контроллере, если это не строго данные "презентации".

117-секундный , посмотрите страницу 10 Стэнфордской презентации для примера того, как программно продвинуть контроллер на контроллер навигации. Для примера того, как сделать этого "визуально" использующего Интерфейсного Разработчика, смотрите на эта учебная .

Треть , и возможно самое главное, обратите внимание, что "лучшие практики", упомянутые в Стэнфордской презентации, намного легче понять, думаете ли Вы о них в контексте шаблона разработки "внедрения зависимости". Короче говоря это означает, что Ваш контроллер не должен "искать" объекты, он должен сделать свое задание (например, сослаться на глобальную переменную). Вместо этого необходимо всегда "вводить" те зависимости в контроллер (т.е. передача в объектах, в которых это нуждается с помощью методов).

, Если Вы следуете за шаблоном внедрения зависимости, Ваш контроллер будет модульным и допускающим повторное использование. И если Вы думаете о том, куда Стэнфордские предъявители происходят из (т.е. как сотрудники Apple, их задание состоит в том, чтобы создать классы, которые могут легко быть снова использованы), возможность многократного использования и модульный принцип являются высокими приоритетами. Все лучшие практики, которые они упоминают для обмена данными, являются частью внедрения зависимости.

Это - суть моего ответа. Я буду включать пример использования шаблона внедрения зависимости с контроллером ниже в случае, если это полезно.

Пример Использования Внедрения зависимости с целью Контроллер

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

Для создания этого Вы могли бы создать класс BookPickerViewController, который управляет и отображает объекты GUI/представления. Где это получит все книжные данные? Скажем, это зависит от объекта BookWarehouse для этого. Таким образом, теперь Ваш контроллер в основном посредничает в данных между объектом модели (BookWarehouse) и объектами GUI/представления. Другими словами, BookPickerViewController ЗАВИСИТ от объекта BookWarehouse.

не делают этого:

@implementation BookPickerViewController

-(void) doSomething {
   // I need to do something with the BookWarehouse so I'm going to look it up
   // using the BookWarehouse class method (comparable to a global variable)
   BookWarehouse *warehouse = [BookWarehouse getSingleton];
   ...
}

Вместо этого зависимости должны быть введены как это:

@implementation BookPickerViewController

-(void) initWithWarehouse: (BookWarehouse*)warehouse {
   // myBookWarehouse is an instance variable
   myBookWarehouse = warehouse;
   [myBookWarehouse retain];
}

-(void) doSomething {
   // I need to do something with the BookWarehouse object which was 
   // injected for me
   [myBookWarehouse listBooks];
   ...
}

, Когда парни Apple говорят об использовании шаблона делегации для "передачи, создают резервную копию иерархии", все еще говорят они о внедрении зависимости. В этом примере, что должен сделать BookPickerViewController, после того как пользователь выбрал его книги и готов проверить? Ну, это не действительно его задание. Это должно ДЕЛЕГИРОВАТЬ ту работу к некоторому другому объекту, что означает, что это ЗАВИСИТ от другого объекта. Таким образом, мы могли бы изменить наш метод BookPickerViewController init следующим образом:

@implementation BookPickerViewController

-(void) initWithWarehouse:    (BookWarehouse*)warehouse 
        andCheckoutController:(CheckoutController*)checkoutController 
{
   myBookWarehouse = warehouse;
   myCheckoutController = checkoutController;
}

-(void) handleCheckout {
   // We've collected the user's book picks in a "bookPicks" variable
   [myCheckoutController handleCheckout: bookPicks];
   ...
}

конечный результат всего этого состоит в том, что можно дать мне класс BookPickerViewController (и связал объекты GUI/представления), и я могу легко использовать его в своем собственном приложении, принимая BookWarehouse, и CheckoutController являются универсальными интерфейсами (т.е. протоколы), что я могу реализовать:

@interface MyBookWarehouse : NSObject  { ... } @end
@implementation MyBookWarehouse { ... } @end

@interface MyCheckoutController : NSObject  { ... } @end
@implementation MyCheckoutController { ... } @end

...

-(void) applicationDidFinishLoading {
   MyBookWarehouse *myWarehouse = [[MyBookWarehouse alloc]init];
   MyCheckoutController *myCheckout = [[MyCheckoutController alloc]init];

   BookPickerViewController *bookPicker = [[BookPickerViewController alloc] 
                                         initWithWarehouse:myWarehouse 
                                         andCheckoutController:myCheckout];
   ...
   [window addSubview:[bookPicker view]];
   [window makeKeyAndVisible];
}

Наконец, мало того, что Ваш BookPickerController является допускающим повторное использование, но также и легче протестировать.

-(void) testBookPickerController {
   MockBookWarehouse *myWarehouse = [[MockBookWarehouse alloc]init];
   MockCheckoutController *myCheckout = [[MockCheckoutController alloc]init];

   BookPickerViewController *bookPicker = [[BookPickerViewController alloc] initWithWarehouse:myWarehouse andCheckoutController:myCheckout];
   ...
   [bookPicker handleCheckout];

   // Do stuff to verify that BookPickerViewController correctly called
   // MockCheckoutController's handleCheckout: method and passed it a valid
   // list of books
   ...
}

11
задан Community 23 May 2017 в 12:25
поделиться

3 ответа

The thing that interests me the most об обработке сигналов потенциальное применение в музыке. я помню, недавно я видел превью приложения (извините, забыл имя)

Может быть cubase ?

который мог бы прослушать запись кто-то играет на гитаре, и автоматически изобразить его на шкала времени с фактическими нотами / аккордами которые были сыграны

Глубоко упрощено, когда вы играете ноту, вы создаете периодическую волну с заданной частотой. Существует математический трюк (ДПФ с преобразованием Фурье), который преобразует волну в спектр, который вместо того, чтобы представлять интенсивность во времени, показывает ее в зависимости от частоты волны. Например, идеальная нота А из камертона создаст колебательную волну с частотой 440 Гц. Во временной области это будет выглядеть как синусоидальная волна. В частотной области он будет выглядеть как одиночный узкий пик с центром на частоте 440 Гц.

Теперь, когда вы играете на гитаре, вы не создаете идеальных синусоидальных волн. Нажатие на A приведет к основной частоте, 440 Гц, но также и к множеству дополнительных частот (например, 880 на октаву выше, но также и к множеству других более высоких и низких частот) из-за физики вибрирующей струны, материал и форма гитары и т. д. Эти дополнительные частоты называются гармониками, и они смешиваются с основными, чтобы произвести «звук гитары» (то, что на музыкальном жаргоне называется тембром ). Другой инструмент (например, фортепиано) будет смешивать гармоники с основной гармоникой, создавая другой тембр.

Программы DSP выполняют ДПФ для входящего сигнала. С помощью дополнительных приемов они находят основную гармонику и гармоники и в зависимости от того, что они находят, делают вывод о сыгранной вами ноте. Это должно происходить быстро, потому что вы можете найти ноту, играя вживую и используя специальные трюки. Например, вы можете нажать ноту A на гитаре, DSP распознает, что это A, и заменит ее на A фортепьяно, поэтому из динамиков вы получите звук фортепьяно. перемещать их и даже редактировать их. Теперь очевидно, что это много более сложный, но включает ли это тоже самое? Обработка сигнала? я я также интересуюсь возможным приложения в музыкальных визуализаторах и интеллектуальные системы освещения.

Да. Когда вы попадаете в частотную область, все становится очень просто. Например, вы можете зажечь определенный свет в соответствии с голосовыми частотами, а другой свет - с помощью большого барабана.

Насколько я понимаю, это делается обработка сжатого аудио формат, такой как MP3, не даст того же результаты как MIDI, который содержит отдельные треки (Может, я неправильно понял).

Это две разные вещи. MP3 - это сжатый формат звуковой волны. В основном он берет то, что управляет динамиками, и сжимает это. Идея та же: DFT, затем удаление материала, который вряд ли будет слышен (например, высокий тон, который появляется сразу после звука высокой интенсивности, с меньшей вероятностью будет слышен, поэтому он удаляется).

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

Для перехода от MIDI к MP3 вы просто играете через MIDI-плеер. Сделать наоборот - это совсем другая история и гораздо более сложная, и здесь, как вы сказали, в игру вступает DSP.

Это похоже на кипячение фиска. Получается рыбный суп. Но попасть из рыбного супа обратно в аквариум намного сложнее.

формат, такой как PCM, лучше, чем MP3?

PCM - это метод преобразования аналогового сигнала в цифровой. Итак, в вашем вопросе есть фундаментальное недоразумение, заключающееся в том, что формата PCM не существует (формат RAW - это близкий вызов, не содержащий в основном ничего, кроме грубых данных). Если вы спросите, лучше ли несжатый WAV (который содержит данные PCM), чем MP3, тогда да, но иногда возникает вопрос, насколько это лучше действительно имеет значение для человеческого уха и сколько постобработки вы должны выполнить с этими данными.

знать, есть ли существующие библиотеки, которые могут облегчить это, или статьи по этой теме что ориентировано на компьютер Наука / Программирование, возможно, пример кода. Даже с открытым исходным кодом звуковые / музыкальные визуализаторы или любые другие код обработки звука с открытым исходным кодом would be great.

If you like python, take a look at this page

Sorry if I didn't make any sense. Like I said, I don't know what I'm talking about.

Neither do I, but I toyed a bit with it.

14
ответ дан 3 December 2019 в 05:34
поделиться

My understanding is that doing this processing on a compressed audio format such as MP3 wont yield the same results as MIDI which contains separate tracks (Maybe I misunderstood).

MIDI essentially stores instrument information and musical notes. Also other effects (volume, pitch bend, vibrato, attack rate, etc.)

Not really digital signal processing.

Would an uncompressed format such as PCM do better than MP3?

Maybe somewhat; it depends on the application. MP3 reduces the precision of frequencies that humans are not sensitive to. If you want to do visualisations then MP3 is probably fine.

But if you want to, say, determine what sort of instrument is playing in a recording, then there could be useful information hidden in the frequencies that humans are not sensitive to.

I think The Scientist and Engineer's Guide to Digital Signal Processing is a great reference for programmers. Chapter 8 explains the discrete Fourier transform (used in MP3 processing and a lot of other places to separate out the component frequencies of a wave).

I used it to help make a graphical program that let you draw a wave with the mouse, then applied the DFT, and let you select how many frequencies to include. It was a great exercise.

6
ответ дан 3 December 2019 в 05:34
поделиться

Я думаю, вам нужно точно определить, что вы ищете и что пытаетесь сделать.

Если вы хотите узнать о DSP , MIDI или PCM , то есть много информации в Википедии и справочных материалах.

Существует множество доступных приложений для обработки звука. В своем вопросе вы описали то, что происходит в каждой цифровой студии звукозаписи (которая в наши дни составляет почти все студии) каждый божий день.

Если вы намереваетесь выполнить какой-то DSP, скажем, против звука гитары тогда в идеале у вас будет запись самой гитары (а не микшированный трек, содержащий ударные или вокал). Совершенно очевидно, что вы получите лучшие результаты, анализируя дискретный сигнал без дополнительного шума, чем анализируя сигнал, содержащий значительные уровни «шума». Так что да, многодорожечная запись будет предпочтительнее MP3.

Типичный MP3 содержит левый и правый каналы (дорожки), поэтому технически он является многодорожечным. Когда музыка записывается (по крайней мере, профессионально), разные сигналы записываются на разные дорожки именно для того, чтобы их можно было редактировать и обрабатывать дискретно в более позднее время.

Что же тогда вы хотите делать со звуками?

Как указывали другие ответы, это вообще не относится к MIDI.

Типичный MP3 содержит левый и правый каналы (дорожки), поэтому технически он является многодорожечным. Когда музыка записывается (по крайней мере, профессионально), разные сигналы записываются на разные дорожки именно для того, чтобы их можно было редактировать и обрабатывать дискретно в более позднее время.

Что же тогда вы хотите сделать со звуками?

Как указывали другие ответы, это вообще не относится к MIDI.

Типичный MP3 содержит левый и правый каналы (дорожки), поэтому технически он является многодорожечным. Когда музыка записывается (по крайней мере, профессионально), разные сигналы записываются на разные дорожки именно для того, чтобы их можно было редактировать и обрабатывать дискретно в более позднее время.

Что же тогда вы хотите делать со звуками?

Как указывали другие ответы, это вообще не относится к MIDI.

0
ответ дан 3 December 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: