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