Mopidy: Mopidyは、前のトラックタイトルを次のトラックにランダムに引き継ぎます

作成日 2020年01月15日  ·  11コメント  ·  ソース: mopidy/mopidy

やあ、

Mopidyにトラックを終了させて​​次のトラックに移動した後、トラックのタイトルが適切に更新されないため、次のトラックのタイトルは前のトラックと同じになります。 この問題は徐々に悪化しているようで、プレイリスト全体が歪んでいます。
記録のために; オーディオは正常に再生され、アーティストは正常に更新され、トラック番号は正常に更新され、トラックの長さと進行状況も正常に更新されます。

再現する手順:

  1. プレイリストをいくつかのトラックで埋めます。
  2. スキップしたりシークしたりせずに1つ再生します(トラックをしばらく再生させたときに発生するようです)
  3. トラックを終了し、次のトラックに移動してもタイトルが変更されないように注意してください。
    次のバージョンのMopidyとその拡張機能を備えたArchLinuxを実行しています。

  4. mopidy 3.0.1-2

  5. mopidy-local 3.1.0-1
  6. mopidy-mpd 3.0.0-1
  7. mopidy-soundcloud 3.0.0-1
    これらはすべて、ArchとAURの最新の既知のバージョンに更新されています。

昨年どこかでMopidy3にアップデートして以来、私はこれに対処してきましたが、2ではこのような動作はありませんでした。
この問題は#1528 https://github.com/mopidy/mopidy/issues/1528に似ているようですが、Mopidy2について説明しています。

以下に示すトラックは、mopidy-localから再生されます。

ncmpcppの場合:
誤ったトラックリストhttps://camo.githubusercontent.com/fa91261107d7af341374ef03a1ab2a774e813e9f/68747470733a2f2f692e696d6775722e636f6d2f5547674830477a2e706e67

そして、polybarのMPD拡張機能では:
ポリバーMPDhttps //camo.githubusercontent.com/5b6207e174cd0cce829d2164aba91868c451d50b/68747470733a2f2f692e696d6775722e636f6d2f374d5a69367a4a2e706e67

これは実際のトラックリストです:
正しいトラックリストhttps://camo.githubusercontent.com/c99c327c9505f563f9f96a92b2b54df2a4f02a28/68747470733a2f2f692e696d6775722e636f6d2f384d53666665422e706e67

別のアルバムで、発生時にmopidy-vを使用してログをキャプチャしようとしました。
ログhttps://camo.githubusercontent.com/76bb6011e2138c5ca800ac2b7d18618e46a8ca75/68747470733a2f2f692e696d6775722e636f6d2f6d5339375a49702e706e67

DEBUG 2020-01-15 14:07:06,594 [79919:MainThread] mopidy.audio.actor
オーディオイベント:tags_changed(tags = ['minimum-bitrate'、 'bitrate'])
DEBUG 2020-01-15 14:07:06,594 [79919:MainThread] mopidy.listener
tags_changedをAudioListenerに送信します:{'tags':['minimum-bitrate'、 'bitrate']}
デバッグ2020-01-1514:07:06,644 [79919:MpdSession-11] mopidy_mpd.session
[:: ffff:127.0.0.1 ]:34768からのリクエスト:noidle
デバッグ2020-01-1514:07:06,644 [79919:MpdSession-11] mopidy_mpd.session
[:: ffff:127.0.0.1 ]:34768への応答:OK
デバッグ2020-01-1514:07:06,644 [79919:MpdSession-11] mopidy_mpd.session
[:: ffff:127.0.0.1 ]:34768からのリクエスト:ステータス
デバッグ2020-01-1514:07:06,647 [79919:MpdSession-11] mopidy_mpd.session
[:: ffff:127.0.0.1 ]:34768への応答:
ボリューム:100
繰り返し:0
ランダム:0
シングル:0
消費:0
プレイリスト:5
プレイリストの長さ:8
xfade:0
状態:再生
曲:2
songid:12
次の曲:3
nextsongid:13
時間:1:270
経過:1.412
ビットレート:0
わかった
デバッグ2020-01-1514:07:06,648 [79919:MpdSession-11] mopidy_mpd.session
[:: ffff:127.0.0.1 ]:34768からのリクエスト:アイドル
DEBUG 2020-01-15 14:07:06,656 [79919:MainThread] mopidy.audio.gst
TAGバスメッセージを取得しました:tags = {'artist':['Ben Lukas Boysen']、 'title':['Sleepers Beat Theme']、 'track-number':[3]、 'track-count':[8 ]、 'album':['Spells']、 'datetime':['2016']、 'album-artist':['Ben Lukas Boysen']、 'organization':['Erased Tapes Records']、 'ジャンル':['アンビエント/モダンクラシック ']、' isrc ':[' ERATP085 ']、'イメージ ':
(画像からの)デバッグ出力に多くのノイズがあり、すぐに端末のバッファサイズを超えました。
追加情報が必要な場合は、教えてください。できる限りのことをします。

ありがとうございました。

C-bug

最も参考になるコメント

決して遅くなるよりはましですが、更新とこれらすべてのイベントにタグを付け直すと、すべて非同期であるため複雑になります。 そして、私がこれらのものを詳細に見てきたので、それは何年も経っています。 しかし、ここでは、単純化されたパイプライン図をひどく超えています。

[SRC] --> [DECODER] --> [SINK]
  • about-to-finishSRCのデータが不足したときにトリガーされます
  • この時点では、タグの更新がパイプラインの中間ノードを通過している可能性があります
  • 現在のトラックのオーディオはこの段階でまだ流れています
  • Icecastストリーミングのような場合、これらのタグがSINK到達するのは、それらがライブになるときです(これは、私たちがそれらを取得する場所でもあると思います)
  • STREAM_START -正直なところ、このイベントがSINKに到達したとき、またはSRCで発生したときに発生したかどうかは覚えていません。これは、おそらくこれを正しく行うための鍵です。 https://gstreamer.freedesktop.org/documentation/gstreamer/gstmessage.html?gi-language=c#gst_message_new_stream_startを見ると、すべてのシンクがそれを

したがって、 about-to-finishと次のトラックの開始の間に意味のあるタグがある場合があると考えてください。 これを正しく行うのが難しい場合は、それらを無視することを検討できますが、コードにTODOを追加し、現在の状態よりも壊れていない場合は、フォローアップに他のバグを提出しますか?

全てのコメント11件

これはmopidy / mopidy-mpd#23に関連しているように見えます。

問題ない! どちらのレポートも数時間以内に届きましたが、根本的な原因がどのコンポーネントにあるのかはまだわかりません。

この問題がMopidy2.xに存在しないという声明がなければ、 https://github.com/mopidy/mopidy/pull/1751と関係があるかもしれないと言っていたでしょう。

私が信じているのと同じ問題が発生しましたが、私はこの問題を何ヶ月も抱えています。 また、ここでアーチ、すべてが更新されました。

Mopidyは、前のトラックタイトルを現在のトラックタイトルとして保持します。 つまり、トラックが終了します-ncmpcppとpolybar拡張子は、以前のトラック名を示します(単に「Eminem-In TooDeep」として)。 mpcは「ゴジラ:エミネム-イン・トゥー・ディープ」を示していますが、ゴジラが現在の曲で、イン・トゥー・ディープが前の曲です。 それはちょっと気紛れです、1つはバグですが、なぜmpcは両方を表示するのですか?

これはhttps://github.com/mopidy/mopidy/pull/1751によって明らかにされたものの組み合わせであるため、Mopidyv2.3.0にも存在します。

私のプレイリストの最初の2つのトラックは、(1)「SetGuitars To Kill」、続いて(2)「A Little Bit Of Solidarity Goes ALongWay」です。 以下のログは、トラックが(1)から(2)に変更された後、タグ変更イベントを取得しますが、古いトラックデータを使用してstream_title_changedを送信することになることを示しています。

Dummy-21 DEBUG    2020-01-17 23:58:44,257 Got about-to-finish event.
Dummy-21 DEBUG    2020-01-17 23:58:44,257 Running about-to-finish callback.
LocalBackend-8 DEBUG    2020-01-17 23:58:44,259 Backend translated URI from local:track:And%20So%20I%20Watch%20You%20From%20Afar%20-%20Self%20Titled%20%282009%29/02-and_so_i_watch_you_from_afar-a_little_bit_of_solidarity_goes_a_long_way.mp3 to file:///home/nick/Music/And%20So%20I%20Watch%20You%20From%20Afar%20-%20Self%20Titled%20%282009%29/02-and_so_i_watch_you_from_afar-a_little_bit_of_solidarity_goes_a_long_way.mp3
Dummy-21 DEBUG    2020-01-17 23:58:44,262 Got source-setup signal: element=GstFileSrc
MainThread DEBUG    2020-01-17 23:58:44,574 Got TAG bus message: tags={'title': ['Set Guitars To Kill'], 'artist': ['And So I Watch You From Afar'], 'album': ['Self Titled'], 'datetime': ['2009-04-13'], 'track-number': [1], 'genre': ['Instrumental Rock'], 'container-format': ['ID3 tag'], 'private-id3v2-frame': [b'TLAN\x00\x00\x00\x04\x00\x00\x00eng', b'TXXX\x00\x00\x00\x14\x00\x00\x00Rip date\x002009-04-14', b'TXXX\x00\x00\x00\n\x00\x00\x00Source\x00CD', b'TXXX\x00\x00\x00\x1c\x00\x00\x00Release type\x00Normal release'], 'track-count': [11], 'encoder': ['LAME 3.97 (-V2 --vbr-new)'], 'publisher': ['Smalltown America'], 'private-data': [b'\x02\x00\xfb1K\x00'], 'has-crc': [False], 'channel-mode': ['joint-stereo'], 'audio-codec': ['MPEG-1 Layer 3 (MP3)'], 'minimum-bitrate': [95856], 'maximum-bitrate': [319725], 'bitrate': [252000]}
MainThread DEBUG    2020-01-17 23:58:44,853 Got TAG bus message: tags={'title': ['Set Guitars To Kill'], 'artist': ['And So I Watch You From Afar'], 'album': ['Self Titled'], 'datetime': ['2009-04-13'], 'track-number': [1], 'genre': ['Instrumental Rock'], 'container-format': ['ID3 tag'], 'private-id3v2-frame': [b'TLAN\x00\x00\x00\x04\x00\x00\x00eng', b'TXXX\x00\x00\x00\x14\x00\x00\x00Rip date\x002009-04-14', b'TXXX\x00\x00\x00\n\x00\x00\x00Source\x00CD', b'TXXX\x00\x00\x00\x1c\x00\x00\x00Release type\x00Normal release'], 'track-count': [11], 'encoder': ['LAME 3.97 (-V2 --vbr-new)'], 'publisher': ['Smalltown America'], 'private-data': [b'\x02\x00\xfb1K\x00'], 'has-crc': [False], 'channel-mode': ['joint-stereo'], 'audio-codec': ['MPEG-1 Layer 3 (MP3)'], 'minimum-bitrate': [79931], 'maximum-bitrate': [319725], 'bitrate': [252000]}
MainThread DEBUG    2020-01-17 23:58:45,062 Got TAG bus message: tags={'title': ['Set Guitars To Kill'], 'artist': ['And So I Watch You From Afar'], 'album': ['Self Titled'], 'datetime': ['2009-04-13'], 'track-number': [1], 'genre': ['Instrumental Rock'], 'container-format': ['ID3 tag'], 'private-id3v2-frame': [b'TLAN\x00\x00\x00\x04\x00\x00\x00eng', b'TXXX\x00\x00\x00\x14\x00\x00\x00Rip date\x002009-04-14', b'TXXX\x00\x00\x00\n\x00\x00\x00Source\x00CD', b'TXXX\x00\x00\x00\x1c\x00\x00\x00Release type\x00Normal release'], 'track-count': [11], 'encoder': ['LAME 3.97 (-V2 --vbr-new)'], 'publisher': ['Smalltown America'], 'private-data': [b'\x02\x00\xfb1K\x00'], 'has-crc': [False], 'channel-mode': ['joint-stereo'], 'audio-codec': ['MPEG-1 Layer 3 (MP3)'], 'minimum-bitrate': [63700], 'maximum-bitrate': [319725], 'bitrate': [252000]}
MainThread DEBUG    2020-01-17 23:58:45,342 Got TAG bus message: tags={'title': ['Set Guitars To Kill'], 'artist': ['And So I Watch You From Afar'], 'album': ['Self Titled'], 'datetime': ['2009-04-13'], 'track-number': [1], 'genre': ['Instrumental Rock'], 'container-format': ['ID3 tag'], 'private-id3v2-frame': [b'TLAN\x00\x00\x00\x04\x00\x00\x00eng', b'TXXX\x00\x00\x00\x14\x00\x00\x00Rip date\x002009-04-14', b'TXXX\x00\x00\x00\n\x00\x00\x00Source\x00CD', b'TXXX\x00\x00\x00\x1c\x00\x00\x00Release type\x00Normal release'], 'track-count': [11], 'encoder': ['LAME 3.97 (-V2 --vbr-new)'], 'publisher': ['Smalltown America'], 'private-data': [b'\x02\x00\xfb1K\x00'], 'has-crc': [False], 'channel-mode': ['joint-stereo'], 'audio-codec': ['MPEG-1 Layer 3 (MP3)'], 'minimum-bitrate': [55737], 'maximum-bitrate': [319725], 'bitrate': [252000]}
MainThread DEBUG    2020-01-17 23:58:45,481 Got TAG bus message: tags={'title': ['Set Guitars To Kill'], 'artist': ['And So I Watch You From Afar'], 'album': ['Self Titled'], 'datetime': ['2009-04-13'], 'track-number': [1], 'genre': ['Instrumental Rock'], 'container-format': ['ID3 tag'], 'private-id3v2-frame': [b'TLAN\x00\x00\x00\x04\x00\x00\x00eng', b'TXXX\x00\x00\x00\x14\x00\x00\x00Rip date\x002009-04-14', b'TXXX\x00\x00\x00\n\x00\x00\x00Source\x00CD', b'TXXX\x00\x00\x00\x1c\x00\x00\x00Release type\x00Normal release'], 'track-count': [11], 'encoder': ['LAME 3.97 (-V2 --vbr-new)'], 'publisher': ['Smalltown America'], 'private-data': [b'\x02\x00\xfb1K\x00'], 'has-crc': [False], 'channel-mode': ['joint-stereo'], 'audio-codec': ['MPEG-1 Layer 3 (MP3)'], 'minimum-bitrate': [47775], 'maximum-bitrate': [319725], 'bitrate': [252000]}
MainThread DEBUG    2020-01-17 23:58:46,251 Got TAG bus message: tags={'title': ['Set Guitars To Kill'], 'artist': ['And So I Watch You From Afar'], 'album': ['Self Titled'], 'datetime': ['2009-04-13'], 'track-number': [1], 'genre': ['Instrumental Rock'], 'container-format': ['ID3 tag'], 'private-id3v2-frame': [b'TLAN\x00\x00\x00\x04\x00\x00\x00eng', b'TXXX\x00\x00\x00\x14\x00\x00\x00Rip date\x002009-04-14', b'TXXX\x00\x00\x00\n\x00\x00\x00Source\x00CD', b'TXXX\x00\x00\x00\x1c\x00\x00\x00Release type\x00Normal release'], 'track-count': [11], 'encoder': ['LAME 3.97 (-V2 --vbr-new)'], 'publisher': ['Smalltown America'], 'private-data': [b'\x02\x00\xfb1K\x00'], 'has-crc': [False], 'channel-mode': ['joint-stereo'], 'audio-codec': ['MPEG-1 Layer 3 (MP3)'], 'minimum-bitrate': [31850], 'maximum-bitrate': [319725], 'bitrate': [252000]}
MainThread DEBUG    2020-01-17 23:58:47,429 Got STREAM_START bus message
Dummy-20 DEBUG    2020-01-17 23:58:47,430 Got SEGMENT pad event: rate=1.0 format=time start=0 stop=18446744073709551615 position=0
MainThread DEBUG    2020-01-17 23:58:47,431 Audio event: stream_changed(uri='file:///home/nick/Music/And%20So%20I%20Watch%20You%20From%20Afar%20-%20Self%20Titled%20%282009%29/02-and_so_i_watch_you_from_afar-a_little_bit_of_solidarity_goes_a_long_way.mp3')
Dummy-20 DEBUG    2020-01-17 23:58:47,431 Audio event: position_changed(position=0)
MainThread DEBUG    2020-01-17 23:58:47,432 Sending stream_changed to AudioListener: {'uri': 'file:///home/nick/Music/And%20So%20I%20Watch%20You%20From%20Afar%20-%20Self%20Titled%20%282009%29/02-and_so_i_watch_you_from_afar-a_little_bit_of_solidarity_goes_a_long_way.mp3'}
Dummy-20 DEBUG    2020-01-17 23:58:47,432 Sending position_changed to AudioListener: {'position': 0}
MainThread DEBUG    2020-01-17 23:58:47,433 Audio event: tags_changed(tags=dict_keys(['title', 'artist', 'album', 'datetime', 'track-number', 'genre', 'container-format', 'private-id3v2-frame', 'track-count', 'encoder', 'publisher', 'private-data', 'has-crc', 'channel-mode', 'audio-codec', 'minimum-bitrate', 'maximum-bitrate', 'bitrate']))
Core-10 DEBUG    2020-01-17 23:58:47,434 Triggering track playback ended event
Core-10 DEBUG    2020-01-17 23:58:47,437 Sending track_playback_ended to CoreListener: {'tl_track': TlTrack(tlid=10, track=Track(album=Album(date='2009-04-13', name='Self Titled', num_tracks=11, uri='local:album:md5:5bdacb653bbd94bd6d1cbc68dc1854da'), artists=[Artist(name='And So I Watch You From Afar', uri='local:artist:md5:f69d2a608336108f1d645744c63d6dea')], date='2009-04-13', genre='Instrumental Rock', last_modified=1310599762000, length=329639, name='Set Guitars To Kill', track_no=1, uri='local:track:And%20So%20I%20Watch%20You%20From%20Afar%20-%20Self%20Titled%20%282009%29/01-and_so_i_watch_you_from_afar-set_guitars_to_kill.mp3')), 'time_position': 329639}
Core-10 DEBUG    2020-01-17 23:58:47,438 Changing state: playing -> playing
Core-10 DEBUG    2020-01-17 23:58:47,439 Triggering playback state change event
MainThread DEBUG    2020-01-17 23:58:47,435 Sending tags_changed to AudioListener: {'tags': dict_keys(['title', 'artist', 'album', 'datetime', 'track-number', 'genre', 'container-format', 'private-id3v2-frame', 'track-count', 'encoder', 'publisher', 'private-data', 'has-crc', 'channel-mode', 'audio-codec', 'minimum-bitrate', 'maximum-bitrate', 'bitrate'])}
Core-10 DEBUG    2020-01-17 23:58:47,440 Sending playback_state_changed to CoreListener: {'old_state': 'playing', 'new_state': 'playing'}
Core-10 DEBUG    2020-01-17 23:58:47,451 Triggering track playback started event
Core-10 DEBUG    2020-01-17 23:58:47,453 Sending track_playback_started to CoreListener: {'tl_track': TlTrack(tlid=11, track=Track(album=Album(date='2009-04-13', name='Self Titled', num_tracks=11, uri='local:album:md5:5bdacb653bbd94bd6d1cbc68dc1854da'), artists=[Artist(name='And So I Watch You From Afar', uri='local:artist:md5:f69d2a608336108f1d645744c63d6dea')], date='2009-04-13', genre='Instrumental Rock', last_modified=1310599762000, length=205871, name='A Little Bit Of Solidarity Goes A Long Way', track_no=2, uri='local:track:And%20So%20I%20Watch%20You%20From%20Afar%20-%20Self%20Titled%20%282009%29/02-and_so_i_watch_you_from_afar-a_little_bit_of_solidarity_goes_a_long_way.mp3'))}
MpdFrontend-13 DEBUG    2020-01-17 23:58:47,452 Sending player to MpdSession: {}
Core-10 DEBUG    2020-01-17 23:58:47,458 Sending stream_title_changed to CoreListener: {'title': 'Set Guitars To Kill'}

これは、(2)の新しいタグ値を取得するためのself.audio.get_current_tags().get()呼び出しがまだ更新されておらず、(1)のタグ値を保持しているためです。 したがって、(2)のcurrent_track.nameを(1)のtitleと比較し、それらが異なることを見つけて、(1)を使用してstream_title_changedイベントを誤って発行することになります。

get_current_tagsget_current_track間の競合状態のようです。 get_current_tags前にsleep(1)を置くと、機能します。 Mopidy-MPDを変更してtrack_playback_started playerアイドルイベントを発行することで、この問題を回避することもできます。 その上、通常のトラックにstream_title_changedイベントが必要になることはありませんでした(#1751でそれを台無しにしました)。

ここで競合状態が発生するのは間違っているように思われますが、手動かどうかに関係なく、トラックを切り替えるときの1つの同期アクションである必要があります。 しかし、私はモピディがどのように機能するかについて十分に知らないことを認めます、それで多分理由について何らかの理由があります。

それよりも複雑ですが、はっきりしていなければ、これはバグです。

失礼なことをするつもりはなかった、それは深夜だった。 私は解決策としてsleep(1)に反応したと思います(しゃれは意図されていません)。

心配ない。 競合状態であることを証明するため、 sleepについてのみ言及しました。

編集:それは正確に競合状態ではありません。

@adamcikabout-to-finishSTREAM_START受け取る間に取得したタグの更新を気にするのはなぜですか?

決して遅くなるよりはましですが、更新とこれらすべてのイベントにタグを付け直すと、すべて非同期であるため複雑になります。 そして、私がこれらのものを詳細に見てきたので、それは何年も経っています。 しかし、ここでは、単純化されたパイプライン図をひどく超えています。

[SRC] --> [DECODER] --> [SINK]
  • about-to-finishSRCのデータが不足したときにトリガーされます
  • この時点では、タグの更新がパイプラインの中間ノードを通過している可能性があります
  • 現在のトラックのオーディオはこの段階でまだ流れています
  • Icecastストリーミングのような場合、これらのタグがSINK到達するのは、それらがライブになるときです(これは、私たちがそれらを取得する場所でもあると思います)
  • STREAM_START -正直なところ、このイベントがSINKに到達したとき、またはSRCで発生したときに発生したかどうかは覚えていません。これは、おそらくこれを正しく行うための鍵です。 https://gstreamer.freedesktop.org/documentation/gstreamer/gstmessage.html?gi-language=c#gst_message_new_stream_startを見ると、すべてのシンクがそれを

したがって、 about-to-finishと次のトラックの開始の間に意味のあるタグがある場合があると考えてください。 これを正しく行うのが難しい場合は、それらを無視することを検討できますが、コードにTODOを追加し、現在の状態よりも壊れていない場合は、フォローアップに他のバグを提出しますか?

このページは役に立ちましたか?
0 / 5 - 0 評価