Merge pull request #50 from rotvel/feature/audiotype-support

Add support for more audio types
This commit is contained in:
dkanada 2020-07-23 14:52:43 +09:00 committed by GitHub
commit 87dd7079e4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 312 additions and 8 deletions

View file

@ -14,6 +14,7 @@ import com.dkanada.gramophone.App;
import com.dkanada.gramophone.R;
import com.dkanada.gramophone.model.Album;
import com.dkanada.gramophone.model.Artist;
import com.dkanada.gramophone.model.DirectPlayCodec;
import com.dkanada.gramophone.model.Genre;
import com.dkanada.gramophone.model.Song;
@ -26,25 +27,44 @@ import java.util.Locale;
public class MusicUtil {
public static Uri getSongFileUri(Song song) {
StringBuilder builder = new StringBuilder();
PreferenceUtil preferenceUtil = PreferenceUtil.getInstance(App.getInstance());
StringBuilder builder = new StringBuilder(256);
ApiClient apiClient = App.getApiClient();
builder.append(apiClient.getApiUrl());
builder.append("/Audio/");
builder.append(song.id);
builder.append("/universal");
builder.append("?UserId=" + apiClient.getCurrentUserId());
builder.append("&DeviceId=" + apiClient.getDeviceId());
builder.append("?UserId=").append(apiClient.getCurrentUserId());
builder.append("&DeviceId=").append(apiClient.getDeviceId());
// web client maximum is 12444445 and 320kbps is 320000
builder.append("&MaxStreamingBitrate=" + PreferenceUtil.getInstance(App.getInstance()).getMaximumBitrate());
builder.append("&Container=flac");
builder.append("&MaxStreamingBitrate=").append(preferenceUtil.getMaximumBitrate());
boolean containerAdded = false;
for (DirectPlayCodec directPlayCodec : preferenceUtil.getDirectPlayCodecs()) {
if (directPlayCodec.selected) {
if (!containerAdded) {
builder.append("&Container=");
containerAdded = true;
}
builder.append(directPlayCodec.value).append(',');
}
}
if (containerAdded) {
// remove last comma
builder.deleteCharAt(builder.length() - 1);
}
builder.append("&TranscodingContainer=ts");
builder.append("&TranscodingProtocol=hls");
// preferred codec when transcoding
builder.append("&AudioCodec=" + PreferenceUtil.getInstance(App.getInstance()).getTranscodeCodec());
builder.append("&api_key=" + apiClient.getAccessToken());
builder.append("&AudioCodec=").append(preferenceUtil.getTranscodeCodec());
builder.append("&api_key=").append(apiClient.getAccessToken());
Log.i(MusicUtil.class.getName(), "playing audio: " + builder);
return Uri.parse(builder.toString());

View file

@ -4,6 +4,7 @@ import android.content.Context;
import android.content.SharedPreferences;
import android.os.Build;
import android.preference.PreferenceManager;
import androidx.annotation.StyleRes;
import com.google.gson.Gson;
@ -14,14 +15,18 @@ import com.dkanada.gramophone.R;
import com.dkanada.gramophone.helper.sort.SortMethod;
import com.dkanada.gramophone.helper.sort.SortOrder;
import com.dkanada.gramophone.model.CategoryInfo;
import com.dkanada.gramophone.model.DirectPlayCodec;
import com.dkanada.gramophone.ui.fragments.player.NowPlayingScreen;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public final class PreferenceUtil {
public static final String CATEGORIES = "library_categories";
public static final String DIRECT_PLAY_CODECS = "direct_play_codecs";
public static final String MAXIMUM_LIST_SIZE = "maximum_list_size";
public static final String REMEMBER_LAST_TAB = "remember_last_tab";
public static final String LAST_TAB = "last_tab";
@ -417,4 +422,37 @@ public final class PreferenceUtil {
defaultCategories.add(new CategoryInfo(CategoryInfo.Category.PLAYLISTS, true));
return defaultCategories;
}
public List<DirectPlayCodec> getDirectPlayCodecs() {
DirectPlayCodec.Codec[] codecs = DirectPlayCodec.Codec.values();
Set<String> selectedCodecNames = new HashSet<>();
for (DirectPlayCodec.Codec codec : codecs) {
selectedCodecNames.add(codec.name());
}
selectedCodecNames = mPreferences.getStringSet(DIRECT_PLAY_CODECS, selectedCodecNames);
ArrayList<DirectPlayCodec> directPlayCodecs = new ArrayList<>();
for (DirectPlayCodec.Codec codec : codecs) {
String name = codec.name();
boolean selected = selectedCodecNames.contains(name);
directPlayCodecs.add(new DirectPlayCodec(name, codec.title, codec.value, selected));
}
return directPlayCodecs;
}
public void setDirectPlayCodecs(List<DirectPlayCodec> directPlayCodecs) {
Set<String> codecNames = new HashSet<>();
for (DirectPlayCodec directPlayCodec : directPlayCodecs) {
if (directPlayCodec.selected) {
codecNames.add(directPlayCodec.codecName);
}
}
final SharedPreferences.Editor editor = mPreferences.edit();
editor.putStringSet(DIRECT_PLAY_CODECS, codecNames);
editor.apply();
}
}