Звук
GameDev.ru / Звук / Форум / Звуковой движок(вопросы)

Звуковой движок(вопросы)

GladiatorПостоялецwww30 окт. 200721:50#0
Здравствуйте!
Недавно начал изучать DirectSound, для написания небольшого звукового движка, который в последствии можно будет расширить. Есть много мелких вопросов, которые я тут задавать не буду. Думаю практика даст на них ответы, но вот как только начал писать звуковой движок, сразу столкнулся, ну не с проблемой, а скорее со сложностью в архитектуре.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Вопрос №1: Что должен уметь простейший звуковой движок ?
---------------------------------------------------------------
Вопрос №2: Почитал статейки всякие, почитал форумы. Смотрю тут люди реализуют микширование звука как многопоточный вариант или еще чего с помощью многопоточия. Насколько это оправданно? Это ведь лишние сложности ?

По вопросу №1: У меня есть небольшой ответ, я бы хотел попросить чтобы вы его дополнили, а может сказали что-то совершенно новое.

Должен уметь:
1. Проигрывать, останавливать, перематывать звуковые файлы.
2. Пусть поддерживает для начала файлы формата wav.
3. Должен уметь микшировать звуки. (Вот этот пункт конечно вызывает много мелких вопросов)
4. Должен уметь останавливать проигрывание по достижении конца буффера.

Ну вот что у меня получилось.

Да, вспомнил.
Вопрос №3:
Если я захочу проиграть несколько файлов, одновременно, то мне нужно их постоянно держать в памяти ?
Пусть есть у меня cSoundManager, в котором есть map<string, IDirectSound8*> filesLoaded; (Это только пример, не знаю как это будет пока). Тоесть как это обычно делается ? :)

Заранее спасибо. =)

Eugene BeloglazovПостоялецwww30 окт. 200723:15#1
1)
- поддерживать семплы и стримы
- поддерживать lpcm wav и ogg vorbis (vorbisfile)
- давать удобный доступ к управлению позицией, громкостью и т.п.
- уметь как-то воспроизводить всё при ограниченном числе играющих звуков, т.е. приоритеты звуков и проч.
- микширование никому не нужно (из тех, кто ценит своё время)
- ну DMO, EAX и т.п. по вкусу.

2)
- не оправдано
- лучше думать над реализацией системы приоритетов

3)
- если играешь как стримы, то скорее всего да (можно с диска, но лучше ogg прогрузить в память)
- если играешь как семплы, то нужен secondary buffer с lpcm wav содержимым звука

p.s. 10 раз подумай про direct sound в связи с тем, что в висте DS сделан через эмуляцию. В этом плане интересен openal, т.к. более человеческая архитектура и использование аппаратного ускорения на звуковухах от creative. между прочим, EAX в всите доступен исключительно через openal. а вообще вон XACT и XAudio2 грядут, так что лучше про них тоже думай.

FedeXПостоялецwww31 окт. 20070:37#2
>на звуковухах от creative. между прочим
вроде уже и на встроенных звуковухах nForce (хотя я таких не видел)

>- если играешь как семплы, то нужен secondary buffer с lpcm wav содержимым звука
IDirectSound8::DuplicateSoundBuffer - после дублирования буфера его можно паралельно проигрывать с буфером-источником, память при этом ими занимаеться одна и таже вроде бы...

Eugene BeloglazovПостоялецwww31 окт. 20072:12#3
FedeX
> вроде уже и на встроенных звуковухах nForce (хотя я таких не видел)
Это было во времена nForce1

> IDirectSound8::DuplicateSoundBuffer - после дублирования буфера его можно паралельно
> проигрывать с буфером-источником, память при этом ими занимаеться одна и таже вроде бы...
Да. Но:
1) вопрос не о том
2) DuplicateSoundBuffer имеет недостатки. какие? читать "DirectSound tips and traps by Peter Clare" из Sensaura SDK. Кстати очень толковая дока....

Eugene BeloglazovПостоялецwww31 окт. 20072:13#4
p.s. гуглом по названию замечательно ищется.... :-)
GladiatorПостоялецwww31 окт. 20072:13#5
Eugene Beloglazov
> - микширование никому не нужно (из тех, кто ценит своё время)
мне нужно.. допустим играет один звук, к нему добавляется по ходу выполнения программы другой..

> - поддерживать семплы и стримы
я прошу прощения, за может быть дурацкий вопрос ибо изучаю dsound около 3-х дней, и уже много где успел поковыряться(не там где нужно), но: что Вы понимаете под семплами и стримами ?
Как читал я, сэмпл - это единица дискретизации. Тоесть звук в 44100 Hz определяет что в секунде будет 44100 сэмплов. А стрим, это свойство буферов для звука, которые являются циклическими.
Я что-то упустил ? :)


> p.s. 10 раз подумай про direct sound в связи с тем, что в висте DS сделан через эмуляцию. В этом плане интересен openal, т.к. > более человеческая архитектура и использование аппаратного ускорения на звуковухах от creative. между прочим, EAX в всите > доступен исключительно через openal. а вообще вон XACT и XAudio2 грядут, так что лучше про них тоже думай.

Не могу вспомнить источника, но насколько я знаю, openAL под windows, это врапер dsound. Поэтому, dsound определенно быстрее. А про висту не знаю.. Вообще мало у меня знакомых кто ставит висту.  Ну про висту я пока не буду думать..

Да и еще маленькой вопросик:
Вот я тут пытаюсь сделать этот минидвижок чисто с использованием DSound. Есть еще такая вещь как DMusic. Ничего про нее не читал. Но если использовать одно, то можно не использовать другое. Я о чем, о том, что если я пишу на Dsound, можно ли, или нужно ли совмещать часть ф-ций с DMusic ? Или не стоит ?

Спасибо.

Eugene BeloglazovПостоялецwww31 окт. 20072:38#6
Gladiator
> мне нужно.. допустим играет один звук, к нему добавляется по ходу выполнения программы другой..
- не шаришь :-)
микширование делается не ручками а автоматически через secondary buffers
фанаты же пишут о "ручками"

> Я что-то упустил ? :)
я пользуюсь терминологией BASS'а
сэмпл = sample = звук, полностью загруженный в secondary buffer и воспроизводящийся целиком, размер буфера = размеру звука в байтах
стрим - это маленький secondary буфер + механизм его обновления "на лету"

> Не могу вспомнить источника, но насколько я знаю, openAL под windows, это врапер dsound.
На встроенном звуке - враппер.
На Creative - отдельный codepath.

> Поэтому, dsound определенно быстрее.
А openal - удобнее :-)
пока - просто поверь ;-)
и потом "определённо" - это очень относительное понятие ;-)
например я могу сказать, что вот если direct sound закодить так, как пишет MS, то далеко не факт что оно в любом случае будет быстрее ;-)
и стриминг в openal удобнее сделан и разделение на источники/буферы.
dsound - он идеологически более корявый - всё равно тебе придётся писать что-то типа openal.
а openal уже есть и даже под Linux вполне работает :))))

> А про висту не знаю.. Вообще мало у меня знакомых кто ставит висту. Ну про висту я пока не буду думать..
Задумайся о том, что ты будешь получать опыт в ненужной области. Это очень похоже.
DirectSound - технология около2000 года. сейчас 2007. виста уже в ходу.
в августовском dxsdk уже есть предварительная дока xaudio2 - замены dsound'у....

про DMusic забудь. это - для midi.
для игр заюзать можно, но там такого уровня доступа нету, который для игр весьма нужен.
и IMHO API dmusic рассчитано на необычных людей
я его ниасилил...
из DMusic можно взять DMO, но это только название. а сами эффекты - они как бы отношения к DM не имеют по сути.

т.е. альтернативы:
- openal + eax (hw/sw)
- directsound + DMO + eax (только под winxp)

я настоятельно рекомендую openal
как человек, который кодил и на dsound и на openal

GladiatorПостоялецwww31 окт. 20073:10#7
Eugene Beloglazov
Большое спасибо за развернутый ответ!!!
Теперь есть пища для размышлений. Может через пару дней появятся еще вопросы, то я их сюда закину. (А они наверняка появятся)
=)

Удалёнwww31 окт. 20077:21#8
http://zlos.nm.ru/download/ds_for_gd_ru.zip - вот пример примитивного звукодвижка на DS. Надо только пофиксить строчку в инициализации, где waveFormat.wBitsPerSample = nSampleRate; на waveFormat.wBitsPerSample = nBitCount; - самому лень перезаливать.
FedeXПостоялецwww31 окт. 200716:18#9
>DuplicateSoundBuffer имеет недостатки.
знаю
>DirectSound tips and traps by Peter Clare
спасибо!

>а openal уже есть и даже под Linux вполне работает :))))
У меня и у многих корявенько немного работает, скрипит...

>про DMusic забудь. это - для midi.
Неа. Вы просто не разобрались ^_^ DMusic - это по-сути и есть очень простой и удобный враппер над DirectSound. Позволяет делать всё то же, что и DirectSound, но более удобно, плюс легко грузить wav файлы сжатые разными кодеками, воспроизводить midi (помоему единственная "левая" деталь в DMusic-е), проигрывать динамическую музыку(очень важная, но к сожалению сложная вещь). И именно из-за динамической музыки, и множества интерфейсов которые для неё напихали в DirectMusic он всем и кажется таким сложным и нелогичным. Я же как-то кодил на нём и даж  небольшой двиг накодил ;)
Правда говорят, что Microsoft решила на него забить. Не знаю как в Висте, а под ХР в DXSDK 9 он есть и ничего такого там не говорится...

>т.е. альтернативы:
>- openal + eax (hw/sw)
>- directsound + DMO + eax (только под winxp)

а лучше обьединить их вместе и под винХР использовать всё-таки пока directsound, а уж под другие операционки openal... (я так и делаю щас)

Eugene BeloglazovПостоялецwww31 окт. 200719:18#10
FedeX
Wav файлы сжатые кодеками использовать нету смысла. Т.к. из тех, что есть в разных виндах - это adpcm.
но качество резко сливает ogg vorbis. в результате чего все используют либо wav pcm либо ogg.
Я делал через ACM декомпрессию - там тоже ничего сложного нету, правда вызовы ACM API придумали извращенцы (если сравнивать с vorbisfile).

я же говорю, что DirectMusic имеет перегруженный API - там много лишнего. Для игр в нём смысла нету. Только динамическая музыка. Кстати DM использовался в NOLF2 например - весьма приятно было сделано.
Но IMHO кроссфейдинг звуковых дорожек совсем несложно руками причём совершенно разнообразно. Буквально время измеряется десятками минут. Если сравнить это время с временем на вникание в DM API - выбор очевиден ;)

Под XP можно использовать direct sound. Но надо будет думать над созданием нормальной системы управления кучей буферов вместо "человечных" источников и буферов в OpenAL. А ещё стриминг в OpenAL гораздо лучше сделан...

FedeXПостоялецwww31 окт. 200719:48#11
>я же говорю, что DirectMusic имеет перегруженный API - там много лишнего. Для игр в нём смысла нету.
Так лишнее и не надо использовать. А всё, что нужно для ЛЮБОЙ игры там есть...
Ну ладно понятно - против ДиректМюзика чего-то все настроены враждебно)

Gladiator
Кстати, а чем тебе BASS, FMOD не понравились? Очень удобны, кроссплатформенны, дешовые (для фривар проектов вообще бесплатные)...

/ Форум / Звук / Общее

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

2001—2018 © GameDev.ru — Разработка игр