Example #1
0
	S98Player(const string &fileName) : started(false), ended(false) {

		auto buffer = utils::File(fileName).readAll();

		if(!song.OpenFromBuffer(&buffer[0], buffer.size()))
			throw player_exception();

		auto tagOffset = readmem<uint32_t>(&buffer[0x10]);

		if(tagOffset) {
			auto tagInfo = string((char*)&buffer[tagOffset + 5], buffer.size() - tagOffset - 5);
			LOGD(tagInfo);
			unordered_map<string, string> tags;
			for(const auto &line : utils::split(tagInfo, "\n")) {
				auto parts = utils::split(line, "=");
				if(parts.size() == 2) {
					wstring jis = utils::jis2unicode((uint8_t*)parts[1].c_str());
					string u = utils::utf8_encode(jis);
					tags[utils::toLower(parts[0])] = u;
					LOGD("%s=%s", parts[0], u);
				}
			}
			setMeta("sub_title", tags["title"],
					"composer", tags["artist"],
					"year", tags["year"],
					"copyright", tags["copyright"]);
		}

	}
Example #2
0
	USFPlayer(const std::string &fileName) {  	
		usf_state = new usf_loader_state;
		usf_state->emu_state = malloc( usf_get_state_size() );
		usf_clear( usf_state->emu_state );
		sample_rate = 0;
			
		char temp[fileName.length()+1];
		strcpy(temp, fileName.c_str());

		LOGD("Trying to load USF %s", string(temp));
					
		if ( psf_load( temp, &psf_file_system, 0x21, usf_loader, usf_state, usf_info, usf_state, 1 ) < 0 )
			throw player_exception();

		usf_set_hle_audio(usf_state->emu_state, 1);
		
		PSFFile psf { fileName };
		if(psf.valid()) {
			auto &tags = psf.tags();

			int seconds = psf.songLength();

			setMeta("composer", tags["artist"],
				"sub_title", tags["title"],
				"game", tags["game"],
				"format", "Nintendo 64",
				"length", seconds
			);
		}

		usf_set_compare( usf_state->emu_state, usf_state->enable_compare );
		usf_set_fifo_full( usf_state->emu_state, usf_state->enable_fifo_full );

		const char *err = usf_render(usf_state->emu_state, 0, 0, &sample_rate);
		if(err)
			LOGD("ERROR %s", err);
		LOGD("######### RATE %d", sample_rate);
		resampler_init();
		for(auto &r : resampler) {
			r = resampler_create();
			resampler_set_quality(r, RESAMPLER_QUALITY_CUBIC);
			resampler_set_rate(r,  (float)sample_rate / 44100.0);
			//resampler_set_rate(r,  44100.0 / (float)sample_rate);
			resampler_clear(r);
		}
	}
Example #3
0
	HivelyPlayer(const string &fileName)  {

		tune = hvl_LoadTune(fileName.c_str(), 44100, 0);

		if(!tune)
			throw player_exception();
		string msg;
		for(int i=1; i<tune->ht_InstrumentNr; i++) {
			char *name = tune->ht_Instruments[i].ins_Name;
			msg = msg + utils::utf8_encode(name) + " ";
		}

		setMeta(
			"title", tune->ht_Name,
			"message", msg, 
			"channels", tune->ht_Channels,
			"length", tune->ht_PlayingTime,
			"format", tune->ht_Version == 0xAA ? "AHX" : "Hively"
		);
	}