1657 lines
65 KiB
Plaintext
1657 lines
65 KiB
Plaintext
|
/*
|
||
|
* libzplay - windows ( WIN32 ) multimedia library
|
||
|
*
|
||
|
* ver: 2.00
|
||
|
* date: 22. April, 2010.
|
||
|
*
|
||
|
* Copyright (C) 2003-2010 Zoran Cindori
|
||
|
*
|
||
|
* Author: Zoran Cindori
|
||
|
* Web: http://libzplay.sourceforge.net/
|
||
|
* Email: zcindori@inet.hr
|
||
|
*
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or modify
|
||
|
* it under the terms of the GNU General Public License as published by
|
||
|
* the Free Software Foundation; either version 2 of the License, or
|
||
|
* (at your option) any later version.
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
* GNU General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU General Public License
|
||
|
* along with this program; if not, write to the Free Software
|
||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||
|
*
|
||
|
*
|
||
|
*
|
||
|
* Supported by:
|
||
|
*
|
||
|
* ============================================================================
|
||
|
* libmad - MPEG audio decoder library
|
||
|
* Copyright (C) 2000-2004 Underbit Technologies, Inc. <support@underbit.com>
|
||
|
* http://www.underbit.com/products/mad/
|
||
|
* GNU General Public License ( GPL.TXT )
|
||
|
* ============================================================================
|
||
|
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002
|
||
|
* by the Xiph.Org Foundation http://www.xiph.org/
|
||
|
* BSD-STYLE SOURCE LICENSE ( XIPH.TXT )
|
||
|
* ============================================================================
|
||
|
* LIBA52
|
||
|
* free library for decoding ATSC A/52 streams.
|
||
|
* It is released under the terms of the GPL license.
|
||
|
* ============================================================================
|
||
|
* FLAC - Free Lossless Audio Codec
|
||
|
* Copyright (C) 2001,2002,2003,2004,2005,2006,2007 Josh Coalson
|
||
|
* http://flac.sourceforge.net/
|
||
|
*
|
||
|
* This file is part the FLAC project. FLAC is comprised of several
|
||
|
* components distributed under difference licenses. The codec libraries
|
||
|
* are distributed under Xiph.Org's BSD-like license (see the file
|
||
|
* XIPH.TXT in this distribution). All other programs, libraries, and
|
||
|
* plugins are distributed under the LGPL or GPL (see LGPL.TXT and
|
||
|
* GPL.TXT). The documentation is distributed under the Gnu FDL (see
|
||
|
* FDL.TXT). Each file in the FLAC distribution contains at the top the
|
||
|
* terms under which it may be distributed.
|
||
|
*
|
||
|
* Since this particular file is relevant to all components of FLAC,
|
||
|
* it may be distributed under the Xiph.Org license, which is the least
|
||
|
* restrictive of those mentioned above. See the file XIPH.TXT in this
|
||
|
* distribution.
|
||
|
* ============================================================================
|
||
|
* FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
|
||
|
* Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or modify
|
||
|
* it under the terms of the GNU General Public License as published by
|
||
|
* the Free Software Foundation; either version 2 of the License, or
|
||
|
* (at your option) any later version.
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
* GNU General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU General Public License
|
||
|
* along with this program; if not, write to the Free Software
|
||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||
|
*
|
||
|
* Any non-GPL usage of this software or parts of this software is strictly
|
||
|
* forbidden.
|
||
|
*
|
||
|
* The "appropriate copyright message" mentioned in section 2c of the GPLv2
|
||
|
* must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
|
||
|
*
|
||
|
* Commercial non-GPL licensing of this software is possible.
|
||
|
* For more info contact Nero AG through Mpeg4AAClicense@nero.com.
|
||
|
*
|
||
|
* ============================================================================
|
||
|
* FAAC - Freeware Advanced Audio Coder Copyright (C) 2001 M. Bakker
|
||
|
* This library is free software; you can redistribute it and/or modify it
|
||
|
* under the terms of the GNU Lesser General Public License as published by the
|
||
|
* Free Software Foundation; either version 2.1 of the License, or
|
||
|
* (at your option) any later version.
|
||
|
*
|
||
|
* This library is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||
|
* See the GNU Lesser General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU Lesser General Public License
|
||
|
* along with this library; if not, write to the Free Software Foundation,
|
||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||
|
*
|
||
|
* ============================================================================
|
||
|
* libmp3lame encoder
|
||
|
* LAME 3.xx LAME Ain't an MP3 Encoder http://www.mp3dev.org March 2001
|
||
|
*
|
||
|
* Originally developed by Mike Cheng (www.uq.net.au/~zzmcheng).
|
||
|
* Now maintained by Mark Taylor (www.mp3dev.org).
|
||
|
*
|
||
|
* This code is distributed under the GNU LESSER PUBLIC LICENSE (LGPL, see www.gnu.org)
|
||
|
* with the following modification:
|
||
|
*
|
||
|
* If you determine that distribution of LAME requires a patent license,
|
||
|
* and you obtain a patent license, you may distribute LAME even though redistribution
|
||
|
* of LAME may also require a patent license.
|
||
|
*
|
||
|
* You agree not to enforce any patent claims for any aspect of MPEG audio compression,
|
||
|
* or any other techniques contained in the LAME source code.
|
||
|
*
|
||
|
* Copyrights (c) 1999-1007 by The LAME Project Copyrights (c) 1999,2000,2001
|
||
|
* by Mark Taylor Copyrights (c) 1999,2000,2001 by Mark Taylor Copyrights
|
||
|
* (c) 1998 by Michael Cheng Copyrights (c) 1995,1996,1997 by Michael Hipp: mpglib
|
||
|
*
|
||
|
* ============================================================================
|
||
|
* SoundTouch library Copyright (c) Olli Parviainen 2002-2009
|
||
|
* http://www.surina.net/soundtouch
|
||
|
* GNU Lesser General Public License vesrion 2.1 (LGPL.TXT )
|
||
|
* ============================================================================
|
||
|
* Center Cut DSP Plugin for Winamp 2.x
|
||
|
* Copyright (C) 2004 Moitah (moitah@yahoo.com)
|
||
|
* GNU General Public License ( GPL.TXT )
|
||
|
* ============================================================================
|
||
|
* Shibatch Super Equalizer ver 0.03 for winamp
|
||
|
* written by Naoki Shibata shibatch@users.sourceforge.net
|
||
|
* http://shibatch.sourceforge.net/
|
||
|
*
|
||
|
* Shibatch Super Equalizer (except FFT part) is distributed under LGPL.
|
||
|
* See LGPL.txt for details.
|
||
|
* FFT part is a routine made by Mr.Ooura. This routine is a freeware.
|
||
|
* Contact Mr.Ooura for details of distributing licenses.
|
||
|
* http://momonga.t.u-tokyo.ac.jp/~ooura/fft.html
|
||
|
* ============================================================================
|
||
|
* The Independent JPEG Group's JPEG software
|
||
|
* JPEG decoding library
|
||
|
* Copyright (C) 1991-2010, Thomas G. Lane, Guido Vollbeding.
|
||
|
* www.ijg.org
|
||
|
* ============================================================================
|
||
|
* ZLIB DATA COMPRESSION LIBRARY
|
||
|
* (C) 1995-2010 Jean-loup Gailly and Mark Adler
|
||
|
* http://zlib.net/
|
||
|
* ============================================================================
|
||
|
* libpng library
|
||
|
* PNG picture decoding library
|
||
|
* Copyright (c) 2004, 2006-2007 Glenn Randers-Pehrson
|
||
|
* http://www.libpng.org/
|
||
|
* ============================================================================
|
||
|
*/
|
||
|
|
||
|
|
||
|
using System;
|
||
|
using System.Runtime.InteropServices;
|
||
|
using System.Drawing;
|
||
|
|
||
|
|
||
|
namespace libZPlay
|
||
|
{
|
||
|
|
||
|
#region Structure and Enum
|
||
|
public delegate int TCallbackFunc(uint objptr, int user_data, TCallbackMessage msg, uint param1, uint param2);
|
||
|
|
||
|
|
||
|
|
||
|
public enum TSettingID : int
|
||
|
{
|
||
|
sidWaveBufferSize = 1,
|
||
|
sidAccurateLength = 2,
|
||
|
sidAccurateSeek = 3,
|
||
|
sidSamplerate = 4,
|
||
|
sidChannelNumber = 5,
|
||
|
sidBitPerSample = 6,
|
||
|
sidBigEndian = 7
|
||
|
}
|
||
|
|
||
|
public enum TStreamFormat : int
|
||
|
{
|
||
|
sfUnknown = 0,
|
||
|
sfMp3 = 1,
|
||
|
sfOgg = 2,
|
||
|
sfWav = 3,
|
||
|
sfPCM = 4,
|
||
|
sfFLAC = 5,
|
||
|
sfFLACOgg = 6,
|
||
|
sfAC3 = 7,
|
||
|
sfAacADTS = 8,
|
||
|
sfWaveIn = 9,
|
||
|
sfAutodetect = 1000
|
||
|
}
|
||
|
|
||
|
|
||
|
[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Unicode)]
|
||
|
public struct TStreamInfo
|
||
|
{
|
||
|
[FieldOffset(0)]
|
||
|
public int SamplingRate;
|
||
|
[FieldOffset(4)]
|
||
|
public int ChannelNumber;
|
||
|
[FieldOffset(8)]
|
||
|
public bool VBR;
|
||
|
[FieldOffset(12)]
|
||
|
public int Bitrate;
|
||
|
[FieldOffset(16)]
|
||
|
public TStreamTime Length;
|
||
|
[FieldOffset(44)]
|
||
|
public string Description;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Unicode)]
|
||
|
public struct TWaveOutInfo
|
||
|
{
|
||
|
[FieldOffset(0)]
|
||
|
public uint ManufacturerID;
|
||
|
[FieldOffset(4)]
|
||
|
public uint ProductID;
|
||
|
[FieldOffset(8)]
|
||
|
public uint DriverVersion;
|
||
|
[FieldOffset(12)]
|
||
|
public uint Formats;
|
||
|
[FieldOffset(16)]
|
||
|
public uint Channels;
|
||
|
[FieldOffset(20)]
|
||
|
public uint Support;
|
||
|
[FieldOffset(24)]
|
||
|
public string ProductName;
|
||
|
}
|
||
|
|
||
|
|
||
|
[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Unicode)]
|
||
|
public struct TWaveInInfo
|
||
|
{
|
||
|
[FieldOffset(0)]
|
||
|
public uint ManufacturerID;
|
||
|
[FieldOffset(4)]
|
||
|
public uint ProductID;
|
||
|
[FieldOffset(8)]
|
||
|
public uint DriverVersion;
|
||
|
[FieldOffset(12)]
|
||
|
public uint Formats;
|
||
|
[FieldOffset(16)]
|
||
|
public uint Channels;
|
||
|
[FieldOffset(20)]
|
||
|
public string ProductName;
|
||
|
}
|
||
|
|
||
|
|
||
|
public enum TFFTWindow : int
|
||
|
{
|
||
|
fwRectangular = 1,
|
||
|
fwHamming,
|
||
|
fwHann,
|
||
|
fwCosine,
|
||
|
fwLanczos,
|
||
|
fwBartlett,
|
||
|
fwTriangular,
|
||
|
fwGauss,
|
||
|
fwBartlettHann,
|
||
|
fwBlackman,
|
||
|
fwNuttall,
|
||
|
fwBlackmanHarris,
|
||
|
fwBlackmanNuttall,
|
||
|
fwFlatTop
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
public enum TTimeFormat : uint
|
||
|
{
|
||
|
tfMillisecond = 1,
|
||
|
tfSecond = 2,
|
||
|
tfHMS = 4,
|
||
|
tfSamples = 8
|
||
|
}
|
||
|
|
||
|
public enum TSeekMethod : int
|
||
|
{
|
||
|
smFromBeginning = 1,
|
||
|
smFromEnd = 2,
|
||
|
smFromCurrentForward = 4,
|
||
|
smFromCurrentBackward = 8
|
||
|
}
|
||
|
|
||
|
[StructLayout(LayoutKind.Explicit)]
|
||
|
public struct TStreamLoadInfo
|
||
|
{
|
||
|
[FieldOffset(0)]
|
||
|
public uint NumberOfBuffers;
|
||
|
[FieldOffset(4)]
|
||
|
public uint NumberOfBytes;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
[StructLayout(LayoutKind.Explicit)]
|
||
|
public struct TEchoEffect
|
||
|
{
|
||
|
[FieldOffset(0)]
|
||
|
public int nLeftDelay;
|
||
|
[FieldOffset(4)]
|
||
|
public int nLeftSrcVolume;
|
||
|
[FieldOffset(8)]
|
||
|
public int nLeftEchoVolume;
|
||
|
[FieldOffset(12)]
|
||
|
public int nRightDelay;
|
||
|
[FieldOffset(16)]
|
||
|
public int nRightSrcVolume;
|
||
|
[FieldOffset(20)]
|
||
|
public int nRightEchoVolume;
|
||
|
}
|
||
|
|
||
|
public enum TID3Version : int
|
||
|
{
|
||
|
id3Version1 = 1,
|
||
|
id3Version2 = 2
|
||
|
}
|
||
|
|
||
|
|
||
|
public enum TFFTGraphHorizontalScale : int
|
||
|
{
|
||
|
gsLogarithmic = 0,
|
||
|
gsLinear = 1
|
||
|
}
|
||
|
|
||
|
public enum TFFTGraphParamID : int
|
||
|
{
|
||
|
gpFFTPoints = 1,
|
||
|
gpGraphType,
|
||
|
gpWindow,
|
||
|
gpHorizontalScale,
|
||
|
gpSubgrid,
|
||
|
gpTransparency,
|
||
|
gpFrequencyScaleVisible,
|
||
|
gpDecibelScaleVisible,
|
||
|
gpFrequencyGridVisible,
|
||
|
gpDecibelGridVisible,
|
||
|
gpBgBitmapVisible,
|
||
|
gpBgBitmapHandle,
|
||
|
gpColor1,
|
||
|
gpColor2,
|
||
|
gpColor3,
|
||
|
gpColor4,
|
||
|
gpColor5,
|
||
|
gpColor6,
|
||
|
gpColor7,
|
||
|
gpColor8,
|
||
|
gpColor9,
|
||
|
gpColor10,
|
||
|
gpColor11,
|
||
|
gpColor12,
|
||
|
gpColor13,
|
||
|
gpColor14,
|
||
|
gpColor15,
|
||
|
gpColor16
|
||
|
}
|
||
|
|
||
|
public enum TFFTGraphType : int
|
||
|
{
|
||
|
gtLinesLeftOnTop = 0,
|
||
|
gtLinesRightOnTop,
|
||
|
gtAreaLeftOnTop,
|
||
|
gtAreaRightOnTop,
|
||
|
gtBarsLeftOnTop,
|
||
|
gtBarsRightOnTop,
|
||
|
gtSpectrum
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
[StructLayout(LayoutKind.Explicit)]
|
||
|
public struct TStreamStatus
|
||
|
{
|
||
|
[FieldOffset(0)]
|
||
|
public bool fPlay;
|
||
|
[FieldOffset(4)]
|
||
|
public bool fPause;
|
||
|
[FieldOffset(8)]
|
||
|
public bool fEcho;
|
||
|
[FieldOffset(12)]
|
||
|
public bool fEqualizer;
|
||
|
[FieldOffset(16)]
|
||
|
public bool fVocalCut;
|
||
|
[FieldOffset(20)]
|
||
|
public bool fSideCut;
|
||
|
[FieldOffset(24)]
|
||
|
public bool fChannelMix;
|
||
|
[FieldOffset(28)]
|
||
|
public bool fSlideVolume;
|
||
|
[FieldOffset(32)]
|
||
|
public int nLoop;
|
||
|
[FieldOffset(36)]
|
||
|
public bool fReverse;
|
||
|
[FieldOffset(40)]
|
||
|
public int nSongIndex;
|
||
|
[FieldOffset(44)]
|
||
|
public int nSongsInQueue;
|
||
|
}
|
||
|
|
||
|
|
||
|
[StructLayout(LayoutKind.Explicit)]
|
||
|
public struct TStreamHMSTime
|
||
|
{
|
||
|
[FieldOffset(0)]
|
||
|
public uint hour;
|
||
|
[FieldOffset(4)]
|
||
|
public uint minute;
|
||
|
[FieldOffset(8)]
|
||
|
public uint second;
|
||
|
[FieldOffset(12)]
|
||
|
public uint millisecond;
|
||
|
}
|
||
|
|
||
|
[StructLayout(LayoutKind.Explicit)]
|
||
|
public struct TStreamTime
|
||
|
{
|
||
|
[FieldOffset(0)]
|
||
|
public uint sec;
|
||
|
[FieldOffset(4)]
|
||
|
public uint ms;
|
||
|
[FieldOffset(8)]
|
||
|
public uint samples;
|
||
|
[FieldOffset(12)]
|
||
|
public TStreamHMSTime hms;
|
||
|
}
|
||
|
|
||
|
|
||
|
[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Unicode)]
|
||
|
public struct TID3Info
|
||
|
{
|
||
|
[FieldOffset(0)]
|
||
|
public string Title;
|
||
|
[FieldOffset(4)]
|
||
|
public string Artist;
|
||
|
[FieldOffset(8)]
|
||
|
public string Album;
|
||
|
[FieldOffset(12)]
|
||
|
public string Year;
|
||
|
[FieldOffset(16)]
|
||
|
public string Comment;
|
||
|
[FieldOffset(20)]
|
||
|
public string Track;
|
||
|
[FieldOffset(24)]
|
||
|
public string Genre;
|
||
|
}
|
||
|
|
||
|
public struct TID3Picture
|
||
|
{
|
||
|
public bool PicturePresent;
|
||
|
public int PictureType;
|
||
|
public string Description;
|
||
|
public Bitmap Bitmap;
|
||
|
public System.IO.MemoryStream BitStream;
|
||
|
};
|
||
|
|
||
|
public struct TID3InfoEx
|
||
|
{
|
||
|
public string Title;
|
||
|
public string Artist;
|
||
|
public string Album;
|
||
|
public string Year;
|
||
|
public string Comment;
|
||
|
public string Track;
|
||
|
public string Genre;
|
||
|
public string AlbumArtist;
|
||
|
public string Composer;
|
||
|
public string OriginalArtist;
|
||
|
public string Copyright;
|
||
|
public string URL;
|
||
|
public string Encoder;
|
||
|
public string Publisher;
|
||
|
public int BPM;
|
||
|
public TID3Picture Picture;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
public enum TBPMDetectionMethod : int
|
||
|
{
|
||
|
dmPeaks = 0,
|
||
|
dmAutoCorrelation
|
||
|
}
|
||
|
|
||
|
|
||
|
public enum TFFTGraphSize : int
|
||
|
{
|
||
|
FFTGraphMinWidth = 100,
|
||
|
FFTGraphMinHeight = 60
|
||
|
}
|
||
|
|
||
|
public enum TWaveOutMapper : uint
|
||
|
{
|
||
|
WaveOutWaveMapper = 4294967295
|
||
|
}
|
||
|
|
||
|
public enum TWaveInMapper : uint
|
||
|
{
|
||
|
WaveInWaveMapper = 4294967295
|
||
|
}
|
||
|
|
||
|
public enum TCallbackMessage : int
|
||
|
{
|
||
|
MsgStopAsync = 1,
|
||
|
MsgPlayAsync = 2,
|
||
|
MsgEnterLoopAsync = 4,
|
||
|
MsgExitLoopAsync = 8,
|
||
|
MsgEnterVolumeSlideAsync = 16,
|
||
|
MsgExitVolumeSlideAsync = 32,
|
||
|
MsgStreamBufferDoneAsync = 64,
|
||
|
MsgStreamNeedMoreDataAsync = 128,
|
||
|
MsgNextSongAsync = 256,
|
||
|
MsgStop = 65536,
|
||
|
MsgPlay = 131072,
|
||
|
MsgEnterLoop = 262144,
|
||
|
MsgExitLoop = 524288,
|
||
|
MsgEnterVolumeSlide = 1048576,
|
||
|
MsgExitVolumeSlide = 2097152,
|
||
|
MsgStreamBufferDone = 4194304,
|
||
|
MsgStreamNeedMoreData = 8388608,
|
||
|
MsgNextSong = 16777216,
|
||
|
MsgWaveBuffer = 33554432
|
||
|
}
|
||
|
|
||
|
|
||
|
public enum TWaveOutFormat : uint
|
||
|
{
|
||
|
format_invalid = 0,
|
||
|
format_11khz_8bit_mono = 1,
|
||
|
format_11khz_8bit_stereo = 2,
|
||
|
format_11khz_16bit_mono = 4,
|
||
|
format_11khz_16bit_stereo = 8,
|
||
|
|
||
|
format_22khz_8bit_mono = 16,
|
||
|
format_22khz_8bit_stereo = 32,
|
||
|
format_22khz_16bit_mono = 64,
|
||
|
format_22khz_16bit_stereo = 128,
|
||
|
|
||
|
format_44khz_8bit_mono = 256,
|
||
|
format_44khz_8bit_stereo = 512,
|
||
|
format_44khz_16bit_mono = 1024,
|
||
|
format_44khz_16bit_stereo = 2048
|
||
|
}
|
||
|
|
||
|
public enum TWaveOutFunctionality : uint
|
||
|
{
|
||
|
supportPitchControl = 1,
|
||
|
supportPlaybackRateControl = 2,
|
||
|
supportVolumeControl = 4,
|
||
|
supportSeparateLeftRightVolume = 8,
|
||
|
supportSync = 16,
|
||
|
supportSampleAccuratePosition = 32,
|
||
|
supportDirectSound = 6
|
||
|
}
|
||
|
|
||
|
|
||
|
#endregion
|
||
|
public class ZPlay
|
||
|
{
|
||
|
|
||
|
|
||
|
|
||
|
#region libZPlay.dll interface
|
||
|
|
||
|
[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Unicode)]
|
||
|
private struct TStreamInfo_Internal
|
||
|
{
|
||
|
[FieldOffset(0)]
|
||
|
public int SamplingRate;
|
||
|
[FieldOffset(4)]
|
||
|
public int ChannelNumber;
|
||
|
[FieldOffset(8)]
|
||
|
public bool VBR;
|
||
|
[FieldOffset(12)]
|
||
|
public int Bitrate;
|
||
|
[FieldOffset(16)]
|
||
|
public TStreamTime Length;
|
||
|
[FieldOffset(44)]
|
||
|
public IntPtr Description;
|
||
|
}
|
||
|
|
||
|
[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Unicode)]
|
||
|
private struct TWaveOutInfo_Internal
|
||
|
{
|
||
|
[FieldOffset(0)]
|
||
|
public uint ManufacturerID;
|
||
|
[FieldOffset(4)]
|
||
|
public uint ProductID;
|
||
|
[FieldOffset(8)]
|
||
|
public uint DriverVersion;
|
||
|
[FieldOffset(12)]
|
||
|
public uint Formats;
|
||
|
[FieldOffset(16)]
|
||
|
public uint Channels;
|
||
|
[FieldOffset(20)]
|
||
|
public uint Support;
|
||
|
[FieldOffset(24)]
|
||
|
public IntPtr ProductName;
|
||
|
}
|
||
|
|
||
|
|
||
|
[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Unicode)]
|
||
|
private struct TWaveInInfo_Internal
|
||
|
{
|
||
|
[FieldOffset(0)]
|
||
|
public uint ManufacturerID;
|
||
|
[FieldOffset(4)]
|
||
|
public uint ProductID;
|
||
|
[FieldOffset(8)]
|
||
|
public uint DriverVersion;
|
||
|
[FieldOffset(12)]
|
||
|
public uint Formats;
|
||
|
[FieldOffset(16)]
|
||
|
public uint Channels;
|
||
|
[FieldOffset(20)]
|
||
|
public IntPtr ProductName;
|
||
|
}
|
||
|
|
||
|
|
||
|
[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Unicode)]
|
||
|
private struct TID3Info_Internal
|
||
|
{
|
||
|
[FieldOffset(0)]
|
||
|
public IntPtr Title;
|
||
|
[FieldOffset(4)]
|
||
|
public IntPtr Artist;
|
||
|
[FieldOffset(8)]
|
||
|
public IntPtr Album;
|
||
|
[FieldOffset(12)]
|
||
|
public IntPtr Year;
|
||
|
[FieldOffset(16)]
|
||
|
public IntPtr Comment;
|
||
|
[FieldOffset(20)]
|
||
|
public IntPtr Track;
|
||
|
[FieldOffset(24)]
|
||
|
public IntPtr Genre;
|
||
|
}
|
||
|
|
||
|
[StructLayout(LayoutKind.Explicit, CharSet=CharSet.Unicode)]
|
||
|
private struct TID3InfoEx_Internal
|
||
|
{
|
||
|
[FieldOffset(0)]
|
||
|
public IntPtr Title;
|
||
|
[FieldOffset(4)]
|
||
|
public IntPtr Artist;
|
||
|
[FieldOffset(8)]
|
||
|
public IntPtr Album;
|
||
|
[FieldOffset(12)]
|
||
|
public IntPtr Year;
|
||
|
[FieldOffset(16)]
|
||
|
public IntPtr Comment;
|
||
|
[FieldOffset(20)]
|
||
|
public IntPtr Track;
|
||
|
[FieldOffset(24)]
|
||
|
public IntPtr Genre;
|
||
|
[FieldOffset(28)]
|
||
|
public IntPtr AlbumArtist;
|
||
|
[FieldOffset(32)]
|
||
|
public IntPtr Composer;
|
||
|
[FieldOffset(36)]
|
||
|
public IntPtr OriginalArtist;
|
||
|
[FieldOffset(40)]
|
||
|
public IntPtr Copyright;
|
||
|
[FieldOffset(44)]
|
||
|
public IntPtr URL;
|
||
|
[FieldOffset(48)]
|
||
|
public IntPtr Encoder;
|
||
|
[FieldOffset(52)]
|
||
|
public IntPtr Publisher;
|
||
|
[FieldOffset(56)]
|
||
|
public int BPM;
|
||
|
[FieldOffset(60)]
|
||
|
public int PicturePresent;
|
||
|
[FieldOffset(64)]
|
||
|
public int CanDrawPicture;
|
||
|
[FieldOffset(68)]
|
||
|
public IntPtr MIMEType;
|
||
|
[FieldOffset(72)]
|
||
|
public int PictureType;
|
||
|
[FieldOffset(76)]
|
||
|
public IntPtr Description;
|
||
|
[FieldOffset(80)]
|
||
|
public IntPtr PictureData;
|
||
|
[FieldOffset(84)]
|
||
|
public int PictureDataSize;
|
||
|
[FieldOffset(88)]
|
||
|
public IntPtr hBitmap;
|
||
|
[FieldOffset(92)]
|
||
|
public int Width;
|
||
|
[FieldOffset(96)]
|
||
|
public int Height;
|
||
|
[FieldOffset(356)]
|
||
|
public IntPtr reserved;
|
||
|
};
|
||
|
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_CreateZPlay", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static uint zplay_CreateZPlay();
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_DestroyZPlay", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_DestroyZPlay(uint objptr);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_SetSettings", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_SetSettings(uint objptr, int nSettingID, int value);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_GetSettings", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_GetSettings(uint objptr, int nSettingID);
|
||
|
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_GetError", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static IntPtr zplay_GetError(uint objptr);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_GetErrorW", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Unicode, SetLastError = true)]
|
||
|
private extern static IntPtr zplay_GetErrorW(uint objptr);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_GetVersion", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_GetVersion(uint objptr);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_GetFileFormat", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_GetFileFormat(uint objptr, [MarshalAs(UnmanagedType.LPStr)] string pchFileName);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_GetFileFormatW", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Unicode, SetLastError = true)]
|
||
|
private extern static int zplay_GetFileFormatW(uint objptr, [MarshalAs(UnmanagedType.LPWStr)] string pchFileName);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_OpenFile", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_OpenFile(uint objptr, [MarshalAs(UnmanagedType.LPStr)] string sFileName, int nFormat);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_AddFile", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_AddFile(uint objptr, [MarshalAs(UnmanagedType.LPStr)] string sFileName, int nFormat);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_OpenFileW", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Unicode, SetLastError = true)]
|
||
|
private extern static int zplay_OpenFileW(uint objptr, [MarshalAs(UnmanagedType.LPWStr)] string sFileName, int nFormat);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_AddFileW", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Unicode, SetLastError = true)]
|
||
|
private extern static int zplay_AddFileW(uint objptr, [MarshalAs(UnmanagedType.LPWStr)] string sFileName, int nFormat);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_OpenStream", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_OpenStream(uint objptr, int fBuffered, int fManaged, [In()] byte[] sMemStream, uint nStreamSize, int nFormat);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_PushDataToStream", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_PushDataToStream(uint objptr, [In()] byte[] sMemNewData, uint nNewDataize);
|
||
|
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_Close", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_Close(uint objptr);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_Play", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_Play(uint objptr);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_Stop", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_Stop(uint objptr);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_Pause", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_Pause(uint objptr);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_Resume", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_Resume(uint objptr);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_IsStreamDataFree", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_IsStreamDataFree(uint objptr, [In()] byte[] sMemNewData);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_GetDynamicStreamLoad", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static void zplay_GetDynamicStreamLoad(uint objptr, ref TStreamLoadInfo pStreamLoadInfo);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_GetPosition", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static void zplay_GetPosition(uint objptr, ref TStreamTime pTime);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_PlayLoop", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_PlayLoop(uint objptr, int fFormatStartTime, ref TStreamTime pStartTime, int fFormatEndTime, ref TStreamTime pEndTime, uint nNumOfCycles, uint fContinuePlaying);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_Seek", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_Seek(uint objptr, TTimeFormat fFormat, ref TStreamTime pTime, TSeekMethod nMoveMethod);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_ReverseMode", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_ReverseMode(uint objptr, int fEnable);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_SetMasterVolume", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_SetMasterVolume(uint objptr, int nLeftVolume, int nRightVolume);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_SetPlayerVolume", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_SetPlayerVolume(uint objptr, int nLeftVolume, int nRightVolume);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_GetMasterVolume", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static void zplay_GetMasterVolume(uint objptr, ref int nLeftVolume, ref int nRightVolume);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_GetPlayerVolume", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static void zplay_GetPlayerVolume(uint objptr, ref int nLeftVolume, ref int nRightVolume);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_GetBitrate", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_GetBitrate(uint objptr, int fAverage);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_GetStatus", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static void zplay_GetStatus(uint objptr, ref TStreamStatus pStatus);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_MixChannels", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_MixChannels(uint objptr, int fEnable, uint nLeftPercent, uint nRightPercent);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_GetVUData", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static void zplay_GetVUData(uint objptr, ref int pnLeftChannel, ref int pnRightChannel);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_SlideVolume", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_SlideVolume(uint objptr, TTimeFormat fFormatStart, ref TStreamTime pTimeStart, int nStartVolumeLeft, int nStartVolumeRight, TTimeFormat fFormatEnd, ref TStreamTime pTimeEnd, int nEndVolumeLeft, int nEndVolumeRight);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_EnableEqualizer", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_EnableEqualizer(uint objptr, int fEnable);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_SetEqualizerPoints", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_SetEqualizerPoints(uint objptr, [In()] int[] pnFreqPoint, int nNumOfPoints);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_GetEqualizerPoints", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_GetEqualizerPoints(uint objptr, [In(), Out()] int[] pnFreqPoint, int nNumOfPoints);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_SetEqualizerParam", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_SetEqualizerParam(uint objptr, int nPreAmpGain, [In()] int[] pnBandGain, int nNumberOfBands);
|
||
|
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_GetEqualizerParam", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_GetEqualizerParam(uint objptr, ref int nPreAmpGain, [In(), Out()] int[] pnBandGain, int nNumberOfBands);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_SetEqualizerPreampGain", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_SetEqualizerPreampGain(uint objptr, int nGain);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_GetEqualizerPreampGain", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_GetEqualizerPreampGain(uint objptr);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_SetEqualizerBandGain", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_SetEqualizerBandGain(uint objptr, int nBandIndex, int nGain);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_GetEqualizerBandGain", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_GetEqualizerBandGain(uint objptr, int nBandIndex);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_EnableEcho", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_EnableEcho(uint objptr, int fEnable);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_StereoCut", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_StereoCut(uint objptr, int fEnable, int fOutputCenter, int fBassToSides);
|
||
|
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_SetEchoParam", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_SetEchoParam(uint objptr, [In()] TEchoEffect[] pEchoEffect, int nNumberOfEffects);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_GetEchoParam", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_GetEchoParam(uint objptr, [In(), Out()] TEchoEffect[] pEchoEffect, int nNumberOfEffects);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_GetFFTData", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_GetFFTData(uint objptr, int nFFTPoints, int nFFTWindow, ref int pnHarmonicNumber, [In(), Out()] int[] pnHarmonicFreq, [In(), Out()] int[] pnLeftAmplitude, [In(), Out()] int[] pnRightAmplitude, [In(), Out()] int[] pnLeftPhase, [In(), Out()] int[] pnRightPhase);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_SetRate", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_SetRate(uint objptr, int nRate);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_GetRate", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_GetRate(uint objptr);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_SetPitch", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_SetPitch(uint objptr, int nPitch);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_GetPitch", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_GetPitch(uint objptr);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_SetTempo", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_SetTempo(uint objptr, int nTempo);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_GetTempo", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_GetTempo(uint objptr);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_DrawFFTGraphOnHDC", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_DrawFFTGraphOnHDC(uint objptr, System.IntPtr hdc, int nX, int nY, int nWidth, int nHeight);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_DrawFFTGraphOnHWND", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_DrawFFTGraphOnHWND(uint objptr, System.IntPtr hwnd, int nX, int nY, int nWidth, int nHeight);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_SetFFTGraphParam", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_SetFFTGraphParam(uint objptr, int nParamID, int nParamValue);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_GetFFTGraphParam", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_GetFFTGraphParam(uint objptr, int nParamID);
|
||
|
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_LoadID3W", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_LoadID3W(uint objptr, int nId3Version, ref TID3Info_Internal pId3Info);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_LoadID3ExW", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_LoadID3ExW(uint objptr, ref TID3InfoEx_Internal pId3Info, int fDecodeEmbededPicture);
|
||
|
|
||
|
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_LoadFileID3W", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Unicode, SetLastError = true)]
|
||
|
private extern static int zplay_LoadFileID3W(uint objptr, [MarshalAs(UnmanagedType.LPWStr)] string pchFileName, int nFormat, int nId3Version, ref TID3Info_Internal pId3Info);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_LoadFileID3ExW", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Unicode, SetLastError = true)]
|
||
|
private extern static int zplay_LoadFileID3ExW(uint objptr, [MarshalAs(UnmanagedType.LPWStr)] string pchFileName, int nFormat, ref TID3InfoEx_Internal pId3Info, int fDecodeEmbededPicture);
|
||
|
|
||
|
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_DetectBPM", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_DetectBPM(uint objptr, uint nMethod);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_DetectFileBPM", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_DetectFileBPM(uint objptr, [MarshalAs(UnmanagedType.LPStr)] string sFileName, int nFormat, uint nMethod);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_DetectFileBPMW", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Unicode, SetLastError = true)]
|
||
|
private extern static int zplay_DetectFileBPMW(uint objptr, [MarshalAs(UnmanagedType.LPWStr)] string sFileName, int nFormat, uint nMethod);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_SetCallbackFunc", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_SetCallbackFunc(uint objptr, [MarshalAs(UnmanagedType.FunctionPtr)] TCallbackFunc pCallbackFunc, TCallbackMessage nMessage, int user_data);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_EnumerateWaveOut", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_EnumerateWaveOut(uint objptr);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_GetWaveOutInfoW", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_GetWaveOutInfoW(uint objptr, uint nIndex, ref TWaveOutInfo_Internal pWaveOutInfo);
|
||
|
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_SetWaveOutDevice", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_SetWaveOutDevice(uint objptr, uint nIndex);
|
||
|
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_EnumerateWaveIn", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_EnumerateWaveIn(uint objptr);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_GetWaveInInfoW", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_GetWaveInInfoW(uint objptr, uint nIndex, ref TWaveInInfo_Internal pWaveOutInfo);
|
||
|
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_SetWaveInDevice", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static int zplay_SetWaveInDevice(uint objptr, uint nIndex);
|
||
|
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_GetStreamInfoW", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
|
||
|
private extern static void zplay_GetStreamInfoW(uint objptr, ref TStreamInfo_Internal pInfo);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("libzplay.dll", EntryPoint = "zplay_SetWaveOutFileW", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Unicode, SetLastError = true)]
|
||
|
private extern static int zplay_SetWaveOutFileW(uint objptr, [MarshalAs(UnmanagedType.LPWStr)] string sFileName, int nFormat, int fOutputToSoundcard);
|
||
|
|
||
|
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
|
||
|
#region Helper functions
|
||
|
|
||
|
private uint objptr;
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region Constructor and destructor
|
||
|
|
||
|
public ZPlay()
|
||
|
{
|
||
|
objptr = zplay_CreateZPlay();
|
||
|
if (objptr == 0)
|
||
|
{
|
||
|
throw new Exception("Can't create libZPlay interface.");
|
||
|
}
|
||
|
|
||
|
if(GetVersion() < 190)
|
||
|
throw new Exception("Need libZPlay.dll version 1.90 and above.");
|
||
|
}
|
||
|
|
||
|
~ZPlay()
|
||
|
{
|
||
|
zplay_DestroyZPlay(objptr);
|
||
|
}
|
||
|
#endregion
|
||
|
|
||
|
#region Version
|
||
|
public int GetVersion()
|
||
|
{
|
||
|
return zplay_GetVersion(objptr);
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region Error handling
|
||
|
public string GetError()
|
||
|
{
|
||
|
return Marshal.PtrToStringUni(zplay_GetErrorW(objptr));
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region Open and close stream
|
||
|
|
||
|
public TStreamFormat GetFileFormat(string FileName)
|
||
|
{
|
||
|
return (TStreamFormat)(zplay_GetFileFormatW(objptr, FileName));
|
||
|
}
|
||
|
|
||
|
public bool OpenFile(string FileName, TStreamFormat Format)
|
||
|
{
|
||
|
return zplay_OpenFileW(objptr, FileName, System.Convert.ToInt32(Format)) == 1;
|
||
|
}
|
||
|
|
||
|
public bool SetWaveOutFile(string FileName, TStreamFormat Format, bool fOutputToSoundcard)
|
||
|
{
|
||
|
int s = 0;
|
||
|
if (fOutputToSoundcard)
|
||
|
s = 1;
|
||
|
|
||
|
return zplay_SetWaveOutFileW(objptr, FileName, System.Convert.ToInt32(Format), s) == 1;
|
||
|
}
|
||
|
|
||
|
public bool AddFile(string FileName, TStreamFormat Format)
|
||
|
{
|
||
|
return zplay_AddFileW(objptr, FileName, System.Convert.ToInt32(Format)) == 1;
|
||
|
}
|
||
|
|
||
|
|
||
|
public bool OpenStream(bool Buffered, bool Dynamic, ref byte[] MemStream, uint StreamSize, TStreamFormat nFormat)
|
||
|
{
|
||
|
int b = 0;
|
||
|
int m = 0;
|
||
|
if (Buffered)
|
||
|
{
|
||
|
b = 1;
|
||
|
}
|
||
|
if (Dynamic)
|
||
|
{
|
||
|
m = 1;
|
||
|
}
|
||
|
return zplay_OpenStream(objptr, b, m, MemStream, StreamSize, System.Convert.ToInt32(nFormat)) == 1;
|
||
|
}
|
||
|
|
||
|
|
||
|
public bool PushDataToStream(ref byte[] MemNewData, uint NewDatSize)
|
||
|
{
|
||
|
return zplay_PushDataToStream(objptr, MemNewData, NewDatSize) == 1;
|
||
|
}
|
||
|
|
||
|
public bool IsStreamDataFree(ref byte[] MemNewData)
|
||
|
{
|
||
|
return zplay_IsStreamDataFree(objptr, MemNewData) == 1;
|
||
|
}
|
||
|
|
||
|
public bool Close()
|
||
|
{
|
||
|
return zplay_Close(objptr) == 1;
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region Position and Seek
|
||
|
|
||
|
|
||
|
public void GetPosition(ref TStreamTime time)
|
||
|
{
|
||
|
zplay_GetPosition(objptr, ref time);
|
||
|
}
|
||
|
|
||
|
public bool Seek(TTimeFormat TimeFormat, ref TStreamTime Position, TSeekMethod MoveMethod)
|
||
|
{
|
||
|
return zplay_Seek(objptr, TimeFormat, ref Position, MoveMethod) == 1;
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region Play, Pause, Loop, Reverse
|
||
|
|
||
|
public bool ReverseMode(bool Enable)
|
||
|
{
|
||
|
if (Enable)
|
||
|
{
|
||
|
return zplay_ReverseMode(objptr, 1) == 1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return zplay_ReverseMode(objptr, 0) == 1;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
public bool PlayLoop(TTimeFormat TimeFormatStart, ref TStreamTime StartPosition, TTimeFormat TimeFormatEnd, ref TStreamTime EndPosition, uint NumberOfCycles, bool ContinuePlaying)
|
||
|
{
|
||
|
uint continueplay = 0;
|
||
|
if (ContinuePlaying)
|
||
|
{
|
||
|
continueplay = 1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
continueplay = 0;
|
||
|
}
|
||
|
|
||
|
return zplay_PlayLoop(objptr, System.Convert.ToInt32((int)(TimeFormatStart)), ref StartPosition, System.Convert.ToInt32((int)(TimeFormatEnd)), ref EndPosition, NumberOfCycles, continueplay) == 1;
|
||
|
}
|
||
|
|
||
|
public bool StartPlayback()
|
||
|
{
|
||
|
return zplay_Play(objptr) == 1;
|
||
|
}
|
||
|
|
||
|
public bool StopPlayback()
|
||
|
{
|
||
|
return zplay_Stop(objptr) == 1;
|
||
|
}
|
||
|
|
||
|
public bool PausePlayback()
|
||
|
{
|
||
|
return zplay_Pause(objptr) == 1;
|
||
|
}
|
||
|
|
||
|
public bool ResumePlayback()
|
||
|
{
|
||
|
return zplay_Resume(objptr) == 1;
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region Equalizer
|
||
|
|
||
|
|
||
|
public bool SetEqualizerParam(int PreAmpGain, ref int[] BandGain, int NumberOfBands)
|
||
|
{
|
||
|
return zplay_SetEqualizerParam(objptr, PreAmpGain, BandGain, NumberOfBands) == 1;
|
||
|
}
|
||
|
|
||
|
|
||
|
public int GetEqualizerParam(ref int PreAmpGain, ref int[] BandGain)
|
||
|
{
|
||
|
int tempnPreAmpGain1 = 0;
|
||
|
int size = zplay_GetEqualizerParam(objptr, ref tempnPreAmpGain1, null, 0);
|
||
|
Array.Resize(ref BandGain, size);
|
||
|
return zplay_GetEqualizerParam(objptr, ref PreAmpGain, BandGain, size);
|
||
|
}
|
||
|
|
||
|
public bool EnableEqualizer(bool Enable)
|
||
|
{
|
||
|
if (Enable)
|
||
|
{
|
||
|
return zplay_EnableEqualizer(objptr, 1) == 1;
|
||
|
}
|
||
|
return zplay_EnableEqualizer(objptr, 0) == 1;
|
||
|
}
|
||
|
|
||
|
public bool SetEqualizerPreampGain(int Gain)
|
||
|
{
|
||
|
return zplay_SetEqualizerPreampGain(objptr, Gain) == 1;
|
||
|
}
|
||
|
|
||
|
public int GetEqualizerPreampGain()
|
||
|
{
|
||
|
return zplay_GetEqualizerPreampGain(objptr);
|
||
|
}
|
||
|
|
||
|
public bool SetEqualizerBandGain(int BandIndex, int Gain)
|
||
|
{
|
||
|
return zplay_SetEqualizerBandGain(objptr, BandIndex, Gain) == 1;
|
||
|
}
|
||
|
|
||
|
public int GetEqualizerBandGain(int BandIndex)
|
||
|
{
|
||
|
return zplay_GetEqualizerBandGain(objptr, BandIndex);
|
||
|
}
|
||
|
|
||
|
public bool SetEqualizerPoints(ref int[] FreqPointArray, int NumberOfPoints)
|
||
|
{
|
||
|
return zplay_SetEqualizerPoints(objptr, FreqPointArray, NumberOfPoints) == 1;
|
||
|
}
|
||
|
|
||
|
public int GetEqualizerPoints(ref int[] FreqPointArray)
|
||
|
{
|
||
|
int size = zplay_GetEqualizerPoints(objptr, null, 0);
|
||
|
Array.Resize(ref FreqPointArray, size);
|
||
|
return zplay_GetEqualizerPoints(objptr, FreqPointArray, size);
|
||
|
}
|
||
|
#endregion
|
||
|
|
||
|
#region Echo
|
||
|
|
||
|
|
||
|
public bool EnableEcho(bool Enable)
|
||
|
{
|
||
|
if (Enable)
|
||
|
{
|
||
|
return zplay_EnableEcho(objptr, 1) == 1;
|
||
|
}
|
||
|
return zplay_EnableEcho(objptr, 0) == 1;
|
||
|
}
|
||
|
|
||
|
|
||
|
public bool SetEchoParam(ref TEchoEffect[] EchoEffectArray, int NumberOfEffects)
|
||
|
{
|
||
|
return zplay_SetEchoParam(objptr, EchoEffectArray, NumberOfEffects) == 1;
|
||
|
}
|
||
|
|
||
|
public int GetEchoParam(ref TEchoEffect[] EchoEffectArray)
|
||
|
{
|
||
|
int size = zplay_GetEchoParam(objptr, null, 0);
|
||
|
Array.Resize(ref EchoEffectArray, size);
|
||
|
return zplay_GetEchoParam(objptr, EchoEffectArray, size);
|
||
|
}
|
||
|
#endregion
|
||
|
|
||
|
#region Volume and Fade
|
||
|
public bool SetMasterVolume(int LeftVolume, int RightVolume)
|
||
|
{
|
||
|
return zplay_SetMasterVolume(objptr, LeftVolume, RightVolume) == 1;
|
||
|
}
|
||
|
|
||
|
public bool SetPlayerVolume(int LeftVolume, int RightVolume)
|
||
|
{
|
||
|
return zplay_SetPlayerVolume(objptr, LeftVolume, RightVolume) == 1;
|
||
|
}
|
||
|
|
||
|
|
||
|
public void GetMasterVolume(ref int LeftVolume, ref int RightVolume)
|
||
|
{
|
||
|
zplay_GetMasterVolume(objptr, ref LeftVolume, ref RightVolume);
|
||
|
}
|
||
|
|
||
|
public void GetPlayerVolume(ref int LeftVolume, ref int RightVolume)
|
||
|
{
|
||
|
zplay_GetPlayerVolume(objptr, ref LeftVolume, ref RightVolume);
|
||
|
}
|
||
|
|
||
|
|
||
|
public bool SlideVolume(TTimeFormat TimeFormatStart, ref TStreamTime TimeStart, int StartVolumeLeft, int StartVolumeRight, TTimeFormat TimeFormatEnd, ref TStreamTime TimeEnd, int EndVolumeLeft, int EndVolumeRight)
|
||
|
{
|
||
|
return zplay_SlideVolume(objptr, TimeFormatStart, ref TimeStart, StartVolumeLeft, StartVolumeRight, TimeFormatEnd, ref TimeEnd, EndVolumeLeft, EndVolumeRight) == 1;
|
||
|
}
|
||
|
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region Pitch, tempo, rate
|
||
|
public bool SetPitch(int Pitch)
|
||
|
{
|
||
|
return zplay_SetPitch(objptr, Pitch) == 1;
|
||
|
}
|
||
|
|
||
|
public int GetPitch()
|
||
|
{
|
||
|
return zplay_GetPitch(objptr);
|
||
|
}
|
||
|
|
||
|
public bool SetRate(int Rate)
|
||
|
{
|
||
|
return zplay_SetRate(objptr, Rate) == 1;
|
||
|
}
|
||
|
|
||
|
public int GetRate()
|
||
|
{
|
||
|
return zplay_GetRate(objptr);
|
||
|
}
|
||
|
|
||
|
public bool SetTempo(int Tempo)
|
||
|
{
|
||
|
return zplay_SetTempo(objptr, Tempo) == 1;
|
||
|
}
|
||
|
|
||
|
public int GetTempo()
|
||
|
{
|
||
|
return zplay_GetTempo(objptr);
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region Bitrate
|
||
|
public int GetBitrate(bool Average)
|
||
|
{
|
||
|
if (Average)
|
||
|
return zplay_GetBitrate(objptr, 1);
|
||
|
|
||
|
return zplay_GetBitrate(objptr, 0);
|
||
|
}
|
||
|
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region ID3 Info
|
||
|
|
||
|
public bool LoadID3(TID3Version Id3Version, ref TID3Info Info)
|
||
|
{
|
||
|
TID3Info_Internal tmp = new TID3Info_Internal();
|
||
|
if (zplay_LoadID3W(objptr, System.Convert.ToInt32((int)(Id3Version)), ref tmp) == 1)
|
||
|
{
|
||
|
Info.Album = Marshal.PtrToStringUni(tmp.Album);
|
||
|
Info.Artist = Marshal.PtrToStringUni(tmp.Artist);
|
||
|
Info.Comment = Marshal.PtrToStringUni(tmp.Comment);
|
||
|
Info.Genre = Marshal.PtrToStringUni(tmp.Genre);
|
||
|
Info.Title = Marshal.PtrToStringUni(tmp.Title);
|
||
|
Info.Track = Marshal.PtrToStringUni(tmp.Track);
|
||
|
Info.Year = Marshal.PtrToStringUni(tmp.Year);
|
||
|
return true;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
public bool LoadID3Ex(ref TID3InfoEx Info, bool fDecodePicture)
|
||
|
{
|
||
|
TID3InfoEx_Internal tmp = new TID3InfoEx_Internal();
|
||
|
|
||
|
if (zplay_LoadID3ExW(objptr, ref tmp, 0) == 1)
|
||
|
{
|
||
|
Info.Album = Marshal.PtrToStringUni(tmp.Album);
|
||
|
Info.Artist = Marshal.PtrToStringUni(tmp.Artist);
|
||
|
Info.Comment = Marshal.PtrToStringUni(tmp.Comment);
|
||
|
Info.Genre = Marshal.PtrToStringUni(tmp.Genre);
|
||
|
Info.Title = Marshal.PtrToStringUni(tmp.Title);
|
||
|
Info.Track = Marshal.PtrToStringUni(tmp.Track);
|
||
|
Info.Year = Marshal.PtrToStringUni(tmp.Year);
|
||
|
|
||
|
Info.AlbumArtist = Marshal.PtrToStringUni(tmp.AlbumArtist);
|
||
|
Info.Composer = Marshal.PtrToStringUni(tmp.Composer);
|
||
|
Info.OriginalArtist = Marshal.PtrToStringUni(tmp.OriginalArtist);
|
||
|
Info.Copyright = Marshal.PtrToStringUni(tmp.Copyright);
|
||
|
Info.Encoder = Marshal.PtrToStringUni(tmp.Encoder);
|
||
|
Info.Publisher = Marshal.PtrToStringUni(tmp.Publisher);
|
||
|
Info.BPM = tmp.BPM;
|
||
|
|
||
|
|
||
|
Info.Picture.PicturePresent = false;
|
||
|
if (fDecodePicture)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
if (tmp.PicturePresent == 1)
|
||
|
{
|
||
|
byte[] stream_data = new byte[System.Convert.ToInt32(tmp.PictureDataSize) + 1];
|
||
|
Marshal.Copy(tmp.PictureData, stream_data, 0, tmp.PictureDataSize);
|
||
|
Info.Picture.BitStream = new System.IO.MemoryStream();
|
||
|
Info.Picture.BitStream.Write(stream_data, 0, tmp.PictureDataSize);
|
||
|
Info.Picture.Bitmap = new Bitmap(Info.Picture.BitStream);
|
||
|
Info.Picture.PictureType = tmp.PictureType;
|
||
|
Info.Picture.Description = Marshal.PtrToStringUni(tmp.Description);
|
||
|
Info.Picture.PicturePresent = true;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Info.Picture.Bitmap = new Bitmap(1, 1);
|
||
|
}
|
||
|
return true;
|
||
|
|
||
|
}
|
||
|
catch
|
||
|
{
|
||
|
Info.Picture.PicturePresent = false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
|
||
|
public bool LoadFileID3(string FileName, TStreamFormat Format, TID3Version Id3Version, ref TID3Info Info)
|
||
|
{
|
||
|
TID3Info_Internal tmp = new TID3Info_Internal();
|
||
|
if (zplay_LoadFileID3W(objptr, FileName, System.Convert.ToInt32(Format), System.Convert.ToInt32((int)(Id3Version)), ref tmp) == 1)
|
||
|
{
|
||
|
Info.Album = Marshal.PtrToStringUni(tmp.Album);
|
||
|
Info.Artist = Marshal.PtrToStringUni(tmp.Artist);
|
||
|
Info.Comment = Marshal.PtrToStringUni(tmp.Comment);
|
||
|
Info.Genre = Marshal.PtrToStringUni(tmp.Genre);
|
||
|
Info.Title = Marshal.PtrToStringUni(tmp.Title);
|
||
|
Info.Track = Marshal.PtrToStringUni(tmp.Track);
|
||
|
Info.Year = Marshal.PtrToStringUni(tmp.Year);
|
||
|
return true;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public bool LoadFileID3Ex(string FileName, TStreamFormat Format, ref TID3InfoEx Info, bool fDecodePicture)
|
||
|
{
|
||
|
TID3InfoEx_Internal tmp = new TID3InfoEx_Internal();
|
||
|
|
||
|
if (zplay_LoadFileID3ExW(objptr, FileName, System.Convert.ToInt32(Format), ref tmp, 0) == 1)
|
||
|
{
|
||
|
Info.Album = Marshal.PtrToStringUni(tmp.Album);
|
||
|
Info.Artist = Marshal.PtrToStringUni(tmp.Artist);
|
||
|
Info.Comment = Marshal.PtrToStringUni(tmp.Comment);
|
||
|
Info.Genre = Marshal.PtrToStringUni(tmp.Genre);
|
||
|
Info.Title = Marshal.PtrToStringUni(tmp.Title);
|
||
|
Info.Track = Marshal.PtrToStringUni(tmp.Track);
|
||
|
Info.Year = Marshal.PtrToStringUni(tmp.Year);
|
||
|
|
||
|
Info.AlbumArtist = Marshal.PtrToStringUni(tmp.AlbumArtist);
|
||
|
Info.Composer = Marshal.PtrToStringUni(tmp.Composer);
|
||
|
Info.OriginalArtist = Marshal.PtrToStringUni(tmp.OriginalArtist);
|
||
|
Info.Copyright = Marshal.PtrToStringUni(tmp.Copyright);
|
||
|
Info.Encoder = Marshal.PtrToStringUni(tmp.Encoder);
|
||
|
Info.Publisher = Marshal.PtrToStringUni(tmp.Publisher);
|
||
|
Info.BPM = tmp.BPM;
|
||
|
|
||
|
|
||
|
Info.Picture.PicturePresent = false;
|
||
|
if (fDecodePicture)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
if (tmp.PicturePresent == 1)
|
||
|
{
|
||
|
byte[] stream_data = new byte[System.Convert.ToInt32(tmp.PictureDataSize) + 1];
|
||
|
Marshal.Copy(tmp.PictureData, stream_data, 0, tmp.PictureDataSize);
|
||
|
Info.Picture.BitStream = new System.IO.MemoryStream();
|
||
|
Info.Picture.BitStream.Write(stream_data, 0, tmp.PictureDataSize);
|
||
|
Info.Picture.Bitmap = new Bitmap(Info.Picture.BitStream);
|
||
|
Info.Picture.PictureType = tmp.PictureType;
|
||
|
Info.Picture.Description = Marshal.PtrToStringUni(tmp.Description);
|
||
|
Info.Picture.PicturePresent = true;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Info.Picture.Bitmap = new Bitmap(1, 1);
|
||
|
}
|
||
|
return true;
|
||
|
|
||
|
}
|
||
|
catch
|
||
|
{
|
||
|
Info.Picture.PicturePresent = false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region Callback
|
||
|
public bool SetCallbackFunc(TCallbackFunc CallbackFunc, TCallbackMessage Messages, int UserData)
|
||
|
{
|
||
|
return zplay_SetCallbackFunc(objptr, CallbackFunc, Messages, UserData) == 1;
|
||
|
}
|
||
|
#endregion
|
||
|
|
||
|
#region Beat-Per-Minute
|
||
|
public int DetectBPM(TBPMDetectionMethod Method)
|
||
|
{
|
||
|
return zplay_DetectBPM(objptr, System.Convert.ToUInt32(Method));
|
||
|
}
|
||
|
|
||
|
public int DetectFileBPM(string FileName, TStreamFormat Format, TBPMDetectionMethod Method)
|
||
|
{
|
||
|
return zplay_DetectFileBPMW(objptr, FileName, System.Convert.ToInt32(Format), System.Convert.ToUInt32(Method));
|
||
|
}
|
||
|
#endregion
|
||
|
|
||
|
#region FFT Graph and FFT values
|
||
|
|
||
|
|
||
|
public bool GetFFTData(int FFTPoints, TFFTWindow FFTWindow, ref int HarmonicNumber, ref int[] HarmonicFreq, ref int[] LeftAmplitude, ref int[] RightAmplitude, ref int[] LeftPhase, ref int[] RightPhase)
|
||
|
{
|
||
|
return zplay_GetFFTData(objptr, FFTPoints, System.Convert.ToInt32((int)(FFTWindow)), ref HarmonicNumber, HarmonicFreq, LeftAmplitude, RightAmplitude, LeftPhase, RightPhase) == 1;
|
||
|
}
|
||
|
|
||
|
public bool DrawFFTGraphOnHDC(System.IntPtr hdc, int X, int Y, int Width, int Height)
|
||
|
{
|
||
|
return zplay_DrawFFTGraphOnHDC(objptr, hdc, X, Y, Width, Height) == 1;
|
||
|
}
|
||
|
|
||
|
public bool DrawFFTGraphOnHWND(System.IntPtr hwnd, int X, int Y, int Width, int Height)
|
||
|
{
|
||
|
return zplay_DrawFFTGraphOnHWND(objptr, hwnd, X, Y, Width, Height) == 1;
|
||
|
}
|
||
|
|
||
|
|
||
|
public bool SetFFTGraphParam(TFFTGraphParamID ParamID, int ParamValue)
|
||
|
{
|
||
|
return zplay_SetFFTGraphParam(objptr, System.Convert.ToInt32((int)(ParamID)), ParamValue) == 1;
|
||
|
}
|
||
|
|
||
|
public int GetFFTGraphParam(TFFTGraphParamID ParamID)
|
||
|
{
|
||
|
return zplay_GetFFTGraphParam(objptr, System.Convert.ToInt32((int)(ParamID)));
|
||
|
}
|
||
|
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region Center and side cut
|
||
|
|
||
|
public bool StereoCut(bool Enable, bool OutputCenter, bool BassToSides)
|
||
|
{
|
||
|
int fOutputCenter = 0;
|
||
|
int fBassToSides = 0;
|
||
|
int fEnable = 0;
|
||
|
if (OutputCenter)
|
||
|
{
|
||
|
fOutputCenter = 1;
|
||
|
}
|
||
|
if (BassToSides)
|
||
|
{
|
||
|
fBassToSides = 1;
|
||
|
}
|
||
|
if (Enable)
|
||
|
{
|
||
|
fEnable = 1;
|
||
|
}
|
||
|
return zplay_StereoCut(objptr, fEnable, fOutputCenter, fBassToSides) == 1;
|
||
|
}
|
||
|
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region Channel mixing
|
||
|
|
||
|
|
||
|
public bool MixChannels(bool Enable, uint LeftPercent, uint RightPercent)
|
||
|
{
|
||
|
if (Enable)
|
||
|
{
|
||
|
return zplay_MixChannels(objptr, 1, LeftPercent, RightPercent) == 1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return zplay_MixChannels(objptr, 0, LeftPercent, RightPercent) == 1;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
#endregion
|
||
|
|
||
|
#region VU Data
|
||
|
|
||
|
public void GetVUData(ref int LeftChannel, ref int RightChannel)
|
||
|
{
|
||
|
zplay_GetVUData(objptr, ref LeftChannel, ref RightChannel);
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region Status and Info
|
||
|
|
||
|
public void GetStreamInfo(ref TStreamInfo info)
|
||
|
{
|
||
|
TStreamInfo_Internal tmp = new TStreamInfo_Internal();
|
||
|
zplay_GetStreamInfoW(objptr, ref tmp);
|
||
|
info.Bitrate = tmp.Bitrate;
|
||
|
info.ChannelNumber = tmp.ChannelNumber;
|
||
|
info.SamplingRate = tmp.SamplingRate;
|
||
|
info.VBR = tmp.VBR;
|
||
|
info.Length = tmp.Length;
|
||
|
info.Description = Marshal.PtrToStringUni(tmp.Description);
|
||
|
}
|
||
|
|
||
|
public void GetStatus(ref TStreamStatus status)
|
||
|
{
|
||
|
zplay_GetStatus(objptr, ref status);
|
||
|
}
|
||
|
|
||
|
public void GetDynamicStreamLoad(ref TStreamLoadInfo StreamLoadInfo)
|
||
|
{
|
||
|
zplay_GetDynamicStreamLoad(objptr, ref StreamLoadInfo);
|
||
|
}
|
||
|
#endregion
|
||
|
|
||
|
#region Wave Out and Wave In Info
|
||
|
|
||
|
public int EnumerateWaveOut()
|
||
|
{
|
||
|
return zplay_EnumerateWaveOut(objptr);
|
||
|
}
|
||
|
|
||
|
public bool GetWaveOutInfo(uint Index, ref TWaveOutInfo Info)
|
||
|
{
|
||
|
TWaveOutInfo_Internal tmp = new TWaveOutInfo_Internal();
|
||
|
if (zplay_GetWaveOutInfoW(objptr, Index, ref tmp) == 0)
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
Info.Channels = tmp.Channels;
|
||
|
Info.DriverVersion = tmp.DriverVersion;
|
||
|
Info.Formats = tmp.Formats;
|
||
|
Info.ManufacturerID = tmp.ManufacturerID;
|
||
|
Info.ProductID = tmp.ProductID;
|
||
|
Info.Support = tmp.Support;
|
||
|
Info.ProductName = Marshal.PtrToStringUni(tmp.ProductName);
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
public bool SetWaveOutDevice(uint Index)
|
||
|
{
|
||
|
return zplay_SetWaveOutDevice(objptr, Index) == 1;
|
||
|
}
|
||
|
|
||
|
|
||
|
public int EnumerateWaveIn()
|
||
|
{
|
||
|
return zplay_EnumerateWaveIn(objptr);
|
||
|
}
|
||
|
|
||
|
public bool GetWaveInInfo(uint Index, ref TWaveInInfo Info)
|
||
|
{
|
||
|
TWaveInInfo_Internal tmp = new TWaveInInfo_Internal();
|
||
|
if (zplay_GetWaveInInfoW(objptr, Index, ref tmp) == 0)
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
Info.Channels = tmp.Channels;
|
||
|
Info.DriverVersion = tmp.DriverVersion;
|
||
|
Info.Formats = tmp.Formats;
|
||
|
Info.ManufacturerID = tmp.ManufacturerID;
|
||
|
Info.ProductID = tmp.ProductID;
|
||
|
Info.ProductName = Marshal.PtrToStringUni(tmp.ProductName);
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
public bool SetWaveInDevice(uint Index)
|
||
|
{
|
||
|
return zplay_SetWaveInDevice(objptr, Index) == 1;
|
||
|
}
|
||
|
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
|
||
|
#region Settings
|
||
|
|
||
|
public int SetSettings(TSettingID SettingID, int Value)
|
||
|
{
|
||
|
return zplay_SetSettings(objptr, (int)SettingID, Value);
|
||
|
}
|
||
|
|
||
|
|
||
|
public int GetSettings(TSettingID SettingID)
|
||
|
{
|
||
|
return zplay_GetSettings(objptr, (int)SettingID);
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|