com.amanotes.contentreader

2.1.7 • Public • Published

Amanotes Content Reader

Before you begin

Ama Content Reader is a free library from Amanotes that provides an efficient way to access Amanotes's content store.

How does it work?

Ama Content Reader helps you to read any content (bin files) of your game from Amanotes Content Store.

Setup Content Reader for your game

Add npm registry at the top of ./Packages/manifest.json, then add com.amanotes.contentreader package at the end of dependencies block. You can get lastest version here

{
    "scopedRegistries": [{
        "name": "Amanotes",
        "url": "https://registry.npmjs.org/",
        "scopes": [
            "com.amanotes"
        ]
    }],

    "dependencies": {
        // Others config goes here
        // ...

        "com.amanotes.contentreader" : "<lastest_version>"
    }
}

Getting license key for Content Reader

Contact your PO to set up and request for a unique key to use the content reader.

Init Content Reader for your game

Init Key: Init Content Reader in your very first init scene of your game with the license provided by Amanotes

/**
 * Project's ID needs to be matched with the license Bundle ID. (example ID: com.amanotes.rnd)
 * @param  licenseKey   provided by Amanotes, please contract Producer Owner from Amanotes to get your license
 */

ContentNoteGenerator.InitKey("U2FsdGVkX1+Z7MdUt2Ladzxcuy/mxlnwcSlyXGduG6uFioT/aWJ7rABeVeB8/3dEjnosq");

Read Notes Data

Import the package

using Amanotes.ContentReader;

To read notes datas, use GetNotes method in NoteGeneration

/**
 * @param  contentFile MIDI content in byte[] format
 * @param  difficulty Which difficulty to generate note for - equals to NoteTab
 * @param  OnComplete Will be call when load file completed
 * @param  OnError Will be call when load file error
 */
  
void ReadNotesData(byte[] contentFile)
{
    NoteGeneration.GetNotes(contentFile, NoteTab.Easy,
        (res,bpm) =>
        {
            Debug.Log("Total notes: " + res.Count);
            Debug.Log("bpm: " + bpm);
        },
        (err) =>
        {
            Debug.Log(err);
        });
}

Customize notes list

First, you should add three variables in your song config files for NoteTab, NoteLine and GridSnap. Bellow are the enum values for these variables:

NoteTab: SupperEasy, Easy, Medium,Hard, Expert NoteLine: All,LineOne,LineTwo,LineThree,LineFour,LineFive GridSnap: OneByFour, OneByEight, OneByTwelve, OneBySixTeen, OneByTwentyFour, OneByThirtyTwo, OneByFortyEight, OneBySixtyFour, OneByNinetySix

To filter notes datas, use Filter method in NoteGeneration.

/**
* Get notes only from specific line
*
* @param  notes get from function ReaderNoteData
* @param  NoteLine Which NoteLine to generate note for - this parameters should be retrieved from song configs
*/
  
List<NoteData> FilterNoteData(List<NoteData> notes)
{
    return NoteGeneration.Filter(notes, NoteLine.All);
}

/**
* Custom the density of notes
*
* @param  notes get from function ReaderNoteData
* @param  bpm get from function ReaderNoteData
* @param  GridSnap Which GridSnap to generate note for -  this parameters should be retrieved from song configs
*/
  
List<NoteData> TranslateNoteData(List<NoteData> notes, float bpm)
{
    return NoteGeneration.Translate(bpm, notes, GridSnap.OneByEight);
}

Example Content Reader

First, you need to install ExampleContentReader.unitypackage

public string license; //Content Reader licensing from Amanotes
public string fileName;
public NoteTab noteTab;
private float bpm;
List<NoteData> notesData;
void Start()
{
        /*Note 
        The Unity project's ID needs to be matched with the license Bundle ID. (example ID: com.amanotes.rnd)
        */
        ContentNoteGenerator.InitKey(license);
        ExampleReadContentFile();

        FileUtils f = new FileUtils();
        f.GetListFiles();
}

public void OnClickButtonRead()
{
    ExampleReadContentFile();
}


void ExampleReadContentFile()
{
    string contentPath = GetStreammingAssetsPath(fileName);
    WWW reader = new WWW(contentPath);
    while (!reader.isDone) { }
    notesData = ReaderNoteData(reader.bytes);
    Debug.Log("Total notes: " + notesData.Count);

    //Use noteTimes below to generate object for your game
    for (int i = 0; i < notesData.Count; i++)
    {
        float noteTime = notesData[i].timeAppear;
        Debug.Log("noteTime: " + noteTime);
    }
}

public string GetStreammingAssetsPath(string name)
{
#if UNITY_EDITOR_OSX
    return "file://"+Application.streamingAssetsPath + "/" + name;
#elif UNITY_EDITOR
    return Application.streamingAssetsPath + "/" + name;
#elif UNITY_ANDROID
    return Path.Combine("jar:file://" + Application.dataPath + "!/assets" , name);
#elif UNITY_IOS
    return Path.Combine(Application.dataPath + "/Raw" , name);
#else
    return Application.streamingAssetsPath + "/" + name;
#endif
}

//To read notes datas, use GetNotes method in NoteGeneration
/**
* @param  contentFile MIDI content in byte[] format
* @param  NoteTab Which NoteTab to generate note for
* @param  OnComplete Will be call when load file completed
* @param  OnError Will be call when load file error
*/
List<NoteData> ReaderNoteData(byte[] contentfile)
{
    List<NoteData> notes = new List<NoteData>();
    NoteGeneration.GetNotes(contentfile, NoteTab.SupperEasy,
    (res, bpm) =>
    {
        this.bpm = bpm;
        for (int i = 0; i < res.Count; i++)
        {
            notes.Add(res[i]);
            Debug.Log(notes[i].stringIndex);
        }
    },
    (err) =>
    {
        Debug.Log(err);
    });
    return notes;
}

Versioning

We use SemVer for versioning.

License

This project is licensed under the MIT License - see the LICENSE.md file for details

Readme

Keywords

Package Sidebar

Install

npm i com.amanotes.contentreader

Weekly Downloads

16

Version

2.1.7

License

MIT

Unpacked Size

2.34 MB

Total Files

10

Last publish

Collaborators

  • tech-amanotes