2017-05-13 16 views
2

私はlibgdxライブラリとアンドロイドアプリでmp3の歌をロードしたいが、私は働く方法を見つけられない。私はどのようにこの "問題"のプログラムを知りません。libGDXでAndroidで音楽を読み込む方法は?

アセットマネージャはmp3ソングの作品のクラスですか?

私もこの方法を見つけました:

Gdx.files.newMusic(file); 

が、Androidのドント作業やデスクトップで同じコードの仕事を。

更新: 解析方法

public void parse() { 
     JsonReader reader = new JsonReader(); 
     JsonValue rootElem = reader.parse(file); 
     JsonValue songDataElem = rootElem.get("songData"); 
     JsonValue notesDataElem = songDataElem.get("notes"); 
     JsonValue barsDataElem = songDataElem.get("bars"); 
     JsonValue keysDataElem = songDataElem.get("keys"); 
     JsonValue audioDataElem = rootElem.get("audioData"); 

     NoteData[] notes = new NoteData[notesDataElem.size]; 
     for (int i = 0; i < notesDataElem.size; i++) { 
      notes[i] = new NoteData(notesDataElem.get(i).getInt("pitch"), notesDataElem.get(i).getFloat("time")); 
     } 
     BarData[] bars = new BarData[barsDataElem.size]; 
     for (int i = 0; i < barsDataElem.size; i++) { 
      BarData bar = new BarData(barsDataElem.get(i).getFloat("time")); 
      bars[i] = bar; 
     } 
     char[] keys = new char[keysDataElem.size]; 
     for (int i = 0; i < keysDataElem.size; i++) { 
      keys[i] = keysDataElem.getChar(i); 
     } 
     float tempo = songDataElem.getFloat("tempo"); 
     String file = audioDataElem.getString("file"); 
     songData = new SongData(notes, bars, keys, tempo); 
     parsed = true; 
    } 

とコンストラクタ:メインクラスで

public SongFile(FileHandle file) { 
    manager = new AssetManager(new ExternalFileHandleResolver()); 
    file = Gdx.files.external(file.path());//30 
    if (file.exists()) { 
     manager.load(file.path(), Music.class); 
     manager.finishLoading(); 
     music = manager.get(file.path(), Music.class); 
     music.setLooping(true); 
     music.play(); 
    } 

} 

String file = "/storage/emulated/0/download/prueba.mp3"; 
SongFile songFile = new SongFile(new FileHandle(file)); 
songFile.parse(); 
song = songFile.makeSong(); 
+1

これはおそらくコードについてではなく、LibGDXに入る方法です。ファイルの拡張子、サンプルレート、その他の属性を確認してください。 LibGDXのいくつかのファイルを再生していないアンドロイドに関するいくつかのスレッドがあります。私にも起こりましたが、しばらく私はLibGDXを使用していたので、正確に覚えています。 – Thracian

+0

@ fatih-ozcanは、そのサンプルレートとフォーマットがそのアンドロイドでサポートされているかどうかを確認しますか?と思う特定のフォルダにのみファイルを保持する必要があります。たぶん、apropular libGdx githubプロジェクトの音楽ファイルを使ってテストしてみてください。うまくいきます。 – tgkprog

+0

はい、ファイルの属性を確認する必要があります。ここやLibGDXフォーラムにもいくつかのスレッドがあります。それはAssetManager、またはあなたが置いたフォルダとは何の関係もありません。彼らは直接資産フォルダの内側にすることができます。しかし、物事をきちんと保つために、私はそれらをアセットフォルダのオーディオフォルダの中に入れておく。 – Thracian

答えて

2

我々は次の操作を行うことができます音楽のインスタンスをロードするには:

Music music = Gdx.audio.newMusic(Gdx.files.internal("data/mymusic.mp3")); 

アセットを適切な方法で管理できるようにAssetManagerを使用してMusicを読み込むこともできます。

AssetManager manager = new AssetManager(); 
manager.load("data/mymusic.mp3", Music.class); 
manager.finishLoading(); 

アセットが正常に読み込まれた後に音楽を入手できます。

Music music = manager.get("data/mymusic.mp3", Music.class); 

様々なプレイするために使用することができます再生attributes音楽

music.play(); 

あなたは、Android上でいくつかの特定の問題をしている場合、このthreadをチェックしてください。 Soundは、Androidデバイスでは再生されないが、デスクトップでは再生されることがあります。

EDITはAndroidMainfest.xmlファイルにこの権限を追加します。

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

は、ファイルIOに関連するすべての作業を進める前に、ユーザが実行時に許可を取っていない場合、それはAndroidのための明確なごtargetSdkVersionが23未満であることを確認してください。現在のtargetSdkVersionについては、アンドロイドbuild.gradleのdefaultConfigを確認してください(存在しない場合)、AndroidManifest.xmlファイルをチェックしてください。

外部宛先は、ビデオ、音楽、およびすべてのような独自のデータを保持するアドレスです。

Gdx.files.getExternalStoragePath()このC:\Users\Abhishek Aryan\

/storage/emulated/0/のようにデスクトップ上のAndroidでのパス/storage/emulated/0/とユーザーディレクトリを与えるには、作り付けのストレージを表し、ダウンロードは作り付けの記憶装置の内部にあります。

if(Gdx.app.type==Application.ApplicationType.Android) { 

    var assetManager = AssetManager(ExternalFileHandleResolver()) 
    var fileHandle = Gdx.files.external("/Download/WorldmapTheme.mp3") 

    if (fileHandle.exists()) { 

     assetManager.load(fileHandle.path(), Music::class.java) 
     assetManager.finishLoading(); 

     var music = assetManager.get<Music>(fileHandle.path()) 
     music.setLooping(true) 
     music.play() 
    } 
} 

EDIT 2

このコードは、うまくいけば、これはSongFileApplicationListener

if(Gdx.app.getType()== Application.ApplicationType.Android) { 
    String file = "/download/prueba.mp3"; 
    FileHandle fileHandle = Gdx.files.external(file); 
    SongFile songFile = new SongFile(fileHandle); 
    songFile.parse(); 
    song = songFile.makeSong(); 
} 

コンストラクタのcreate()方法内部もし

//コードのために働くだろう、私のために正常に動作クラス

public class SongFile { 

    AssetManager manager; 
    Music music; 

    public SongFile(FileHandle file){ 
     manager = new AssetManager(new ExternalFileHandleResolver()); 
     if (file.exists()) { 
      manager.load(file.path(), Music.class); 
      manager.finishLoading(); 
      music = manager.get(file.path(), Music.class); 
      music.setLooping(true); 
      music.play(); 
     } 
    } 

    ... 
} 
+0

これを説明する良いgithubプロジェクトを指摘できますか? AssetManagerを一度だけ行う方法を知ることができます。 (2)そして私のために、Googleの支払いを実装する方法を示すコメントの1つ以上はここにありますか? @ abhishek-aryan – tgkprog

+0

google有料の実装はこの質問とは異なるトピックですので、同じトピックについて別のトピックを作成する必要があります。 – Aryan

+0

私は 'Music'を' AssetManager'で使う方法を実証しているGitHubプロジェクトを知らないので、それを簡単に使うことができます。ほとんどのコードは答えていますし、[AssetManager](https:// github .com/libgdx/libgdx/wiki/Managing-your-assets)を参照してください。さらに問題がある場合は、ここでお尋ねください。 – Aryan

関連する問題