Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.

Messages - MsK`

Pages: [1] 2 3 ... 14
1
Zik / Re : Nos VSTs
« le: 02 Août 2016 à 23:47:18  »
Salut MsK. Morusque m'en avait parlé à la main#5. Et bien j'ai commencé à faire une zik. Ce sera pendant ces vacances, c'est quasimment sûr. C'est minimal comme GUI, j'adore. Mais il bug pas un peu le soft ? Par exemple, j'ai créé un instrument dans le "1 Pulse", je sauve le .xrns (je suis sur Renoise) ... je sorts de Renoise. Quand je reprends la zik, les instruments sont bien là, comme je les ai créés, mais dans le GUI les knobs sont à leur niveau d'origine.

Voilà :).
Ah merde, je viens de voir ton message avec presque 6 ans de retard xD
Bah, faudrait que j'y jette un oeil un jour ^^'

2
Zik / Re : Nos VSTs
« le: 02 Août 2016 à 23:46:13  »
Le lien vers nitrosynth est mort mais j'ai tout mis sur github : https://github.com/msklywenn/NitroSynth

3
Productions / Re : Succulent (pas de groupe)
« le: 04 Juillet 2016 à 14:25:53  »
Excellent !

4
Code / Re : Code source, Ctrl-Alt-Test
« le: 12 Avril 2015 à 23:27:48  »
Sympa. Quel intérêt les #pragma code_seg partout dans D ?

5
Tiens je connaissais pas ces Fablab. C'est plutôt cool comme concept ! Je vois que y'en a déjà un à bordeaux et bientôt un deuxième pas loin de chez moi. Si je ressors mon projet de super cartouche gameboy ce sera surement l'endroit pour la faire :)

6
Code / Re : C# et marshalling
« le: 17 Décembre 2014 à 10:48:00  »
Pffffffff. Et comme d'hab, dès que je pose la question, je trouve mon problème et tout marche. Enfin, en ce qui concerne le morceau simplifié. Donc la mon problème venait pas du code mais probablement du fait que j'avais pas mis la build de test.dll en dépendance de l'appli c# et donc test.dll était pas recompilé depuis hier. Boulet.

Bon, bah je retourne à la partie WWise. Si quelqu'un y trouve une couille, je suis preneur la par contre :)

7
Code / C# et marshalling
« le: 17 Décembre 2014 à 10:39:15  »
Hey, ça faisait longtemps que je passais plus par ici ! Surtout de façon active !
Mais sans plus tarder, les doigts dans le merdier !

J'essaye de créer les bindings c# manquants du plugin WWise de Unity. En l'occurence, l'API audio input dont j'ai besoin pour faire du text to speech.


// Implements Audio Input API missing from the official C# bindings of AudioKinetic's WWise

using System.Runtime.InteropServices;

public enum AkResult
{
    AK_NotImplemented               = 0,
    AK_Success                      = 1,
    AK_Fail                         = 2,
    AK_PartialSuccess               = 3,
    AK_NotCompatible                = 4,
    AK_AlreadyConnected             = 5,
    AK_NameNotSet                   = 6,
    AK_InvalidFile                  = 7,
    AK_AudioFileHeaderTooLarge      = 8,
    AK_MaxReached                   = 9,
    AK_InputsInUsed                 = 10,
    AK_OutputsInUsed                = 11,
    AK_InvalidName                  = 12,
    AK_NameAlreadyInUse             = 13,
    AK_InvalidID                    = 14,
    AK_IDNotFound                   = 15,
    AK_InvalidInstanceID            = 16,
    AK_NoMoreData                   = 17,
    AK_NoSourceAvailable            = 18,
    AK_StateGroupAlreadyExists      = 19,
    AK_InvalidStateGroup            = 20,
    AK_ChildAlreadyHasAParent       = 21,
    AK_InvalidLanguage              = 22,
    AK_CannotAddItseflAsAChild      = 23,
    AK_TransitionNotFound           = 24,
    AK_TransitionNotStartable       = 25,
    AK_TransitionNotRemovable       = 26,
    AK_UsersListFull                = 27,
    AK_UserAlreadyInList            = 28,
    AK_UserNotInList                = 29,
    AK_NoTransitionPoint            = 30,
    AK_InvalidParameter             = 31,
    AK_ParameterAdjusted            = 32,
    AK_IsA3DSound                   = 33,
    AK_NotA3DSound                  = 34,
    AK_ElementAlreadyInList         = 35,
    AK_PathNotFound                 = 36,
    AK_PathNoVertices               = 37,
    AK_PathNotRunning               = 38,
    AK_PathNotPaused                = 39,
    AK_PathNodeAlreadyInList        = 40,
    AK_PathNodeNotInList            = 41,
    AK_VoiceNotFound                = 42,
    AK_DataNeeded                   = 43,
    AK_NoDataNeeded                 = 44,
    AK_DataReady                    = 45,
    AK_NoDataReady                  = 46,
    AK_NoMoreSlotAvailable          = 47,
    AK_SlotNotFound                 = 48,
    AK_ProcessingOnly               = 49,
    AK_MemoryLeak                   = 50,
    AK_CorruptedBlockList           = 51,
    AK_InsufficientMemory           = 52,
    AK_Cancelled                    = 53,
    AK_UnknownBankID                = 54,
    AK_IsProcessing                 = 55,
    AK_BankReadError                = 56,
    AK_InvalidSwitchType            = 57,
    AK_VoiceDone                    = 58,
    AK_UnknownEnvironment           = 59,
    AK_EnvironmentInUse             = 60,
    AK_UnknownObject                = 61,
    AK_NoConversionNeeded           = 62,
    AK_FormatNotReady               = 63,
    AK_WrongBankVersion             = 64,
    AK_DataReadyNoProcess           = 65,
    AK_FileNotFound                 = 66,
    AK_DeviceNotReady               = 67,
    AK_CouldNotCreateSecBuffer      = 68,
    AK_BankAlreadyLoaded            = 69,
    AK_RenderedFX                   = 71,
    AK_ProcessNeeded                = 72,
    AK_ProcessDone                  = 73,
    AK_MemManagerNotInitialized     = 74,
    AK_StreamMgrNotInitialized      = 75,
    AK_SSEInstructionsNotSupported  = 76,
    AK_Busy                         = 77,
    AK_UnsupportedChannelConfig     = 78,
    AK_PluginMediaNotAvailable      = 79,
    AK_MustBeVirtualized            = 80,
    AK_CommandTooLarge              = 81
};

public enum AkSpeakerConfiguration
{
    FrontLeft = 0x1,
    FrontRight = 0x2,
    FrontCenter = 0x4,
    LowFrequency = 0x8,
    BackLeft = 0x10,
    BackRight = 0x20,
    BackCenter = 0x100,
    SideLeft = 0x200,
    SideRight = 0x400,

    SetupMono = FrontCenter,
    Setup0_1 = LowFrequency,
    Setup1_1 = FrontCenter | LowFrequency,
    SetupStereo = FrontLeft | FrontRight,
    Setup2_1 = SetupStereo | LowFrequency,
    Setup3Stereo = SetupStereo | FrontCenter,
    Setup3_1 = Setup3Stereo | LowFrequency,
    Setup4 = SetupStereo | BackLeft | BackRight,
    Setup4_1 = Setup4 | LowFrequency,
    Setup5 = Setup4 | FrontCenter,
    Setup5_1 = Setup5 | LowFrequency,
    Setup6 = Setup4 | SideLeft | SideRight,
    Setup6_1 = Setup6 | LowFrequency,
    Setup7 = Setup6 | FrontCenter,
    Setup7_1 = Setup7 | LowFrequency,
    SetupSurround = SetupStereo | BackCenter,

    SetupDPL2 = Setup4,

    // And there's even more in AkSpeakerConfig.h...
}

// class AkAudioBuffer
// {
// ...00453 protected:
// #if defined (AK_WII_FAMILY_HW) || defined(AK_3DS)
//     void *          arData[AK_VOICE_MAX_NUM_CHANNELS]; 
// #else
//     void *          pData;             
// #endif
//     AkChannelMask   uChannelMask;       
// public:
//     AKRESULT        eState;             
// protected: 
//     AkUInt16        uMaxFrames;         
//
// public:
//     AkForceInline AkUInt16 MaxFrames() { return uMaxFrames; }
//     
//     AkUInt16        uValidFrames;
// };
[StructLayout(LayoutKind.Sequential)]
public class AkAudioBuffer
{
    public System.IntPtr pData; // data can be interleaved or separated per channel
    protected System.UInt32 ChannelMask;
    public AkResult State;
    protected System.UInt16 _MaxFrames;
    public System.UInt16 ValidFrames;

    public uint MaxFrames { get { return _MaxFrames; } }
}

// struct AkAudioFormat
// {
//     AkUInt32    uSampleRate;       
//
//     AkUInt32    uChannelMask    :18;
//     AkUInt32    uBitsPerSample  :6;
//     AkUInt32    uBlockAlign     :5;
//     AkUInt32    uTypeID         :2;
//     AkUInt32    uInterleaveID   :1;
// ...
// };
[StructLayout(LayoutKind.Sequential)]
public class AkAudioFormat
{
    public System.UInt32 SampleRate;
    private System.UInt32 bitfield;

    private const int ChannelMaskBits = 18;
    private const uint ChannelMaskMask = ((1 << ChannelMaskBits) - 1);
    public AkSpeakerConfiguration ChannelMask
    {
        get { return (AkSpeakerConfiguration)(bitfield & ChannelMaskMask); }
        set { bitfield = (bitfield & ~ChannelMaskMask) | ((uint)value & ChannelMaskMask); }
    }

    private const int BitsPerSampleBits = 6;
    private const int BitsPerSampleOffset = ChannelMaskBits;
    private const uint BitsPerSampleMask = ((1 << BitsPerSampleBits) - 1);
    public uint BitsPerSample
    {
        get { return (bitfield >> BitsPerSampleOffset) & BitsPerSampleMask; }
        set { bitfield = (bitfield & ~(BitsPerSampleMask << BitsPerSampleOffset)) | ((value & BitsPerSampleMask) << BitsPerSampleOffset); }
    }

    private const int BlockAlignBits = 5;
    private const int BlockAlignOffset = BitsPerSampleOffset + BitsPerSampleBits;
    private const uint BlockAlignMask = ((1 << BlockAlignBits) - 1);
    public uint BlockAlign
    {
        get { return (bitfield >> BlockAlignOffset) & BlockAlignMask; }
        set { bitfield = (bitfield & ~(BlockAlignMask << BlockAlignOffset)) | ((value & BlockAlignMask) << BlockAlignOffset); }
    }

    private const int TypeIDBits = 2;
    private const int TypeIDOffset = BlockAlignOffset + BlockAlignBits;
    private const uint TypeIDMask = ((1 << TypeIDBits) - 1);
    public enum DataTypeID { Integer, Float };
    public DataTypeID TypeID
    {
        get { return (DataTypeID)((bitfield >> TypeIDOffset) & TypeIDMask); }
        set { bitfield = (bitfield & ~(TypeIDMask << TypeIDOffset)) | (((uint)value & TypeIDMask) << TypeIDOffset); }
    }

    private const int InterleaveIDBits = 1;
    private const int InterleaveIDOffset = TypeIDBits + TypeIDOffset;
    private const uint InterleaveIDMask = ((1 << InterleaveIDBits) - 1);
    public bool InterleaveID
    {
        get { return ((bitfield >> InterleaveIDOffset) & InterleaveIDMask) == 0; }
        set { bitfield = (bitfield & ~(InterleaveIDMask << InterleaveIDOffset)) | (((value ? 1U : 0U) & InterleaveIDMask) << InterleaveIDOffset); }
    }
}

public class AkSoundEngineExtra
{
    // void (*AkAudioInputPluginExecuteCallbackFunc)(AkPlayingID in_playingID, AkAudioBuffer *io_pBufferOut)
    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
    public delegate void AkAudioInputPluginExecuteCallbackFunc(uint playingID, AkAudioBuffer buffer);

    // void (*AkAudioInputPluginGetFormatCallbackFunc)(AkPlayingID in_playingID,AkAudioFormat &io_AudioFormat)
    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
    public delegate void AkAudioInputPluginGetFormatCallbackFunc(uint playingID, ref AkAudioFormat format);

    // AkReal32 (*AkAudioInputPluginGetGainCallbackFunc)(AkPlayingID in_playingID)
    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
    public delegate float AkAudioInputPluginGetGainCallbackFunc(uint playingID);

    // void __cdecl SetAudioInputCallbacks(AkAudioInputPluginExecuteCallbackFunc in_pfnExecCallback, 
    //      AkAudioInputPluginGetFormatCallbackFunc in_pfnGetFormatCallback = NULL, 
    //      AkAudioInputPluginGetGainCallbackFunc in_pfnGetGainCallback = NULL)
    [DllImport("AkSoundEngine",
        EntryPoint = "?SetAudioInputCallbacks@@YAXP6AXKPAVAkAudioBuffer@@@ZP6AXKAAUAkAudioFormat@@@ZP6AMK@Z@Z",
        CallingConvention = CallingConvention.Cdecl)]
    public static extern void SetAudioInputCallbacks(
        [MarshalAs(UnmanagedType.FunctionPtr)] AkAudioInputPluginExecuteCallbackFunc execute,
        [MarshalAs(UnmanagedType.FunctionPtr)] AkAudioInputPluginGetFormatCallbackFunc getFormat = null,
        [MarshalAs(UnmanagedType.FunctionPtr)] AkAudioInputPluginGetGainCallbackFunc getGain = null);
}


Et ça... fini par planter. Mais ma callback est jamais appelée. J'ai pas encore bien réussi à comprendre pourquoi, c'est un peu le dawa à débugguer.

Mais du coup, j'ai tenté de faire juste un bout de code tout simple pour vérifier que j'ai bien pigé comment fonctionne le marshalling delegate-pointeur de fonction et rien que dans mon petit truc tout simple j'ai un comportement très bizarre.

test.dll:
Code: c++ [Sélectionner]

extern "C"
{
typedef void(*function)(int);
static function global_ptr;
__declspec(dllexport) void setFunction(function ptr) { global_ptr = ptr; }
__declspec(dllexport) void callFunction() { global_ptr(42); }
void DLLMain(){}
}


Program.cs

    class Program
    {
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void function(int i);

        static void test(int a)
        {
            System.Diagnostics.Debug.Write("plop\n" + a.ToString() + "\n");
        }

        [DllImport("test", CallingConvention = CallingConvention.Cdecl)]
        static extern void setFunction([MarshalAs(UnmanagedType.FunctionPtr)] function f);

        [DllImport("test", CallingConvention = CallingConvention.Cdecl)]
        static extern void callFunction();

        static void Main(string[] args)
        {
            function f = new function(test);
            setFunction(f);
            callFunction();
            System.Diagnostics.Debug.Write("finished\n");
        }
    }


Output:
Code: ascii [Sélectionner]

plop
7924944 < nombre aléatoire, probablement un pointeur...
finished


Une idée de ce que j'ai raté en lisant les diverses doc ?

L'idée étant de tout faire sans utiliser "unsafe" parce que ça devient compliqué avec unity après...

8
Code / Re : God Complex
« le: 20 Mars 2014 à 09:00:01  »
Et c'est une solution hybride :P
Ne pas tracer le premier rayon, c'est pas énorme, mais c'est toujours ça de pris...

9
Code / Re : God Complex
« le: 17 Mars 2014 à 12:50:10  »
Ce qui répond à la question deux : c'est dynamique ? :D
Mais il est ou le code en fait ? Pas réussi à le trouver... C'est la solution dont tu - il me semble - parlait y'a quelques années ? des probes un peu partout avec des coeffs SH...

edit:
mwahahaha, sympa le code en UTF-8
double   SH::ComputeSHWindowedSinc( int l, int m, double _θ, double _ϕ, int _Order )
:)

10
Code / Re : God Complex
« le: 16 Mars 2014 à 18:46:01  »
Y'a des lampes derrière les rideaux ? parce que je comprends pas pourquoi le plafond est éclairé, y compris dans la scène avec uniquement l'éclairage direct.

11
Code / Re : God Complex
« le: 16 Mars 2014 à 18:21:32  »
Ouais enfin tous tous... Renderman a du raytracing que depuis Cars hein et les scènes étaient globalement rasteriées et c'était seulement les parties qui en avaient besoin qui pouvaient utiliser du raytracing...
http://www.levork.org/raytracingforcars.pdf

12
Code / Re : God Complex
« le: 15 Mars 2014 à 10:53:58  »
Je trouve quand même plus intelligentes les solutions qui rasterisent les premiers rayons et raytracent les rayons secondaires. Smash fait ça actuellement en voxélisant la scène à chaque frame pour avoir une représentation basse résolution de la scène mais facile à raytracer. Ca permet pas de faire ce que fait brigade mais ça permet d'avoir un résultat noise-free en temps réel.

13
Code / Re : SharpDX
« le: 12 Mars 2014 à 11:32:31  »
En compilant le sample FsmEditor du Authoring Tools Framework de Sony, j'ai vu passer SharpDX :)

14
H.S / Re : Hacking QR Codes
« le: 20 Janvier 2014 à 13:35:07  »
Excellent son zip infini aussi !

http://research.swtch.com/zip
Troll zip : http://swtch.com/r.zip

15
Code / Re : problème de mapping, ou je ne sais quoi...
« le: 18 Septembre 2013 à 18:31:40  »
Tu veux dire qu'on voit pas ton iframe dans firefox ? Dans chrome ça marche.

Pages: [1] 2 3 ... 14