Нетрадиционные способы передачи данных. Передача...
TRANSCRIPT
Кроссплатформенность
Работает без подключения и настройки
Возможна реализация проводной передачи данных
Интересно же!
3
Преимущества
1. Упаковать информацию
2. Сгенерировать звук
3. Получить звук
4. Интерпретировать характеристики сигнала
5. Распаковать информацию
4
Шаги
Меняется только частота
Требует более широкой полосы
Устойчивее к помехам
Больше пропускная способность
7
Частотная модуляция
Цифровая модуляция (манипуляция)
Чаще всего от 2 до 64
Псевдоаналоговая модуляция
Сколько угодно
10
Размер алфавита
Очень простая
Очень отзывчивая
Нет коррекции ошибок
Ограничена пропускная способность
11
Псевдоаналоговая модуляция
Упрощает работу с CoreAudio
Визуализирует данные
https://github.com/syedhali/EZAudio
15
EZAudio
#import <EZAudio/EZAudio.h>
private func setupAudio() { let mic = EZMicrophone(delegate: self) let description = mic.audioStreamBasicDescription() let sampleRate = Float(description.mSampleRate)
self.fft = EZAudioFFTRolling(windowSize: 4096, sampleRate: sampleRate, delegate: self) self.microphone = mic self.microphone.startFetchingAudio() }
17
Код приемника: Настройка
func microphone(…) { fft.computeFFTWithBuffer(buffer[0], withBufferSize: bufferSize) }
18
EZMicrophoneDelegate
func fft(…) { let maxFrequency = fft.maxFrequency;
dispatch_async(dispatch_get_main_queue(), { self.updateColor(maxFrequency) }); }
func updateColor(frequency: Float) { let converter = self.converter let value = converter.valueFromFrequency(frequency) let color = converter.colorFromValue(value) }
19
EZAudioFFTDelegate
let baseFreq: Float = 19000
func valueFromFrequency(frequency: Float) -> Float { let value = (frequency - baseFreq) / 220.0 return value }
func frequencyFromValue(value: Float) -> Float { return baseFreq + 220.0 * value }
21
Конвертирование
Никита Илясов
Старший разработчик
Контакты
+7 (925) 166 50 03