2009-07-23 3 views
1

Я работаю над приложением, которое будет воспроизводить заметки из 12-тональной диатонической шкалы , которая охватывает несколько октав. Это будет в основном быть временным wavetable синтезатором.Приложение для iPhone для iPhone: игра из кеша заметок

Времена, которые используют количество используемых инструментов.

Примечания хранятся как .wav-файлы и будут кэшироваться в ОЗУ , чтобы предотвратить накладные расходы при извлечении жесткого диска. Однако есть большой коммюник в отношении физической памяти, поскольку файлы .wav могут быть довольно большими.

Есть ли у кого-нибудь идеи, как сделать кеширование этих .wav-файлов более space-efficient? Сжатие - хороший вариант, но слишком много может ухудшить качество. Модуляция или искажение частот на лету определенно будет слишком лагги. Исправьте меня, если я ошибаюсь, но играя 200 BPM с этой реализацией не будет работать.

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

ответ

1

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

На iPhone вы обычно не загружаете весь звук в ОЗУ из-за ограничений по размеру и скорости диска. Используя API AudioQueue, вы записываете функцию обратного вызова, которая заполняет буфер с диска (обычно с использованием методов AudioFile). Вы можете правильно выбрать размеры буфера и количество буферов, чтобы воспроизведение звука вашего приложения выполнялось бесперебойно.

Возможно, вам следует изучить возможности сжатия; что-то вроде AAC без потерь должно купить вам 50% -ное сокращение размера файла без потери качества за счет значительного увеличения издержек на обработку.

Действительно, похоже, что вы пытаетесь оптимизировать слишком рано здесь. Напишите некоторый экспериментальный код, чтобы узнать, можете ли вы получить 200BPM из стандартного стиля загрузки файлов в режиме воспроизведения звука. Может быть, стиль загрузки файлов с использованием WAV на самом деле быстрее, чем сжатие и использование ОЗУ из-за времени декодирования.

1

Вы должны сжать WAV-файлы в файлы caf (Core Audio Format) с сжатием IMA4. IPhone может играть несколько из этих файлов одновременно (MP3/AAC не может, потому что вам нужен аппаратный декодер) ..

Вы можете конвертировать WAV в CAF с помощью следующей команды терминала на Mac OS X:

$ afconvert -f caff -c 1 -d ima4 loop1.wav 

Кроме того, если вы воспроизводите их с помощью AVAudioPlayer (AVFoundation), вам не придется беспокоиться о кешировании, поскольку AVAudioPlayer уже делает это. Для более продвинутого звука вам нужно будет обратиться к Audio Services (Audio Queue), хотя ..

+0

Это сработало очень хорошо! CAF намного быстрее загружаются и играют быстро. – ayman

Смежные вопросы