Author Topic: OpenAL - звуковая библиотека для WS3D  (Read 233 times)

0 Members and 1 Guest are viewing this topic.

Offline Alec - WS3D Developer

  • Producer
  • Administrator
  • Marquess
  • *
  • Posts: 840
  • Reputation 32
  • Game making is my hobby for life!
OpenAL - звуковая библиотека для WS3D
« on: June 10, 2017, 07:53:10 PM »
Привет, всем!

Эта тема для вопросов и ответов по звуковой библиотеке, встроенной в WorldSim3D.

Чтобы пользователям ваших проектов не нужно было инсталлировать OpenAL в систему, достаточно, чтобы в корневой папке вашего проекта (там где запускаемый файл) находились 2 файла: OpenAL32.dll и wrap_oal.dll

Где их взять. Можно установить OpenAL (она входит в дистрибутив движка: .../WS3D_Win32_1.02_ru/Libs/OpenAL-Install.exe) в систему, скопировать файл wrap_oal.dll из C:\Windows\SysWOW64 для 64-разр. систем и в C:\Windows\System32 для 32-разр. систем. Затем можно деинсталлировать OpenAL. И всё. Всё будет работать. Это решение для WS3D 1.02. В следующих версиях мы просто включим обе либы в дистрибутив и добавим это в Мастер.

В эту теме можно обсуждать любые вопросы об этой библиотеке.
WorldSim3D = 3D + FreeBasic. Программируй в удовольствие, а не "в тягость"! Make your project with pleasure, not with strain!

Offline Marsha

  • Friends
  • Knight
  • *
  • Posts: 119
  • Reputation 10
Re: OpenAL - звуковая библиотека для WS3D
« Reply #1 on: November 23, 2017, 09:20:41 PM »
Привет!
Посмотрела пример WS3D с трёхмерным звуком и задумалась, что движок отлично подойдёт для звуковых игр. Если в курсе, люди без зрения играют на слух - есть звуковые платформеры, файтинги, стратегии, РПГ и многопользовательские онлайн-игры. В последнее время на сайте blind.games, где часто бываю, идут дискуссии, на каком движке незрячим делать игры, разбираются и движки на BASIC: blitz 3D и blitz dart. В этой связи думаю, стоит ли им рекомендовать WorldSim3D. Пока до движка, который очень бы порадовал незрячих, нам не хватает только поддерки скринридеров (NVDA, например. Для него есть dll от движка BGT, который специально создан для звуковых игр).
В плане создания сетевых игр пока глухо, да? Пока в сообществе на BGT пишут сетевые игры, но движок уже пару лет как не поддерживается разработчиком.
« Last Edit: November 23, 2017, 09:25:11 PM by Marsha »

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Viscount
  • *
  • Posts: 719
  • Reputation 49
Re: OpenAL - звуковая библиотека для WS3D
« Reply #2 on: November 23, 2017, 10:08:35 PM »
Привет, Marsha.
Quote
В плане создания сетевых игр пока глухо, да?
Нет, у нас уже есть сеть. Прикручена библиотека kNet.
Ее еще нет в релизной версии. Слабо тестирована, но пример есть. Протоколы UDP и TCP/IP, клиент/сервер, пересылка пакетов с возможностью отправки и приема string, float, int и комбинаций из этого набора. В домашней LAN-сети работает. Поддерживает только явные IP-адреса, т.е. без прокси, шлюзов и прочего.

С Blitz3D знаком, подумываю даже сделать враппер для него, про  blitz dart впервые слышу.
Со скринридерами тоже не сталкивался, но если у этой технологии есть внятный С/С++ интерфейс и если есть потребность в этом- можно рассмотреть.

На данный мы момент внедряем поддержку джойстиков.
« Last Edit: November 23, 2017, 10:12:08 PM by Nikolas - WS3D Developer »
Под лежачий камень мы всегда успеем...

Offline Marsha

  • Friends
  • Knight
  • *
  • Posts: 119
  • Reputation 10
Re: OpenAL - звуковая библиотека для WS3D
« Reply #3 on: November 24, 2017, 03:23:50 PM »
Nikolas,
вот API-клиент NVDA и подробности. Да, есть примеры для C/C++.
Как вариант, если будут сложности, может, попробовать SAPI (Microsoft Speech API)? Тогда и без ридера любой сможет слушать текст.
Экранный диктор не только для доступности пригодился бы, но и для тех, кто хочет говорящих персонажей или роботизированный голос компьютера, но не хочет записывать диалоги :) Я могу тестировать, т.к. давно пользуюсь скринридером для чтения книжек и сайтов, когда нужно глазам дать отдохнуть.

Поддержка джойстиков - это очень здорово и востребовано, в т.ч. среди незрячих.

Про Blitz Dart тоже впервые услышала на blind.games, сама не сталкивалась и гугл не прояснил.

С Blitz3D знаком, подумываю даже сделать враппер для него
А в чём там было бы принципиальное отличие от WS3D?
« Last Edit: November 24, 2017, 03:54:28 PM by Marsha »

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Viscount
  • *
  • Posts: 719
  • Reputation 49
Re: OpenAL - звуковая библиотека для WS3D
« Reply #4 on: November 24, 2017, 06:41:08 PM »
Привет, Marsha!
Если я правильно понял про скринридеры, то вот тестовый пример. Набросал тут по-быстрому. Проверить, сама понимаешь, нет возможности.
Quote
Как вариант, если будут сложности, может, попробовать SAPI
Ну если только как вариант, не забывай- у нас кроссплатформенный движок, для линукса есть что-то похожее?
NVDA, как я понял, тоже чисто виндовая штучка.

Quote
А в чём там было бы принципиальное отличие от WS3D?
Ни в чем. Просто еще один бейсикоподобный диалект в нашу копилку.  Всего-то нужно написать правильный decls-файл и bb-заголовок. Работа несложная, но трудоемкая, учитывая размеры наших заголовков.  Любителей Blitz3D уже меньше, чем лет эдак 10 назад, но на форуме булки активность есть.
Те, кто активно пользуют Blitz3D, возможно, не хотят переходит на "чистый" бейсик.

Согласись, хоть записи ниже идентичны по сути, но отличаются синтаксически:
Code: [Select]
Dim shared as Single Var=10.0f VS
Code: [Select]
Global Var#=10
Под лежачий камень мы всегда успеем...

Offline Marsha

  • Friends
  • Knight
  • *
  • Posts: 119
  • Reputation 10
Re: OpenAL - звуковая библиотека для WS3D
« Reply #5 on: November 24, 2017, 07:47:59 PM »
Nikolas, работает! А это значит, что можно создавать игры, доступные всем, как Terraformers. Человек со скринридером будет слышать, куда он кликает в меню, дополнительные комментарии и так далее. Голос читает, а брайль смогу проверить, когда поймаю кого-нибудь с брайлевским дисплеем онлайн.
А как это выглядит в WS3D коде?  :)


Для Linux есть экранный диктор Orca, который работает через AT-SPI (Assistive Technology Service Provider Interface) и создаёт какой-то  ATK-мост, по которому приложения отдают данные на чтение. Если говорить о незрячих, русскоговорящие чаще используют Win, и важно, что хотя бы здесь это поддерживается.
« Last Edit: November 24, 2017, 08:22:18 PM by Marsha »

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Viscount
  • *
  • Posts: 719
  • Reputation 49
Re: OpenAL - звуковая библиотека для WS3D
« Reply #6 on: November 24, 2017, 08:23:28 PM »
В коде это выглядит не привычно.
Потому как:
1) Мы сейчас проводим глобальный рефакторинг, т.е. ВСЕ команды расортированы по разделам и переименованы.
2) У нас теперь есть 3 ЯП, даже 4: С, С++, FreeBasic и FreePascal. За последний язык у нас отвечает Vuvk, он сейчас пока не у дел.

Я в данный момент переписываю все примеры на плюсах, потом на бейсик. Данный пример существует пока только в С++ варианте.

Ничего сложного нет:

Quote
#include <WorldSim3D.h>
#include <SampleFunctions.h>
#include<nvdaController.h>

///Variables
wFont* MyFont=0;
wGuiEvent* guiEvent=0;

const wchar_t* wndCaption = L"Example : NVDA";
wchar_t strBuffer[256] = {0};
Int32 prevFPS = 0;

#define BUTTON_SPEAK 101
#define BUTTON_BRAILLE 102

int main(int argc, char** args)
{
    Int64 res=nvdaController_testIfRunning();
    if(res!=0)
    {
          PrintWithColor("Error communicating with NVDA...",wCFC_RED,true);
          //wInputWaitKey();
          //return -1;
    }
    else
        PrintWithColor("NVDA controller OK!",wCFC_GREEN);

    ///Start engine
    bool init=wEngineStart(wDRT_OPENGL,{800,600},32,false,true,true,false);
    if (!init)
    {
        printf("wEngineStart() failed!\n");
        return -1;
    }

    char* fontPath="../../Assets/Fonts/Cyr.xml";

    ///Check resources
    if(!CheckFilePath(fontPath))
       return -1;

    ///Show logo WS3D
    wEngineShowLogo(true);

    ///Load resources
    MyFont=wFontLoad(fontPath);

    wGuiObject* skin=wGuiGetSkin();
    wGuiSkinSetFont(skin,MyFont,wGDF_DEFAULT);

    wGuiObject* edit=wGuiEditBoxCreate(L"Hello, World!\nПривет мир!\nТестируем взаимодействие WorldSim3D с контроллером NVDA",{20,100},{780,500});
    wGuiEditBoxSetMultiLine(edit,true);
    wGuiEditBoxSetAutoScrolling(edit,true);

    wGuiObject* butSpeak=wGuiButtonCreate({20,530},{380,560},L"SPEAK TEXT",L"Speak text from EditBox");
    wGuiObjectSetId(butSpeak,BUTTON_SPEAK);

    wGuiObject* butBraille=wGuiButtonCreate({400,530},{780,560},L"BRAILLE MESSAGE",L"Braille message from EditBox");
    wGuiObjectSetId(butBraille,BUTTON_BRAILLE);

    while(wEngineRunning())
    {
        wSceneBegin({255,0,25,0});

        while(wGuiIsEventAvailable())
        {
            guiEvent=wGuiReadEvent();
            if(guiEvent->event==wGCT_BUTTON_CLICKED)
            {
                if(guiEvent->id==BUTTON_SPEAK)
                {
                    nvdaController_speakText(wGuiObjectGetText(edit));
                };
                if(guiEvent->id==BUTTON_BRAILLE)
                {
                    nvdaController_brailleMessage(wGuiObjectGetText(edit));
                }
            }
        }

        ///Draw text info
        wFontDraw(MyFont,L"Press ESC to exit...",{10,10},{250,40});
        wGuiDrawAll();
        wSceneEnd();

        ///Close by ESC
        wEngineCloseByEsc();

        /// update FPS
        if (prevFPS != wEngineGetFPS())
        {
            prevFPS = wEngineGetFPS();
            swprintf(strBuffer, L"%s  FPS : %d", wndCaption, prevFPS);
            wWindowSetCaption(strBuffer);
        }
    };

    ///Stop engine
    wEngineStop();

    return 0;
}
Под лежачий камень мы всегда успеем...

Offline Marsha

  • Friends
  • Knight
  • *
  • Posts: 119
  • Reputation 10
Re: OpenAL - звуковая библиотека для WS3D
« Reply #7 on: November 24, 2017, 08:43:21 PM »
У нас теперь есть 3 ЯП, даже 4
О! Вот это да. Я понемногу изучаю Java и есть минимальные знания C++, поэтому очень интересно. FreeBasic - он меня немного смущает избыточностью: ты выше как раз привёл такой пример с global var.

Спасибо огромное.
Мы сейчас проводим глобальный рефакторинг, т.е. ВСЕ команды расортированы по разделам и переименованы.
Я за вами не поспеваю :) пытаюсь складывать всё, что знаю по WS3D, в единую картину, а не складывается, т.к. что-то потеряло актуальность, многое добавилось. Сейчас начинаю ещё раз с начала.

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Viscount
  • *
  • Posts: 719
  • Reputation 49
Re: OpenAL - звуковая библиотека для WS3D
« Reply #8 on: November 24, 2017, 09:21:36 PM »
По требованию могу сделать мини-заголовок и пример для контроллера для текущей версии WS3D на фрибейсике.
Хотя мини-заголовок для 4-5 функций- это крутовато... ;D

Под лежачий камень мы всегда успеем...

Offline Marsha

  • Friends
  • Knight
  • *
  • Posts: 119
  • Reputation 10
Re: OpenAL - звуковая библиотека для WS3D
« Reply #9 on: November 24, 2017, 10:01:45 PM »
пример для контроллера для текущей версии WS3D на фрибейсике.
Было бы очень здорово. А там точно 4-5 функций? Ну да... это же у SAPI надо голосом, громкостью и высотой тона управлять, а в NVDA-то достаточно связаться с программой, а в ней уже можно выставить любые настройки по вкусу.

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Viscount
  • *
  • Posts: 719
  • Reputation 49
Re: OpenAL - звуковая библиотека для WS3D
« Reply #10 on: November 24, 2017, 10:37:23 PM »
Я написал маленький пример просто для фрибейсика, в нем же и заголовочные функции. Смысл простой, пример считаю достаточным.

Quote
#Inclib "nvdaControllerClient32"

Extern "c"
   Declare Function nvdaController_testIfRunning() As Long
   Declare Sub  nvdaController_speakText(ByVal text As Const WString ptr)
   Declare Sub  nvdaController_cancelSpeech()
   Declare sub nvdaController_brailleMessage(ByVal message As const WString Ptr)
End Extern


If nvdaController_testIfRunning()<>0 Then
   Print "NVDA controller not found. Exiting..."
   Sleep(2000)
   End
EndIf

Dim As String myText="HelloWorld"

Print "Test speak: "
nvdaController_speakText(myText)

Sleep(1000)

Print "Test Brail message:"

nvdaController_brailleMessage(myText)

Print "End test"
Sleep(1000)

end

Внимание! Перед тестированием в папке должна лежать только одна длл-ка nvdaControllerClient32.dll

Если компилировать в 64-битном бейсике, соответственно nvdaControllerClient64.dll и в начале исправить на #Inclib "nvdaControllerClient64"
Под лежачий камень мы всегда успеем...

Offline Marsha

  • Friends
  • Knight
  • *
  • Posts: 119
  • Reputation 10
Re: OpenAL - звуковая библиотека для WS3D
« Reply #11 on: November 25, 2017, 12:27:12 AM »
Ура! Спасибо. Вот это, конечно, проще и понятнее  :-\
Только там еще важно отлавливать состояние - прочтен текст до конца или нет. Чтобы не прикидывать вручную продолжительность каждой фразы.
« Last Edit: November 25, 2017, 12:46:06 AM by Marsha »

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Viscount
  • *
  • Posts: 719
  • Reputation 49
Re: OpenAL - звуковая библиотека для WS3D
« Reply #12 on: November 25, 2017, 10:14:51 AM »
Quote
Только там еще важно отлавливать состояние - прочтен текст до конца или нет.
Хм... Разработчики для клиента такую функцию не предусмотрели. Скачал исходники, там сплошной питон. На питоне там можно делать любые настройки, даже плагины свои написать. Вообще же задумано так, что пользователь будет все настраивать через ГУИ.
Под лежачий камень мы всегда успеем...

Offline Marsha

  • Friends
  • Knight
  • *
  • Posts: 119
  • Reputation 10
Re: OpenAL - звуковая библиотека для WS3D
« Reply #13 on: November 25, 2017, 03:37:49 PM »
Да, пользователь будет настраивать у себя в клиенте, но игре нужно как-то проверять, идёт ещё речь или уже всё. В движке BGT это реализовано, но, увы, там закрытый код. Чисто теоретически с чем можно увязать говорение? За какой сигнал от программы можно зацепиться... У меня, конечно, не велики шансы разобраться в исходниках, но тоже попробую посмотреть.

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Viscount
  • *
  • Posts: 719
  • Reputation 49
Re: OpenAL - звуковая библиотека для WS3D
« Reply #14 on: November 25, 2017, 05:21:05 PM »
Quote
Чисто теоретически с чем можно увязать говорение? За какой сигнал от программы можно зацепиться...
Думаю, ответ нужно искать в синтезаторе речи (eSpeak, кажется?) В нем должны быть функции, определяющие время "проигрывания" текста данного объема при данной скорости (предположу, что скорость воспроизведения регулируется). 
« Last Edit: November 25, 2017, 05:27:09 PM by Nikolas - WS3D Developer »
Под лежачий камень мы всегда успеем...