2016-08-12 4 views
0

Может ли кто-нибудь указать мне на рабочую версию генератора тона Мэтта Галлахера?Генератор тонов iOS от Matt Gallagher

http://www.cocoawithlove.com/assets/objc-era/ToneGenerator.zip

Как говорит Мэтт, он не был обновлен, и, видимо, сломался более новым API. Я обновил то, что мог найти необходимое обновление, и теперь он компилируется и запускается только с предупреждениями об отказе, но все, что он делает, - это щелчок при нажатии кнопок «Воспроизвести» и «Стоп». Я прошел через код и посмотрел документацию в Xcode для API, но это крутая кривая обучения. Мне бы хотелось иметь рабочую версию, чтобы я мог потрудиться, чтобы узнать больше. Кто-нибудь обновил его? Или аналогичный генератор тона?

Я попытался использовать класс ToneOutputUnit из hotpaw2, вызвав его следующим образом.

class ViewController: UIViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 
    let unit = ToneOutputUnit() 
    unit.toneCount = 64000 
    unit.setFrequency(1000.0) 
    unit.setToneVolume(0.5) 
    unit.startToneForDuration(2.0) 
    unit.enableSpeaker() 
    print("ok") 
} 

}

я мог видеть, что код ToneOutputUnit был называться и шагал через различные функции, но ни один звук не был произведен. Я также пробовал называть «enableSpeaker» до «startToneForDuration», но также и звука. Что мне не хватает?

+0

Вот класс генератора тона, который я преобразовал в Swift 2.x, и новый iOS Audio Unit v3 API: https://gist.github.com/hotpaw2/630a466cc830e3d129b9 – hotpaw2

+0

Большое спасибо. Я пробовал называть это из следующего диспетчера представлений, и звук не воспроизводился. Можете ли вы помочь дальше, сказав, как его следует называть? На данный момент мне все равно, какой тон создается. Я просто хочу услышать что-то, что я могу изменить. [Теперь я вижу, что я не могу вставить код в комментарий. Я попытаюсь добавить к оригиналу.] – RobertL

+0

Из раздела [help/on-topic]: вопросы, предлагающие нам рекомендовать или находить книгу, инструмент, библиотеку программного обеспечения, учебник или другой ресурс вне сайта, не относятся к теме для переполнения стека поскольку они склонны привлекать упрямые ответы и спам. –

ответ

0

Конечно, Джин Де Лиза прав. Переменная «unit» должна быть объявлена ​​вне viewDidLoad, поэтому она не сразу освобождается. Кроме того, «unit.enableSpeaker()» должно быть до «unit.startToneForDuration (0.5)». Однако даже с этими 2 изменениями я не получил звука. После большей царапины головы я обнаружил две ошибки масштабирования в файле ToneOutputUnit.swift hotpaw2 (в github).

1) В функции startToneForDuration строка «toneCount = Int32 (round (time/sampleRate)) должна быть« toneCount = Int32 (time * sampleRate) ».

2) И в функции setToneVolume строка «v0 = vol/32768.0» должна быть «v0 = vol * 32768.0».

С этими двумя изменениями он работает и производит тон с объемом и продолжительностью, которые кажутся разумными.

@ Hotpaw2: Надеюсь, вы обновите свою версию в github. Это хорошо написанный класс, который поможет другим.