Ejemplo n.º 1
0
Chord Chord::getTransposedVersion(int semitones) const
{
    if (semitones == 0)
        return Chord(getChordText(), getBeat());
    QString newRootKey = getTransposedRoot(getRootKey(), semitones);
    QString newChordText = newRootKey;

    if (hasLettersAfterRoot())
        newChordText += getLettersAfterRoot();

    if (hasLastPart())
        newChordText += getLastPart();

    if (hasBassInversion()) {
        QString newBassInversionRoot = getTransposedRoot(getBassInversion(), semitones);
        newChordText += "/" + newBassInversionRoot;
    }

    return Chord(newChordText, getBeat());
}
Ejemplo n.º 2
0
void MapGenerator::generateMap(const char* songname)
{
	AudioEngine::getInstance()->createNRT(songname);
	AudioEngine::getInstance()->playNRT();
	std::string mapname = songname;
	int type = 0;
	for (int i = 1; i <= 9; i++)
		for (int j = 1; j <= 9; j++)
			UseMap[i][j] = 0;

	mapname = FileUtils::getInstance()->getWritablePath() + mapname.substr(mapname.find_last_of('/') + 1, mapname.find_last_of('.') - mapname.find_last_of('/') - 1) + ".gnm";
	fout = fopen(mapname.c_str(), "w");//打开测试谱面
	while (AudioEngine::getInstance()->isPlaying())
	{
		AudioEngine::getInstance()->update();
		for (int i = 1; i <= 9; i++)
			for (int j = 1; j <= 9; j++)
				if (UseMap[i][j] > 0)
					UseMap[i][j]--;
		beatBar = getBeat();
		if (beatBar<0)
			lastBeatBar = -99;
		else if (beatTick - lastbeatTick > BEAT_MINLASTTIME)//过了最小生成时间
		{
			if (beatBar == lastBeatBar)//beat频域完全相同则是长按
			{
				type = 1;
			}
			else if (beatBar <= lastBeatBar + 3 && beatBar >= lastBeatBar - 3)//频域差别不大则是滑动
			{
				type = 2;
			}
			else//否则点击
			{
				writeNoteline(type, beatTick - lastbeatTick);
				log("%d %d", beatTick, beatBar);
				lastbeatTick = beatTick;
				type = 0;
			}
			lastBeatBar = beatBar;
		}
	}
	fclose(fout);
}