当前位置: 首页>>代码示例>>C++>>正文


C++ MarSystemManager::create方法代码示例

本文整理汇总了C++中MarSystemManager::create方法的典型用法代码示例。如果您正苦于以下问题:C++ MarSystemManager::create方法的具体用法?C++ MarSystemManager::create怎么用?C++ MarSystemManager::create使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在MarSystemManager的用法示例。


在下文中一共展示了MarSystemManager::create方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: connect

Mapper::Mapper()
{
  // Create the MarSystem network for playback.
  MarSystemManager mng;

  m_system = mng.create("Series", "pnet_");
  m_system->addMarSystem(mng.create("SoundFileSource", "src"));
  m_system->addMarSystem(mng.create("Gain", "gain"));
  m_system->addMarSystem(mng.create("AudioSink", "dest"));
  m_system->updControl("mrs_natural/inSamples", 2048);

  m_system->linkControl("mrs_bool/hasData", "SoundFileSource/src/mrs_bool/hasData");

  // Create a handy Qt wrapper for the MarSystem.
  m_qsystem = new MarsyasQt::System(m_system);

  // Get handles for all the controls.
  m_fileControl = m_qsystem->control("SoundFileSource/src/mrs_string/filename");
  m_gainControl = m_qsystem->control("Gain/gain/mrs_real/gain");
  m_repetitionControl = m_qsystem->control("SoundFileSource/src/mrs_real/repetitions");
  m_positionControl = m_qsystem->control("SoundFileSource/src/mrs_natural/pos");
  m_sizeControl = m_qsystem->control("SoundFileSource/src/mrs_natural/size");
  m_outputSampleRateControl = m_qsystem->control("SoundFileSource/src/mrs_real/osrate");
  m_initAudioControl = m_qsystem->control("AudioSink/dest/mrs_bool/initAudio");

  connect( &m_controlEmitTimer, SIGNAL(timeout()), this, SLOT(emitControlValues()) );
}
开发者ID:Amos-zq,项目名称:marsyas,代码行数:27,代码来源:Mapper.cpp

示例2: while

void
toy_with_arff_in_out(mrs_string in_name, mrs_string out_name)
{
    MarSystemManager mng;

    MarSystem *net = mng.create("Series", "net");
    net->addMarSystem(mng.create("WekaSource", "src"));
    net->addMarSystem(mng.create("WekaSink", "dest"));

    net->updControl("WekaSource/src/mrs_string/filename", in_name);

    net->updControl("WekaSink/dest/mrs_natural/nLabels",
                    net->getControl("WekaSource/src/mrs_natural/nClasses"));
    net->updControl("WekaSink/dest/mrs_string/labelNames",
                    net->getControl("WekaSource/src/mrs_string/classNames"));
    net->updControl("WekaSink/dest/mrs_bool/regression",
                    net->getControl("WekaSource/src/mrs_bool/regression"));

    // must happen after setting the above controls
    net->updControl("WekaSink/dest/mrs_string/filename", out_name);

    while ( !net->getctrl("WekaSource/src/mrs_bool/done")->to<mrs_bool>() )
    {
        net->tick();
    }
    delete net;
}
开发者ID:murraymeehan,项目名称:marsyas,代码行数:27,代码来源:wreckBeach.cpp

示例3: carfac_setup

void carfac_setup(string inAudioFileName)
{
  cout << "carfac_hacking" << endl;
  cout << "inAudioFileName=" << inAudioFileName << endl;


  // create playback network with source-gain-dest
  // MarSystem* net = mng.create("Series", "net");
  net = mng.create("Series", "net");

  if (audioopt_) {
    cout << "##############################la" << endl;
    net->addMarSystem(mng.create("AudioSource", "src"));
  } else {
    net->addMarSystem(mng.create("SoundFileSource", "src"));
    net->updControl("SoundFileSource/src/mrs_string/filename",inAudioFileName);
  }

  net->addMarSystem(mng.create("AudioSink", "dest"));

  MarSystem* carfac = mng.create("CARFAC", "carfac");
  net->addMarSystem(carfac);
  cout << "########## CARFAC ############" << endl;
  // cout << carfac->toString();
  cout << "##############################" << endl;


  net->updControl("AudioSink/dest/mrs_bool/initAudio", true);
  net->updControl("mrs_natural/inSamples", 512);

  // cout << net->getctrl("mrs_realvec/processedData")->to<mrs_realvec>() << endl;
  // }

}
开发者ID:sanyaade-teachings,项目名称:marsyas,代码行数:34,代码来源:carfac_hacking.cpp

示例4: Plugin

MarsyasBExtractRolloff::MarsyasBExtractRolloff(float inputSampleRate) :
  Plugin(inputSampleRate),
  m_stepSize(0),
  m_previousSample(0.f),
  m_network(0)
{
  MarSystemManager mng;
  // Overall extraction and classification network
  m_network = mng.create("Series", "mainNetwork");

  // Build the overall feature calculation network
  MarSystem *featureNetwork = mng.create("Series", "featureNetwork");

  // Add a realvec as the source
  featureNetwork->addMarSystem(mng.create("RealvecSource", "src"));

  // Convert the data to mono
  featureNetwork->addMarSystem(mng.create("Stereo2Mono", "m2s"));

  // Setup the feature extractor
  MarSystem* featExtractor = mng.create("TimbreFeatures", "featExtractor");
  featExtractor->updctrl("mrs_string/enableSPChild", "Rolloff/rlf");
  featureNetwork->addMarSystem(featExtractor);

  // Add the featureNetwork to the main network
  m_network->addMarSystem(featureNetwork);
}
开发者ID:Amos-zq,项目名称:marsyas,代码行数:27,代码来源:MarsyasBExtractRolloff.cpp

示例5: carfac_testing

void carfac_testing(string inAudioFileName)
{
  cout << "carfac_testing" << endl;
  cout << "inAudioFileName=" << inAudioFileName << endl;

  MarSystemManager mng;

  // Create the network
  MarSystem* net = mng.create("Series", "net");
  net->addMarSystem(mng.create("SoundFileSource", "src"));

  MarSystem* carfac = mng.create("CARFAC", "carfac");
  net->addMarSystem(carfac);

  net->addMarSystem(mng.create("Gain", "gain"));

  net->updControl("SoundFileSource/src/mrs_string/filename",inAudioFileName);
  net->updControl("mrs_natural/inSamples",512);

  // Just print the coefficients
  carfac->updControl("mrs_bool/printcoeffs",true);
  carfac->updControl("mrs_bool/printstate",false);
  cout << carfac->toString();

  // Just print the state
  carfac->updControl("mrs_bool/printcoeffs",false);
  carfac->updControl("mrs_bool/printstate",true);
  for (int i = 0; i < 5; i++) {
    net->tick();
    cout << "@@@@@@@@@@@@@@@@@@@@@@@@ "<< i + 1 << " @@@@@@@@@@@@@@@@@@@@@@@@" << endl;
    cout << carfac->toString();

  }
}
开发者ID:Amos-zq,项目名称:marsyas,代码行数:34,代码来源:carfac_testing.cpp

示例6: newMidiInfo

void newMidiInfo()
{
    /*
	  This function describes using the MidiInput object and MarControlPointers 
	  to read midi controls in a loop. The disadvantage of this approach is that
	  MidiINput will only return the last midi value between buffers. Change the 
	  buffer size you would like more precision and throughput for midi messages. 
    */
    MarSystemManager mng;
    MarSystem* series = mng.create("Series", "series");
    series->addMarSystem(mng.create("AudioSource","src"));
    series->addMarSystem(mng.create("MidiInput","midiin"));

    series->updctrl("mrs_real/israte", 44100.0);
    series->updctrl("mrs_real/osrate", 44100.0);
    // to change how often marsyas grabs messages change the buffersize
    series->updctrl("AudioSource/src/mrs_natural/bufferSize", 64);
    series->updctrl("AudioSource/src/mrs_bool/initAudio",true);
    series->updctrl("MidiInput/midiin/mrs_bool/initmidi",true);

    MarControlPtr b1 = series->getctrl("MidiInput/midiin/mrs_natural/byte1");
    MarControlPtr b2 = series->getctrl("MidiInput/midiin/mrs_natural/byte2");
    MarControlPtr b3 = series->getctrl("MidiInput/midiin/mrs_natural/byte3");

    while(1) 
    {  
        const  mrs_natural& byte1 = b1->to<mrs_natural>(); 
        const  mrs_natural& byte2 = b2->to<mrs_natural>();   
        const  mrs_natural& byte3 = b3->to<mrs_natural>(); 

        std::cout <<  "Byte 1: " << byte1 << "    Byte 2: " << byte2 << "    Byte 3: " << byte3 << endl;

        series->tick();
    }
}
开发者ID:GanAlps,项目名称:Extracting-Features-from-audio,代码行数:35,代码来源:midiTest.cpp

示例7: run

// thread code
void* run(void * arg)
{
  
  thread_data* data = (thread_data*) arg;

  MarSystemManager mng;
  NetworkTCPSource* src = new NetworkTCPSource("src");
  
  MarSystem* featureNetwork = mng.create("Series", "featureNetwork");
  featureNetwork->addMarSystem(src);
  featureNetwork->addMarSystem(mng.create("AudioSink", "sink"));
  // featureNetwork->addMarSystem(mng.create("PlotSink", "psink"));
  
  featureNetwork->updctrl("NetworkTCPSource/src/mrs_natural/dataPort", data->dataPort);
  featureNetwork->updctrl("NetworkTCPSource/src/mrs_natural/controlsPort", data->controlsPort);

  featureNetwork->linkctrl("mrs_bool/hasData", "NetworkTCPSource/src/mrs_bool/hasData");
  
  src->refresh();
  
  mrs_natural wc = 0;
  
  mrs_real* controls = 0;
  
  mrs_natural onSamples = featureNetwork->getctrl("mrs_natural/onSamples")->to<mrs_natural>();
  
  
  // start the network 
  while ( featureNetwork->getctrl("mrs_bool/hasData")->to<mrs_bool>() ) {

	try {
		
		controls = featureNetwork->recvControls();	
      		if ( controls != 0 ) {
			
			// get some reference controls, so if they have changed we update them
			mrs_natural inSamples = featureNetwork->getctrl("mrs_natural/inSamples")->to<mrs_natural>();
			mrs_natural inObservations = featureNetwork->getctrl("mrs_natural/inObservations")->to<mrs_natural>();
			mrs_real israte = featureNetwork->getctrl("mrs_real/israte")->to<mrs_real>();
			
			if ( (mrs_natural)controls[1] != inSamples || (mrs_natural)controls[2] != inObservations 
					|| controls[3] != israte ) {
			
				featureNetwork->updctrl("mrs_natural/inSamples", (mrs_natural)controls[1]);
				featureNetwork->updctrl("mrs_natural/inObservations", (mrs_natural)controls[2]);
				featureNetwork->updctrl("mrs_real/israte", controls[3]);
			}
      		}
		
		featureNetwork->tick(); // everything happens here 
	} catch ( SocketException e ) {
  		cerr << "Played " << wc << " slices of " << onSamples << " samples" << endl;
		pthread_exit(NULL);
	}
 	wc++;
   }
  cout << "played - " << wc << " slices of " << onSamples << " samples" << endl;
 
  pthread_exit( NULL );
}
开发者ID:GanAlps,项目名称:Extracting-Features-from-audio,代码行数:61,代码来源:collector.cpp

示例8: MarSystemQtWrapper

MarBackend::MarBackend()
{
// make a typical Marsyas network:
	MarSystemManager mng;
	playbacknet = mng.create("Series", "playbacknet");
	playbacknet->addMarSystem(mng.create("SoundFileSource", "src"));
	playbacknet->addMarSystem(mng.create("Gain", "gain"));
	playbacknet->addMarSystem(mng.create("AudioSink", "dest"));
	playbacknet->updctrl("AudioSink/dest/mrs_bool/initAudio", true);

// wrap it up to make it pretend to be a Qt object:
	mrsWrapper = new MarSystemQtWrapper(playbacknet);
	mrsWrapper->start();

// make these pomrs_naturalers so that we can mrs_naturalerface with the network
// in a thread-safe manner:
	filenamePtr = mrsWrapper->getctrl("SoundFileSource/src/mrs_string/filename");
	gainPtr = mrsWrapper->getctrl("Gain/gain/mrs_real/gain");
	positionPtr = mrsWrapper->getctrl("SoundFileSource/src/mrs_natural/pos");

// demonstrates information flow:  Marsyas->Qt.
	QTimer *timer = new QTimer(this);
	connect(timer, SIGNAL(timeout()), this, SLOT(getBackendPosition()));
	timer->start(1000);
}
开发者ID:Amos-zq,项目名称:marsyas,代码行数:25,代码来源:backend.cpp

示例9: getFileLengthForWaveform

int getFileLengthForWaveform(string inFileName, int windowSize_, double& min, double& max) {

	MarSystemManager mng;

	// A series to contain everything
	MarSystem* net = mng.create("Series", "net");
	
	// The sound file
	net->addMarSystem(mng.create("SoundFileSource", "src"));
	net->addMarSystem(mng.create("Stereo2Mono", "s2m"));
	net->addMarSystem(mng.create("ShiftInput", "si"));
	net->updControl("SoundFileSource/src/mrs_string/filename", inFileName);


	mrs_real srate = net->getControl("SoundFileSource/src/mrs_real/osrate")->to<mrs_real>();
	if ((position_ == 0) && (start_ != 0.0))
		position_ = (mrs_natural) (srate * start_);
	
	if ((ticks_ == -1) && (length_ != -1.0))
		ticks_ = (mrs_natural) ((length_ * srate) / windowSize_);
	
	net->updControl("SoundFileSource/src/mrs_natural/pos", position_);
	net->updControl("SoundFileSource/src/mrs_natural/inSamples", hopSize_);
	net->updControl("ShiftInput/si/mrs_natural/winSize", windowSize_);
	
	// Compute the AbsMax of this window
	net->addMarSystem(mng.create("AbsMax","absmax"));

	realvec processedData;

	int length = 0;

	while (net->getctrl("SoundFileSource/src/mrs_bool/hasData")->to<mrs_bool>() 
		   && (ticks_ == -1 || length < ticks_))  {
		net->tick();
		length++;

		processedData = net->getctrl("mrs_realvec/processedData")->to<mrs_realvec>();
		if (processedData(0) < min)
			min = processedData(0);
		if (processedData(0) > max)
			max = processedData(0);
	}


	delete net;

	if (verboseopt_) {
		cout << "length=" << length << endl;
		cout << "max=" << max << endl;
		cout << "min=" << min << endl;
	}

	return length;
}
开发者ID:murraymeehan,项目名称:marsyas,代码行数:55,代码来源:sound2png.cpp

示例10: value

void
distance_matrix()
{
  if (!wekafname_Set()) return;

  cout << "Distance matrix calculation using " << wekafname_ << endl;

  wekafname_  = inputdir_ + wekafname_;

  MarSystemManager mng;

  MarSystem* net = mng.create("Series", "net");

  MarSystem* wsrc = mng.create("WekaSource", "wsrc");
  net->addMarSystem(wsrc);
	//!!!: mode control
	net->updControl("WekaSource/wsrc/mrs_string/validationMode", "OutputInstancePair");
	net->updControl("WekaSource/wsrc/mrs_bool/normMaxMin", true);
  net->updControl("WekaSource/wsrc/mrs_string/filename", wekafname_);


	MarSystem* dmatrix = mng.create("SelfSimilarityMatrix", "dmatrix");
  dmatrix->addMarSystem(mng.create("Metric", "dmetric"));
  dmatrix->updControl("Metric/dmetric/mrs_string/metric", "euclideanDistance");
	//!!!: lmartins: normalization can only be applied when we have all feature vectors in memory...
	//... which is what we are trying to avoid here (having big realvecs in memory)...
  //dmatrix->updControl("mrs_string/normalize", "MinMax");
  net->addMarSystem(dmatrix);
	//!!!: mode control
	net->updControl("SelfSimilarityMatrix/dmatrix/mrs_natural/mode", 1); //FIXME: replace use of enum for strings?

	//link controls between WekaSource and SelfSimilarityMatrix
	net->linkControl("SelfSimilarityMatrix/dmatrix/mrs_natural/nInstances",
									 "WekaSource/wsrc/mrs_natural/nInstances");
	net->linkControl("WekaSource/wsrc/mrs_realvec/instanceIndexes",
									 "SelfSimilarityMatrix/dmatrix/mrs_realvec/instanceIndexes");

	ofstream oss;
	oss.open(distancematrix_.c_str());
	oss << "Marsyas-kea distance matrix" << endl;

	while(!net->getctrl("SelfSimilarityMatrix/dmatrix/mrs_bool/done")->to<bool>())
	{
		const mrs_realvec& idxs = net->getctrl("SelfSimilarityMatrix/dmatrix/mrs_realvec/instanceIndexes")->to<mrs_realvec>();
		oss << "(" << mrs_natural(idxs(0)) << "," << mrs_natural(idxs(1)) << ") = ";

		net->tick();

		const mrs_realvec& value = net->getctrl("mrs_realvec/processedData")->to<mrs_realvec>();
		oss << value(0) << endl;
	}

  oss << endl;
}
开发者ID:murraymeehan,项目名称:marsyas,代码行数:54,代码来源:kea.cpp

示例11:

int
main(int argc, const char **argv)
{	
    (void) argc;  // tells the compiler that we know that we're not
    (void) argv;  // using these two variables
	MRSDIAG("helloWorld.cpp - main");

	// cout << "This is probably the simplest Marsyas example code: it simply
	// generates a sine wave with a frequency of 440Hz and send it to the audio
	// card output. Simple press CTRL+C to quit." << endl;
	
	//we usualy start by creating a MarSystem manager 
	//to help us on MarSystem creation
	MarSystemManager mng;

	//create the network, which is a simple Series network with a sine wave
	//oscilator and a audio sink object to send the ausio data for playing 
	//in the sound card
	MarSystem *network = mng.create("Series", "network");
	network->addMarSystem(mng.create("SineSource", "src"));
	network->addMarSystem(mng.create("AudioSink", "dest"));
	network->addMarSystem(mng.create("SoundFileSink", "dest2"));

	//set the window (i.e. audio frame) size (in samples). Let's say, 256 samples.
	//This is done in the outmost MarSystem (i.e. the Series/network) because flow
	//controls (as is the case of inSamples) are propagated through the network.
	//Check the Marsyas documentation for mode details.
	network->updControl("mrs_natural/inSamples", 4096);
 

	//set oscilator frequency to 440Hz
	network->updControl("SineSource/src/mrs_real/frequency", 440.0);

	// set the sampling to 44100  - a safe choice in most configurations 
	network->updControl("mrs_real/israte", 44100.0);
	network->updControl("AudioSink/dest/mrs_bool/initAudio", true);
	network->updControl("SoundFileSink/dest2/mrs_string/filename", "helloworld.wav");
	

	//now it's time for ticking the network, 
	//ad aeternum (i.e. until the user quits by CTRL+C)
	while (1) 
	{
		network->tick();
	}

	//ok, this is not really necessary because we are quiting by CTRL+C, 
	//but it's a good habit anyway ;-)
	delete network;

	return(0);
}
开发者ID:abramhindle,项目名称:marsyas-fork,代码行数:52,代码来源:helloWorld.cpp

示例12: setup

void setup(string inAudioFileName)
{
  net = mng.create("Series", "net");

  net->addMarSystem(mng.create("SoundFileSource", "src"));
  net->addMarSystem(mng.create("Stereo2Mono", "s2m"));
  net->addMarSystem(mng.create("AudioSink/dest"));
  net->addMarSystem(mng.create("Rms", "rms"));
  net->updControl("SoundFileSource/src/mrs_string/filename",inAudioFileName);
  net->updControl("AudioSink/dest/mrs_bool/initAudio", true);
  cout << *net << endl;

}
开发者ID:sanyaade-teachings,项目名称:marsyas,代码行数:13,代码来源:helloglut.cpp

示例13:

JNIEXPORT jstring JNICALL
Java_com_example_marsyas_HelloMarsyas_setupMarsyasNetwork( JNIEnv* env, jobject obj )
{
  const static int numObservations = 5;
  const static int numSamples = 1;
  
  net = mng.create("Series", "net");
  net->addMarSystem(mng.create("RealvecSource", "src"));
  net->addMarSystem(mng.create("Gain", "gain"));

  net->updControl("Gain/gain/mrs_real/gain", 2.0);
  
  net->updControl("mrs_natural/inObservations", numObservations);
  net->updControl("mrs_natural/inSamples", numSamples);

}
开发者ID:GanAlps,项目名称:Extracting-Features-from-audio,代码行数:16,代码来源:hellomarsyas.cpp

示例14: sfplay

// Play a collection l of soundfiles
void sfplay(Collection l, mrs_natural offset, mrs_natural duration, mrs_real start, mrs_real length, mrs_real gain, mrs_real repetitions)
{
  MRSDIAG("sendUDP.cpp - sendUDP");
  int i;

  // Load first soundfile in collection
  string sfName = l.entry(0);
  SoundFileSource* src = new SoundFileSource("src");
  src->updctrl("mrs_string/filename", sfName);

  // create the network sink
  NetworkUDPSink* netSink = new NetworkUDPSink("netSink");

  // update controls if they are passed on cmd line...
  if ( host != EMPTYSTRING && port != 0 ) {
    netSink->updctrl("mrs_string/host", host);
    netSink->updctrl("mrs_natural/port", port);
  }
  if ( port != 0 && host == EMPTYSTRING ) {
    cerr << "Please specify a hostname." << endl;
    exit(1);
  } else if ( port == 0 && host != EMPTYSTRING ) {
    cerr << "Please specify a port." << endl;
    exit(1);
  }

  AudioSink* auSink = new AudioSink("auSink");

  // create playback network
  MarSystemManager mn;
  Series playbacknet("playbacknet");
  playbacknet.addMarSystem(src);
  playbacknet.addMarSystem(mn.create("Gain", "gt"));
  playbacknet.addMarSystem(auSink);
  playbacknet.addMarSystem(netSink);

  playbacknet.updctrl("AudioSink/auSink/mrs_natural/nChannels", 1);

  // output the MarSystem
  cout << playbacknet << endl;

  // refresh the connection...

  netSink->refresh();
  cout << "Connecting to host: " << netSink->getctrl("mrs_string/host");
  cout << " on port: " << netSink->getctrl("mrs_natural/port") << endl;


  // For each file in collection playback the sound
  for (i=0; i < l.size(); i++)
  {
    sfName = l.entry(i);
    sfplayFile(playbacknet, offset, duration,
               start, length, gain, repetitions, sfName );
  }
}
开发者ID:Amos-zq,项目名称:marsyas,代码行数:57,代码来源:sendUDP.cpp

示例15: record

void record(mrs_real length, mrs_real gain, string filename) 
{
    MarSystemManager mng;

    MarSystem* recordNet = mng.create("Series", "recordNet");
    MarSystem* asrc = mng.create("AudioSource", "asrc");
    MarSystem* dest = mng.create("SoundFileSink", "dest");

    recordNet->addMarSystem(asrc);
    recordNet->addMarSystem(dest);

    recordNet->updControl("mrs_natural/inSamples", 4096);
    recordNet->updControl("mrs_real/israte", sropt);
    recordNet->updControl("AudioSource/asrc/mrs_natural/nChannels", copt);
    recordNet->updControl("AudioSource/asrc/mrs_real/gain", gain);

    // Ready to initialize audio device 
    recordNet->updControl("AudioSource/asrc/mrs_bool/initAudio", true);

    recordNet->updControl("SoundFileSink/dest/mrs_string/filename", filename);

    mrs_real srate = recordNet->getctrl("mrs_real/israte")->to<mrs_real>();
    mrs_natural nChannels = recordNet->getctrl("AudioSource/asrc/mrs_natural/nChannels")->to<mrs_natural>();
    cout << "AudioSource srate =  " << srate << endl; 
    cout << "AudioSource nChannels = " << nChannels << endl;
    mrs_natural inSamples = recordNet->getctrl("mrs_natural/inSamples")->to<mrs_natural>();


    mrs_natural iterations = (mrs_natural)((srate * length) / inSamples);

    cout << "Iterations = " << iterations << endl;


    for (mrs_natural t = 0; t < iterations; t++) 
    {
        recordNet->tick();
    }




}
开发者ID:GanAlps,项目名称:Extracting-Features-from-audio,代码行数:42,代码来源:record.cpp


注:本文中的MarSystemManager::create方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。