Войти
ПрограммированиеФорумЗвук

Stream or Full?

#0
14:01, 24 июня 2008

В общем ща копаюсь в своем звуковом двигле, и начал меня мучать вопрос потоковости. Раньше я имел несклько коротеньких буферов, и кормил их данными по мере их проигрывания. У варанта куча плюсов и один из основных - он мало жрет операционной памяти. Недостаток при этом постоянная нагрузка на проц при декодировании звуков. Ща задумался, нет полностью переписал двиг, убрал потоковость, теперь создаю один огромный буфер, и заполняю его данными при инициализации, все хорошо но в оерационке одна композиция мины на 4-ре занимает 20ть мегобайт, а на диске всего 3-и :(

Вот теперь и мучаюсь что лучше :) В соседнем треде еще появилось сообщение про отмирание DS, похоже пора задумываться о реализации под OpenAL :(


#1
16:06, 24 июня 2008

Я в своём двиге реализовал следующие идеи.

Есть музыка. Это конечно Стрим.
Есть звуковой эффект (щелчёк мыши, например). Это конечно "Full".
Есть музыкальный эффект (фанфары, например). Это Стрим. Хотя по идее надо сделать опционально.

#2
18:25, 24 июня 2008

Duncon Вопрос, что рациональнее. В идеале щас собирают компы так, что у них нет траблов ни с оперативой ни с ЦПУ. Но вот для более слабых компов это трабл...

DevilDevil
Я щас мыслю приблизительно так:
1 Все мелкие звуки нет смысла пускать по потоку.
2 Музыка будет занимать в памяти метров 40-к это скорее всего предел, при проигрывании следующего трека старая музыка будет освобождаться...

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

#3
14:40, 27 июня 2008

Duncon
Ну как сделать потоковый звук я знаю :) просто у меня весма непростой интерфейс для буфера, все хорошо если бы не одна функция:

  class BasicBuffer : public Data::BasicObject
  {
    //Устаноить позицию проигрывания
    virtual bool setPlayPosition( unsigned int Position ) = 0;
  };

Не представляю как такое можно распаралелить один звук на много источников(точнее знаю но...). Ща глянул http://steps3d.narod.ru/tutorials/openal-tutorial.html и понял с то у ОпенAL вообще скакание по буферу отсутствует как таковое...

#4
15:46, 27 июня 2008

Breezy, можешь прислушиваться, можешь нет... но засовывать всё в память мягко говоря не тру.

#5
18:16, 27 июня 2008

Breezy
тоесть ты хочеш чтобы несколько источников играли одновременно музыку да ещё и разные фрагменты? В этом случае - только всё в память. Но я не представляю зачем такое надо... Полюбому это единичный случай и из-за этого полностью вырезать из движка потоковые буфера не стоит. У меня в двиге для множественных источников - статические буфера, для фоновой музыки - потоковые (ну тоесть очереди буферов в OpenAL или один зацикленный перезаписываемый буфер в DSound)...

#6
18:56, 27 июня 2008

FedeX
Я пробовал оба варианта, ща буду подумывать чтобы совместить потокоые, и статические буфера... хотя мне это все ненравиься... получаеться некрасиво :(

#7
9:56, 2 июля 2008

Заканчиваю переписку двигла. Попутно возник вопрос, сужествует ли бесплатная библиотека для конвертации midi в wave? Еще хотелось бы чтобы у неё был минимальный банк инструментов...

#8
14:21, 2 июля 2008

TiMidity:  http://timidity.sourceforge.net/
Не либа, конечно, но в сырки заглянуть можно.

#9
1:22, 4 июля 2008

Фух, закончил мучения. осталась только полировка :)

RPGman
Спасибо, но как ты подметил придеться действительно их глядеть... Похоже по быстрому мидяшки я не прикручу :)

ПрограммированиеФорумЗвук

Тема в архиве.