public unsafe KeyDetector(int frameRate, int channels, int frameLength)
        {
            if (frameRate <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(frameRate));
            }

            if (channels <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(channels));
            }

            if (frameLength <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(frameLength));
            }

            _audioData = new_audio_data((uint)frameRate, (uint)channels, (uint)frameLength);
            _keyFinder = new_keyfinder();
            _workspace = new_workspace();
        }
 private static extern unsafe void keyfinder_final_chromagram(
     __KeyFinder *keyFinder,
     __Workspace *workspace
     );
 private static extern unsafe void keyfinder_progressive_chromagram(
     __KeyFinder *keyFinder,
     __AudioData *audioData,
     __Workspace *workspace
     );
 private static extern unsafe Key keyfinder_key_of_chromagram(
     __KeyFinder *keyFinder,
     __Workspace *workspace
     );
 private static extern unsafe void delete_workspace(
     __Workspace *workspace
     );