バージョン

menu_open

C# (WampSharp) - WAMP

プロジェクトの初期化

Note.gif

Note: この例では、Visual Studio 2017 にC# サポートとNuGet パッケージマネージャ・エクステンションが必要です。

WampSharp のバージョン1.2.5.36-betaでは、Wwise Authoringアプリケーションと同じコンピュータでサンプルを実行している場合は、 ws://127.0.0.1:8080 を許可元に追加する必要があります。これを行うには、Project > User Preferences... に移動し、 Wwise Authoring APIセクションの Allowed originsテキストボックスにアドレスを追加します。値はコンマで区切られています。

依存関係をインストールするには、Visual Studio 2017でサンプルプロジェクト<Wwise installation path>/SDK/samples/WwiseAuthoringAPI/cs/WaapiCS/WaapiCS.sln を開きます。ソリューションを右クリックし、 Restore NuGet Packagesを選択して、依存関係をインストールします。

スタートアップ オブジェクトを選択するには、ソリューション エクスプローラでWaapiCSプロジェクトを右クリックし、Properties をクリックします。そして、 Application タブを選択し、Startup objectというセクションでWaapiCS.CallWwiseを選択します。

プロジェクトコード

サンプルファイル<Wwise installation path>/SDK/samples/WwiseAuthoringAPI/cs/WaapiCS/CallWwise.csを見つけます。

このファイルには、Wwise Authoring APIに接続できる次のコードが含まれています。

using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using WampSharp.Core.Serialization;
using WampSharp.V2;
using WampSharp.V2.Client;
using WampSharp.V2.Core.Contracts;
using WampSharp.V2.Rpc;

namespace WaapiCS
{
    class CallWwise
    {
        const string serverAddress = "ws://127.0.0.1:8080/waapi";

        public static void Main(string[] args)
        {
            DefaultWampChannelFactory factory = new DefaultWampChannelFactory();
            IWampChannel channel = factory.CreateJsonChannel(serverAddress, "realm1");
            channel.Open().Wait();

            IWampRealmProxy realmProxy = channel.RealmProxy;

            CallGetInfo(realmProxy);
            CallGetSelectedObjects(realmProxy);
            
            Console.ReadLine();
        }

        public static void CallGetInfo(IWampRealmProxy realmProxy)
        {
            Console.WriteLine("Calling 'ak.wwise.core.getInfo'");

            // Arguments are passed using keywordArguments with primitive values which are serialized as Json
            IDictionary<string, object> keywordArguments = new Dictionary<string, object>();

            realmProxy.RpcCatalog.Invoke(
                new AssertCallback(),
                new CallOptions(),
                "ak.wwise.core.getInfo",
                new object[] { }, // Volontarily empty, we use only keywordArguments
                keywordArguments);
        }

        public static void CallGetSelectedObjects(IWampRealmProxy realmProxy)
        {
            Console.WriteLine("Calling 'ak.wwise.ui.getSelectedObjects'");

            // Optional arguments are passed using a subclass of CallOptions providing data members as specified by the Wwise Authoring API
            MyCallOptions options = new MyCallOptions();
            options.@return = new string[] { "id", "name", "parent" };

            realmProxy.RpcCatalog.Invoke(
                new GetSelectedObjectsCallback(),
                options,
                "ak.wwise.ui.getSelectedObjects",
                new object[] { }, // Volontarily empty, we use only keywordArguments
                new Dictionary<string, object>()); // Volontarily empty, no keywordArguments are necessary for this API call
        }
    }

    public class AssertCallback : IWampRawRpcOperationClientCallback
    {
        public void Result<TMessage>(IWampFormatter<TMessage> formatter, ResultDetails details, TMessage[] arguments, IDictionary<string, TMessage> argumentsKeywords)
        {
            string name = argumentsKeywords["displayName"].ToString();
            string copyright = formatter.Deserialize<JToken>(argumentsKeywords["version"])["displayName"].ToString();
            Console.WriteLine("ak.wwise.core.getInfo: Hello {0} {1}", name, copyright);
        }

        // Other method overloads are never used: WAAPI always sends keyword arguments
        public void Error<TMessage>(IWampFormatter<TMessage> formatter, TMessage details, string error, TMessage[] arguments, TMessage argumentsKeywords) {}
        public void Error<TMessage>(IWampFormatter<TMessage> formatter, TMessage details, string error) {}
        public void Error<TMessage>(IWampFormatter<TMessage> formatter, TMessage details, string error, TMessage[] arguments) {}
        public void Result<TMessage>(IWampFormatter<TMessage> formatter, ResultDetails details) {}
        public void Result<TMessage>(IWampFormatter<TMessage> formatter, ResultDetails details, TMessage[] arguments) {}
    }

    public class GetSelectedObjectsCallback : IWampRawRpcOperationClientCallback
    {
        public void Result<TMessage>(IWampFormatter<TMessage> formatter, ResultDetails details, TMessage[] arguments, IDictionary<string, TMessage> argumentsKeywords)
        {
            string prefix = "ak.wwise.ui.getSelectedObjects: ";
            Console.WriteLine(prefix + "Got selected object data!");

            IEnumerable<JToken> objects = formatter.Deserialize<IEnumerable<JToken>>(argumentsKeywords["objects"]);
            int selectedObjectsNum = objects.Count<JToken>();
            Console.WriteLine(prefix + "Got {0} object(s)!", selectedObjectsNum);

            if (selectedObjectsNum >= 1)
            {
                JToken firstObject = objects.First<JToken>();
                
                Console.WriteLine(prefix + "The first selected object is '{0}' ({1})",
                    firstObject["name"].ToString(),
                    firstObject["id"].ToString());

                JToken parent = firstObject["parent"];
                if (parent == null)
                {
                    Console.WriteLine(prefix + "It has no parent.");
                }
                else
                {
                    Console.WriteLine(prefix + "Its parent is '{0}' ({1})",
                        parent["name"].ToString(),
                        parent["id"].ToString());
                }
            }
            else
            {
                Console.WriteLine(prefix + "Select something and try again!");
            }
        }

        // Other method overloads are never used: WAAPI always sends keyword arguments
        public void Error<TMessage>(IWampFormatter<TMessage> formatter, TMessage details, string error, TMessage[] arguments, TMessage argumentsKeywords) { }
        public void Error<TMessage>(IWampFormatter<TMessage> formatter, TMessage details, string error) { }
        public void Error<TMessage>(IWampFormatter<TMessage> formatter, TMessage details, string error, TMessage[] arguments) { }
        public void Result<TMessage>(IWampFormatter<TMessage> formatter, ResultDetails details) { }
        public void Result<TMessage>(IWampFormatter<TMessage> formatter, ResultDetails details, TMessage[] arguments) { }
    }

    public class MyCallOptions : CallOptions
    {
        // Add data members with name corresponding to the option fields (see reference documentation)
        //          vvvvvvvvvvvvvvv
        [DataMember(Name = "return")]
        public IEnumerable<string> @return { get; set; }

        // If a data member is not set, it will not be sent to WAAPI
        [DataMember(Name = "platform")]
        public string platform { get; set; }
    }
}

プロジェクトの実行

ソリューション(Ctrl + B)をビルドし、Visual Studio(F5)を使用してサンプルを実行します。

このサンプルでは、Wwiseオーサリングアプリケーションからの一般情報を取得するメソッドと、アプリケーションで現在選択されているオブジェクトを取得するメソッドの2つのメソッドを呼び出します。

出力コンソールに表示されるメッセージを監視します。次のようなものが表示されます:

Calling 'ak.wwise.core.getInfo'
Calling 'ak.wwise.ui.getSelectedObjects'
ak.wwise.core.getInfo: Hello Wwise v2017.1.1
ak.wwise.ui.getSelectedObjects: Got selected object data!
ak.wwise.ui.getSelectedObjects: Got 1 object(s)!
ak.wwise.ui.getSelectedObjects: The first selected object is 'New Sequence Container' ({03E8DC21-EB2F-4607-BFCC-25BCE69DFB27})
ak.wwise.ui.getSelectedObjects: Its parent is 'ParentA' ({FBB64B3C-711C-46E6-9BBC-B49511F08244})
Note.gif
Note: Wwiseから取得したオブジェクトIDなどの情報は、Wwise Authoringアプリケーションで開いたプロジェクトによって異なります。選択がない場合、次のメッセージが表示されます:ak.wwise.ui.getSelectedObjects: :何かを選択してもう一度やり直してください!

このページはお役に立ちましたか?

サポートは必要ですか?

ご質問や問題、ご不明点はございますか?お気軽にお問い合わせください。

サポートページをご確認ください

あなたのプロジェクトについて教えてください。ご不明な点はありませんか。

プロジェクトを登録していただくことで、ご利用開始のサポートをいたします。

Wwiseからはじめよう