Mopidy: Butuh cara untuk menambahkan DAN MAINKAN trek

Dibuat pada 7 Apr 2020  ·  6Komentar  ·  Sumber: mopidy/mopidy

Saya sedang membangun UI web Jukebox yang akan digunakan oleh beberapa klien yang terhubung secara bersamaan. Mereka hanya memiliki kemampuan untuk mengantri lagu. Jika daftar lagu kosong dan lagu pertama diantrekan, saya ingin lagu itu mulai diputar.

Saat ini tidak ada metode untuk melakukan itu. PlaybackController.play() akan mengganggu trek yang sedang diputar dan PlaybackController.resume() tidak akan memutar daftar trek jika belum ada yang diputar.

Saya jelas dapat mengatur klien untuk melakukan sesuatu seperti:

await mopidy.tracklist.add(...);
const playbackState = await mopidy.playback.getState();
if (playbackState === "PAUSED") {
  await mopidy.playback.resume();
} else if (playbackState === "STOPPED") {
  await mopidy.playback.play();
}

Masalah dengan ini adalah bahwa jika dua orang mengantri lagu pada saat yang sama, mereka berdua mungkin mendapatkan kembali status "BERHENTI" dan satu orang akan menginjak-injak yang lain. Saya ingin menyelesaikan ini dengan memiliki sesuatu yang terintegrasi ke dalam API yang memungkinkan saya menambahkan trek dan menyatakan bahwa itu harus diputar jika itu adalah satu-satunya trek di daftar trek dan pemutaran dihentikan.

C-enhancement A-core

Komentar yang paling membantu

Cara lain untuk mencapai apa yang pada dasarnya adalah kumpulan atom khusus
operasi inti akan menyediakan Frontend yang mengimplementasikan perintah dan
memastikan semua klien Anda menggunakannya. Ini akan lebih baik jika kita memiliki mekanisme
untuk memperluas websocket entah bagaimana.

Pada Selasa, 7 Apr 2020, 08:55 Stein Magnus Jodal, [email protected]
menulis:

Saya mentransfer masalah ke repo mopidy inti, karena ini akan membutuhkan
perubahan di sini.


Anda menerima ini karena Anda berlangganan utas ini.
Balas email ini secara langsung, lihat di GitHub
https://github.com/mopidy/mopidy/issues/1897#issuecomment-610236208 , atau
berhenti berlangganan
https://github.com/notifications/unsubscribe-auth/AAHEHKHXVX76W7636PBHZYLRLLMATANCNFSM4MC4SYFQ
.

Semua 6 komentar

Saya mentransfer masalah ke repo mopidy inti, karena ini akan memerlukan perubahan di sini.

Cara lain untuk mencapai apa yang pada dasarnya adalah kumpulan atom khusus
operasi inti akan menyediakan Frontend yang mengimplementasikan perintah dan
memastikan semua klien Anda menggunakannya. Ini akan lebih baik jika kita memiliki mekanisme
untuk memperluas websocket entah bagaimana.

Pada Selasa, 7 Apr 2020, 08:55 Stein Magnus Jodal, [email protected]
menulis:

Saya mentransfer masalah ke repo mopidy inti, karena ini akan membutuhkan
perubahan di sini.


Anda menerima ini karena Anda berlangganan utas ini.
Balas email ini secara langsung, lihat di GitHub
https://github.com/mopidy/mopidy/issues/1897#issuecomment-610236208 , atau
berhenti berlangganan
https://github.com/notifications/unsubscribe-auth/AAHEHKHXVX76W7636PBHZYLRLLMATANCNFSM4MC4SYFQ
.

Mengesampingkan kondisi balapan, membuatnya bekerja dengan andal dengan klien _single_ juga mudah.

await mopidy.tracklist.add({ tracks: [track] });
await mopidy.playback.play({});

Itu gagal jika daftar lagu mulai kosong.

Kasus penggunaan jukebox saya sederhana: orang-orang mengantri lagu dan saya ingin sesuatu selalu diputar. Jika daftar lagu kosong dan tidak ada yang diputar, trek baru akan mulai diputar. Jika hal-hal dijeda entah bagaimana, mereka harus membatalkan jeda.

Apakah API mendukung ini tanpa harus melakukan ini, yang terasa terlalu rumit?:

const firstFewTracks = await mopidy.tracklist.slice({ start: 0, end: 3 });
...
const [tlTrack] = await mopidy.tracklist.add({ tracks: [track] });
if (firstFewTracks.length === 0) {
  await mopidy.playback.play({ tlid: tlTrack.tlid });
} else {
  const playbackState = await mopidy.playback.getState();
  if (playbackState === "stopped") {
    await mopidy.playback.play({});
  } else if (playbackState === "paused") {
    await mopidy.playback.resume();
  }
}

Apakah filosofi API untuk membuat setiap metode menjadi sangat tepat dalam fungsinya sehingga Anda dapat menggunakannya sebagai blok pembangun untuk membangun perilaku seperti kasus saya? Atau haruskah itu lebih tahan terhadap keadaan yang berbeda dan maksud yang jelas dari penelepon (misalnya PlaybackController.resume() memajukan daftar lagu jika tidak ada yang diputar)

Itu gagal jika daftar lagu mulai kosong.

Saya pasti salah paham karena itu bekerja untuk saya seperti yang saya harapkan. Apa backend yang Anda gunakan?

Saat dijeda, panggilan play tanpa argumen harus dilanjutkan. Mempertimbangkan bahwa, bersama dengan yang di atas, bukankah yang berikut ini melakukan hal yang sama dengan cuplikan Anda?

await mopidy.tracklist.add({ tracks: [track] });
const playbackState = await mopidy.playback.getState();
if (playbackState != "playing") {
  await mopidy.playback.play({})
}

Perlu diingat bahwa Core API digunakan oleh frontend lain, bukan hanya webclient javascript, sehingga blok penyusun kecil masuk akal. Maksud dari penelepon mungkin tidak selalu jelas dalam konteks lain sehingga kami biasanya tidak memasukkan asumsi. Bagi saya, gagasan "melanjutkan" saat dihentikan tidak masuk akal karena tidak ada yang bisa dilanjutkan.

@altano , apakah Anda beruntung dengan saran saya?

hai @kingosticks , saya menyadari sekarang bahwa saya mungkin mengira kode yang lebih sederhana ini tidak berfungsi karena masalah yang tidak terkait di mana GStreamer secara sporadis gagal diputar setelah perubahan trek dengan:

KESALAHAN 2020-04-20 03:57:04,106 [1:MainThread] mopidy.audio.gst,
GStreamer error: Tidak dapat terhubung ke server,

atau

GStreamer error: Tidak dapat menulis ke sumber daya.

Saya memposting tentang itu di forum Wacana (saya tidak ingin mengirim spam ke masalah github) tetapi posting saya ditandai sebagai spam dan sekarang menunggu persetujuan.

Setelah saya mengatasi masalah itu, saya akan mencoba logika yang lebih sederhana ini lagi dan melihat apakah itu berhasil.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

handsomegui picture handsomegui  ·  12Komentar

pnijhara picture pnijhara  ·  5Komentar

zopyx picture zopyx  ·  4Komentar

voidmann picture voidmann  ·  11Komentar

ice-bear-forever picture ice-bear-forever  ·  6Komentar