playlist generator for various mediaplayers

18禁ネタを含むので、そういうのが苦手な人は読まないでね。(とはいえ大した18禁でもないよ。)

自分的には相当にいまさらで、ほんとにずっと前からいつかはやらねばと思ってたネタ。「メディアプレイヤーのためのプレイリストについて考えてみる」話ね。

Windows でも近頃のオープンデスクトップな Unix でも、「ファイルブラウザ」そのものをインターフェイスとして「そこでダブルクリックして再生出来ればええやん」と思ってれば済むケースは、まぁ別に割合として少ないわけではないのだけれど、プレイリストが使えれば確かに世界は広がる。というか、はっきりいって「プレイリストなしには生きていけない」とさえ言いたくなる場合もある。この絵でわかってもらえるかしらん:

この「製品」は、購入すると MP3 のファイル「たち」としてダウンロード出来るのだけれど、この「ファイルたち」の組み合わせ方を自分でカスタマイズして聴くというわけね。

emacs による並べ替えはこれは Unix コマンドの ls のソート順に従っていて、なので「10.おはよう」が先頭になってしまうが、もちろんこの順で再生したいわけではない。Windows Explorer でもこれよりは少しマシな並べ替えをしてくれはするものの、「4.アダルトパート1日目」と「4.アダルトパート1日目ロングver.」はこの順に連続で再生したいのではなくて、どちらか一方を選んで再生したいわけだ。こういうのはもう「ファイル名を変える」「フォルダで分類し直す」かまたは「プレイリスト」を使うしか、望みの順に自動再生する術はない。(あるいは望みの順で結合した単一ファイルを作ってしまうか。)

「ひとつ再生が終わったら、次のファイルを選んでダブルクリック」でいい、という場合はまぁいいんだけど、今例にしてるヤツってさ、要するに「暗くした部屋で目をつむって(全裸で)イヤホン装備で仰向けになっている」わけよ、「終わったら選んで再生」なんてことしたら「醒めちゃう」の。

という困り方はこれまでずっとだったんだけれど、まぁあんまり真剣に取り組むことなく「ファイル名を変える」「フォルダで分類し直す」「望みの順で結合した単一ファイルを作ってしまう」で誤魔化してきてた。いい加減ちゃんとプレイリストで措置しようかと。

MPC-HC でプレイリストをどうやって使えるんだろうか、てところから引っかかってたんだよね実は。というかこれがすぐに見つけられてれば、もっと早くこれをしようと思ってたんだけど、結構見つけにくいかなと。「Ctrl-7」でプレイリストを開くことが出来る:

このプレイリストペインで右クリックして云々、としてリスト編集出来るが、これをセーブ出来る。

この MPC-HC のセーブフォーマットと MPC-HC との関係がかなり謎である:

  1. .pls と .mpcpl 以外は write-only で、MPC-HC は読み込めない。なんぢゃそりゃ。→ 7月2日の追記参照
  2. なぜか .pls のエンコーディングのデフォルトが Shift-JIS だが、MPC-HC は読み込めない。なんぢゃそりゃ2
  3. .pls でセーブしたそのものを、MPC-HC は読み込めない。フルパスを相対パスに直すと読み込める。なんぢゃそりゃ3

というわけで MPC-HC を基準に考える場合は .mpcpl 一択なのだけれど、もちろんこれを Windows Media Player が読み込めるわけはないし、なんとなく読めるんではないかと期待させといて VLC Media Player でもやっぱり読むことが出来ず、かなりやな感じ。そもそもなんか気分悪いんだよねこのフォーマット:

 1 MPCPLAYLIST
 2 1,type,0
 3 1,filename,1.浜辺の恋人.mp3
 4 2,type,0
 5 2,filename,2.導入.mp3
 6 3,type,0
 7 3,filename,2b.導入追加分.mp3
 8 4,type,0
 9 4,filename,3.深化&安眠.mp3
10 5,type,0
11 5,filename,4.1日目.mp3
12 6,type,0
13 6,filename,5.2日目.mp3
14 7,type,0
15 7,filename,6.3日目.mp3
16 8,type,0
17 8,filename,7.4日目.mp3
18 9,type,0
19 9,filename,8.5日目.mp3
20 10,type,0
21 10,filename,9.解除.mp3
22 11,type,0
23 11,filename,10.おはよう.mp3

この「type」が何を意味するのかまだ調べてないが、たぶん「オーディオ」「ビデオ」「ビデオ+オーディオ」とかなんだろうね、わからんけど。そして何より「テキストエディタで編集するのはダルかろう」てことだ。むろんこのことについてはほかも同罪で、なにかしら自動化手段を持っておかないと「冗長データの保守が鬱陶しい」。たとえば:

 1 <?wpl version="1.0"?>
 2 <smil>
 3     <head>
 4         <meta name="Generator" content="mpplgen -- 0.0.0.1"/>
 5         <meta name="ItemCount" content="11"/>
 6         <title>playlist</title>
 7     </head>
 8     <body>
 9         <seq>
10             <media src="1.浜辺の恋人.mp3" tid="{15a4ca5b-0aa1-4352-a890-e7fc685f2307}"/>
11             <media src="2.導入.mp3" tid="{477d551b-d8c6-4b74-9dd3-875a46c17fa4}"/>
12             <media src="2b.導入追加分.mp3" tid="{b74d5b53-16c2-49e0-9dd0-46e6e147dfae}"/>
13             <media src="3.深化&安眠.mp3" tid="{bd6ebddd-0732-49dc-b2db-685e0fe0790e}"/>
14             <media src="4.1日目ロングver..mp3" tid="{49483f53-ec18-4023-83a7-415472b80834}"/>
15             <media src="5.2日目ロングver..mp3" tid="{c997db95-cad5-478c-8e9d-edb02240bfcf}"/>
16             <media src="6.3日目ロングver..mp3" tid="{f42487fa-ba47-444c-8b25-b9177e1f6337}"/>
17             <media src="7.4日目.mp3" tid="{b2bba661-7cdd-4bf5-b24b-f7a5197bf332}"/>
18             <media src="8.5日目.mp3" tid="{efdec82f-9077-40c3-87ba-7b6810252518}"/>
19             <media src="9.解除.mp3" tid="{f553a79f-0bcf-4f3a-a82b-60597164140f}"/>
20             <media src="10.おはよう.mp3" tid="{6a84b8b6-b099-4525-9b37-ce5036578d72}"/>
21         </seq>
22     </body>
23 </smil>

てなわけで、「プレイリストジェネレータ」を書いたほうがいいなと思って、とりあえずのものを書いてみた:

使い方はわかる…よね?

GUI での編集が出来るエディタも用意できればなお良いかなと思うが、とりあえずはやってない。それと、ファイル名のパターンとかを使ってリストの順序を制御するように考えたけれど、これだけではどうしようもないくらい複雑なケースもあるので、ユーザモジュールを読み込んでソートの制御をさせるとかやれば、もっといいかなと思う。けれどもそれ以前の問題として、根本的なことを3つやってない:

  1. .mpcpl の「type」ってなんなのよ問題。
  2. .asx のエンコーディングはほんとは「cp932」ではない。単に「デフォルトコードページ」てことなんだけど、これを知る簡単な方法がないもんで。
  3. どのフォーマットについても公式の仕様を調べてない。特に .m3u。これはほんとに単なる羅列でいいのかな?

今は個人的用途がエロ音声だけなので当座日常困らないけれど、ビデオも扱うようになれば 1. を真剣にやることになるだろう。.m3u は正直真面目にやりたくない。Winamp なんか使わんし。


2021-06-28追記:
MPC-HCのソースを見始めた。個々の仕様を真剣に読むよりは早いのではないかと思って。少なくともワタシのスクリプトの仕様網羅度は相当低いということだけはいま時点で既にわかった。subtitle だの cover だのも埋め込めるのだな。

とりあえずは、だ。書き込みは今の限りなく最小限ノリでいいと思うわけね、自分のニーズ的には。そしてその「自分の今のニーズ的には」読み込みが十分かどうかだ。たとえば subtitle がもとのに入ってても、スルーしちゃっていいわけよ、オレ的ニーズにとっては。メディアのリストさえ得られればいい。どうかしらね。


2021-06-29追記:
ソースコード解読だけだと効率悪いので、winamp インストールもしてみて、まぁほぼ全部理解できた。

まずは、pls はこれはもうダメだわ全然。utf-8 でないと読み込めない MPC-HC のために utf-8 とするのは明らかに間違っている。なぜなら winamp も pls を cp932 で書き出すから。つまり、まぁ百歩譲って utf-8 で書き出すのを是とするとしても、読み込みで utf-8 であることを仮定してはダメ、絶対に。なんてことを真面目にやる…なんてことはしたくないぞ、と、とりあえずコメントアウトにして消してしまった。

winamp 用のは、まずは「m3u」「m3u8」というふうにエンコーディングによって別れてることがわかった。うん、これは扱いやすいね。ただし utf-8-sig ね、これはちょっとうっとい。それと、「単なるファイル列挙」ではなく、特殊行が二種。ヘッダとしての「#EXTM3U」行と、補助情報用「#EXTINF:」行。たとえばこんな感じ:

これもエロ音声
 1 #EXTM3U
 2 #EXTINF:362,1:導入-a 呼びかけ
 3 1:導入-a 呼びかけ.mp3
 4 #EXTINF:1030,2:導入-b 言語の一致 調息と数のまじない
 5 2:導入-b 言語の一致 調息と数のまじない.mp3
 6 #EXTINF:168,3:深化 星のまじない
 7 3:深化 星のまじない.mp3
 8 #EXTINF:1295,4:アダルトパートa 本編
 9 4:アダルトパートa 本編.mp3
10 #EXTINF:535,5:アダルトパートb 任意パート(おまけ)
11 5:アダルトパートb 任意パート(おまけ).mp3
12 #EXTINF:362,6:解除 おやすみなさい
13 6:解除 おやすみなさい.mp3

で、肝心の「.mpcpl」なのだけど、これは、今の「type,0」だけでやっといてもそんなに日常困らんだろうと思った。type は「0:file」「1:device」の二種類で、後者は「ビデオとオーディオが別ファイル」の扱いをするものみたい。html5 の video タグと同じノリよね。少なくともワタシの日常にとってはこれは今のところ全く必要がない。

て感じなので、まぁ当座今の状態でほとんどおおむねオッケーなんだよね。完全にすれば皆が嬉しいかもしれないというのは思うけど、だからといって、自分が一切使わない機能のために頑張るのもなぁ、と、この先をちゃんとするモチベーションが湧かない。うーんどうしたもんか…。


2021-06-29追記 (2):
とりあえず pls は「がんばって utf-8 か cp932 かの自動判定ぽいインチキ試み」して復帰させてみた。あと ffmpeg の -f concat 形式のも用意してみたけれど、まぁこれは標準の拡張子はないからね、あんまし便利には感じない。

本題は「これだけではどうしようもないくらい複雑なケースもあるので、ユーザモジュールを読み込んで」云々の件。PYTHONPATH の問題は少しうっとうしいけれど、まぁこれさえあれば、こういうエロ複雑なのでもおけ:

性別・性癖ごとにカスタマイズ出来る、とあるエロ音声用
 1 # -*- coding: utf-8 -*-
 2 _parts = [
 3     ["create( C_Image ci ).mp3"],
 4     ["C_Image melt.mp3", "C_Image swing.mp3"],  # 0
 5     ["init().mp3"],
 6     ["activate().mp3"],
 7     ["load( L_Image li ).mp3"],
 8     ["L_Image brainStorm.mp3", "L_Image lipCream.mp3"],  # 0
 9     ["flush( F_Image fi ).mp3"],
10     [
11         "F_Image lipCream.mp3",
12         "F_Image turnON.mp3",
13         "F_Image turnONv2.mp3"
14     ],  # 2
15     ["process( P_Image pi ).mp3"],
16     [
17         "P_Image hotTreat4F.mp3",
18         "P_Image hotTreat4M.mp3",
19         "P_Image hotTreat4Mv2.mp3",
20         "P_Image stroke1Self.mp3"
21     ],  # 0
22     ["deactivate().mp3"],
23 ]
24 _inds = [0, 0, 2, 0]  # これはワタシの好みだが、この組み合わせ数は…
25 #
26 def generate():
27     for pts in _parts:
28         if len(pts) > 1:
29             p = pts[_inds.pop(0)]
30         else:
31             p = pts[0]
32         yield p

あるいはこんなのも:

 1 # -*- coding: utf-8 -*-
 2 import os
 3 import re
 4 from glob import glob
 5 
 6 
 7 # 「品川→品川エロ→品川痴漢→…」がいいか「品川→田町→…品川エロ→田町エロ→…」がいいか迷うぜっ
 8 def generate():
 9     _srgx = re.compile(r"エロSE無(.*)")
10     bases = []
11     for fn in sorted(glob("エロ/*.mp3")):
12         bases.append(
13             "*{}".format(
14                 _srgx.match(os.path.basename(fn)).group(1)))
15     for stpat in bases:
16         for d in (
17                 "ノーマル",
18                 "エロ", "エロSE1", "エロSE2",
19                 "痴漢", "痴漢SE1", "痴漢SE2", "痴漢SE3", "痴漢SE4", "痴漢SE5", "痴漢SE6",
20         ):
21             yield from glob(os.path.join(d, stpat))

いろんな性癖向けに、サークルさんは素材を用意してくれていて、それを組み合わせるのは我々ユーザの自由、、、なわけだが、二箇所以上をカスタマイズさせはじめれば、組み合わせ数は爆発的に増加していく、ので、こういう自動生成系によるサポートがとっても大事、て話。


2021-06-30追記:
wikipedia:Playlistを眺めて、メジャーそうなプレイヤーをいっぱいインストールしてみた。で、それら固有のを対応したてのもあるんだけれど、wpl 形式の「tid」がいらんのではないかしら、と試してみたところ、これを扱えるワタシがインストールしてみたやつらは全て、tid が入ってなくても読み込んでくれた。具体的には、もともとプリインストールされてた Windows Media Player と Groovy、それに AIMP、Winamp、VLC Media Player。てわけで、tid を頑張って埋めるのはやめた。てなわけで、.wpl の例はたとえばこんな感じ:

例はやっぱりエロ音声に限る
 1 <?wpl version="1.0"?>
 2 <smil>
 3     <head>
 4         <meta name="Generator" content="mpplgen -- 0.0.0.1"/>
 5         <meta name="ItemCount" content="4"/>
 6         <title>playlist</title>
 7     </head>
 8     <body>
 9         <seq>
10             <media src="01プロローグ.mp3"/>
11             <media src="02シコシコしなさい!.mp3"/>
12             <media src="03イキたい?.mp3"/>
13             <media src="04淫語連呼して上げる.mp3"/>
14         </seq>
15     </body>
16 </smil>

なお、「メジャーなもの」と言ってはみたものの、ほんとにメジャーなのかはわかってない。そして、wikipedia ページに列挙されてるものは残るは「.kpl」「.pla」「.zpl」と、「.aimppl」「.plc」ちうことになるのだが、「.aimppl」「.plc」はどうやら最新の AIMP は扱わないようなので…、まぁこれはやらんでいかろうとして、「.kpl」「.pla」「.zpl」はどうすっかね。というかこんなに網羅して嬉しいんか、てのが全然わからんしな。まぁ気が向いたら、だわな。


2021-07-01追記:
「.kpl」は、そもそもプロジェクトそのものが完全に死亡状態らしく、公式サイトが wayback machine 経由ですら壊れてるみたい。ので頭の片隅に置く価値すらもなさそう。「.zpl」は考えないことにした。全く聞いたことがないと思ってたら、日本では発売されなかった Microsoft 製品らしいね、Zune。こんなん、インターネットの海で探しても .zpl のサンプルは見つからんだろう状態と思うわけで、ましてや「誰かの個人所有」として .zpl が存在してることを想像することすら難しそう。ので、.kpl 同様、考えなくてよかろう、と。問題は「.pla」だけで、これは Winamp のソースコードが手に入るなら扱えるんだろう、とは思うんだけど、バイナリフォーマットなのだということと、「Samsung」が果たしてメジャーなのか、てのがあって、まぁやるとしたらほんとによっぽど気が向いたらだな、と思った。

ひとまず今の段階のものだけで満足しとこうと思う、てことなんだけど、今困ってるのが「.pls」のお節介仕様。これね:

Windows の場合に可能(環境変数)
1 [playlist]
2 File1=%UserProfile%\Music\short.ogg
3 
4 NumberOfEntries=1
5 Version=2
Unix の場合に可能(チルダ)
1 [playlist]
2 File1=~/short.ogg
3 
4 NumberOfEntries=1
5 Version=2

多くのプレイヤーが、書き出しは必ず絶対パスで書き込むことを死守しようとしちゃうんだけれど、この振る舞いは選べないとダメだろうよ。絶対パスでないとダメなケースがあるのはあるよ、だけど、相対パスでないと困るケースもあるでしょ? たとえば、プレイリストとメディアをセットとして「持ち運ぶ」ことを考えるならば、これはもう「相対パス一択」、でしょ。そして、この相対パス・絶対パス問題だけでも頭いたいのに、この expansion の仕様である。こんなんどうしようもないもんなぁ。勝手に展開するわけにはいかんしさ。さてなどうしたものか。というかそれ以前に、誰が .pls を使うんだ、とも思う。

色々みててわかったんだけど、どうも、今のところ「.m3u/.m3u8」が最もポピュラーで無難らしいのよね。なのでほんとはそれだけを使うようにしたいんだけどなぁ…、問題は MPC-HC だわ。自分でリーダ書いて PR しちゃおうかしらん、とも思ったりもする…。


2021-07-02追記:
MPC-HC が .m3u/.m3u8 を読めないと思い込んでしまったのだが、読めるようだ。何か問題のある書き方をしちゃってたのかもしれない。となれば、はっきりいって .m3u/.m3u8 がお得。いや、というより「.mpcpl なんか忘れちまえよ」。

あと、各トラックの表示名も埋めれたりするのに対応した。ゆえに、generator モジュールも title を返すことが出来て:

これもエロだ
 1 # -*- coding: utf-8 -*-
 2 import os
 3 import re
 4 from glob import glob
 5 
 6 
 7 def generate():
 8     _srgx = re.compile(r"エロSE無(.*)")
 9     bases = []
10     for fn in sorted(glob("エロ/*.mp3")):
11         bases.append(
12             "*{}".format(
13                 _srgx.match(os.path.basename(fn)).group(1)))
14     for stpat in bases:
15         for d in (
16                 "ノーマル",
17                 "エロ", "エロSE1", "エロSE2",
18                 "痴漢", "痴漢SE1", "痴漢SE2", "痴漢SE3", "痴漢SE4", "痴漢SE5", "痴漢SE6",
19         ):
20             for fn in glob(os.path.join(d, stpat)):
21                 yield dict(
22                     filename=fn,
23                     title="{} - {}".format(os.path.splitext(stpat[1:])[0], d))

全てのフォーマットが、ファイル名以外の表示名を指定できるわけではないし、ワタシの実装もフルにやってるわけではない。

.m3u/.m3u8 はねぇ…、読み出しはいいんだけど、書き出しがさ、これ、ワタシはこのデザインはかなり嫌いだ。けどまぁ、インチキな値は埋めておいた。正確なのが欲しいなら、たとえばいったん AIMP などに読み込ませて、AIMP の書き出しに頼ればいい。相当に冗長に埋めてくれる。こんなんいらん、てくらいに。


2021-07-03追記:
うーん、最初から「python 2.7 には対応しない」と宣言しちゃえば良かったかなぁ…、たまに動くしたまに動かないのが腹立たしい。まぁ誰も困らんとは思うけどさ。

ところで、ffplay を起動できるようにしたのと同じノリで、興味本位で mpg123 についてもちょっと考えてみたのだけど、あぁ、こりゃだめだわ、と思った話。

mpplgen.py が吐き出すプレイリストフォーマットとしての .txt を使えば、mpg123 の「-@」オプションで読み込める。それはいいんだけれど、Windows 版は「-C」オプションの実装がされてなくて、なので、「Ctrl-C での中止以外のあらゆる操作が出来ない」のよね。単体のメディアを再生する場合は「イラっ」で済むかもしれんけれど、プレイリストを再生するのにこれはないわけで、これは「イラっ」では済まなくて「イラっ」。まぁいまさら mpg123 を誰が使うんだ、と思うし、ましてやなんでこれを windows で使いたいんだ、と思う。忘れよう…。


2021-07-03追記 (2):
最初から想像してはいたことだけれど、色々試して確信した「文句」を書いておこうと思う。

根本的に、「プレイリスト」を設計したどこぞの誰か「ども」は、どいつもこいつも、ユーザ目線が欠けてると言っておきたい。言い過ぎ? まぁそうかもしれんけどもやね。

基本的にプレイリストを、なぜユーザは使いたいかと言えば、「好みの再生順序制御」が欲しいというのが第一義で、二義的には「見出しのカスタマイズ」も結構大事、そして、「あわよくば、再生範囲を指定したい」さらには「繰り返し制御(特にいわゆる「A-Bリピート」)」ということ、おおむねエンドユーザがもっとも欲しいのはこれらなわけだ。それと、「検索」がプレイリストのアイテムである考え方もある。けれども、上でワタシが対応したプレイリストフォーマットのいずれも、この願いにフルにこたえてくれるものがない。(「検索」については .wpl がそれが出来、また、ワタシが関わった製品でもそれをしてた。)

本当の致命傷は「残念ながら」プレイリストの設計ではない。実装者のほうである。これがかなりヒドいので、設計がどれだけ良くなっても、期待は出来ないんじゃないかと思う。

「プレイリスト」は、言い換えれば「再生制御スクリプト」なので、ビデオ・オーディオメディアそのものとは別であって良い。たとえば「東京スカパラダイスオーケストラ:Wake Up! feat. ASIAN KUNG-FU GENERATION」が、オーディオファイルとしてのファイル名・MP3タグとしてのタイトルとして与えられているとして、これをプレイリスト管理で再生したい場合に、「スカパラ feat アジカン」で十分だったりするわけだ。だから、たとえば .m3u8 としてこんなふうに書いてみるわけである:

1 #EXTM3U
2 
3 #EXTINF:-1,スカパラ feat アジカン
4 sp.mp3

アーティストなど配信者自身の主張とは無関係に「オレには「スカパラ feat アジカン」で十分だ」としたいわけであろう? けれども、たとえば AIMP は EXTINF を読み出しでは完全に無視し、自力で MP3 タグから内容を発掘して表示し、そして書き出せば当然その値を EXTINF として書き出す。要は「ぼうず、「スカパラ feat アジカン」は間違ってるぜ」てこと。なんでそーなる、と思うが、このふるまいは VLC Media Player も foobar2000 も同じ。「スカパラ feat アジカン」に従ってくれるのは、ワタシが見た中では MPC-HC だけ。

本人じゃないからわからんけどさ、「自動でやってあげる」ことのメリットしか理解できていなくて、ユーザが何をしたいのか、ちゃんと考えてないんだろうなぁと思うよ。タイトルだけじゃなくて、EXTINF に入れてる「-1」はこれは duration を入れるとこなんだけど、おそらくこれの設計者は、「このメディアファイルは 18分13秒の内容が含まれている」ことだけを考えたんじゃないんじゃないかと思うわけね。「性能のための冗長データ」としての設計はもちろん考えられるけれど、きっと「内容は 18分13秒だけど、そのうちの 5分だけ再生しちくり」というニーズも想定したんだろうと思うんだ。だけど、どのプレイヤーも、この値を無視しやがんでやんの。だからこの値、実質何の意味もない。なんなのよそれ。

このことは、エロいやつだとかなり致命的で:

オリジナルのタイトルがわかりにくいケース
 1 #EXTM3U
 2 #PLAYLIST:Class Dispatcher ver1.4
 3 
 4 #EXTINF:-1,貴方が機械になるためのコンディションを作ります
 5 create( C_Image ci ).mp3
 6 
 7 #EXTINF:-1,融ける感じに深化
 8 C_Image melt.mp3
 9 
10 #EXTINF:-1,貴方を忠実な機械として初期化します
11 init().mp3
12 
13 #EXTINF:-1,いよいよ機械となった貴方を起動します
14 activate().mp3
15 
16 #EXTINF:-1,機械の性感を刺激するイメージを読み込みます
17 load( L_Image li ).mp3
18 
19 #EXTINF:-1,足先から脳に快感を
20 L_Image brainStorm.mp3
21 
22 #EXTINF:-1,機械に快感を促すイメージを流し込みます
23 flush( F_Image fi ).mp3
24 
25 #EXTINF:-1,絶頂スイッチを入れる、カウントを2倍に延長、ちょっとじらしを追加
26 F_Image turnONv2.mp3
27 
28 #EXTINF:-1,機械となった貴方に自己処理させます
29 process( P_Image pi ).mp3
30 
31 #EXTINF:-1,女性向けのクリ弄り、刺激強&スンドメ注意
32 P_Image hotTreat4F.mp3
33 
34 #EXTINF:-1,機械を停止し、貴方を人間に戻します
35 deactivate().mp3
背後から見られてもエロ音声だと気付かれたくないので隠したいケース
 1 #EXTM3U
 2 #PLAYLIST:日本昔ばなし
 3 
 4 #EXTINF:-1,1導入-むかしむかしあるところに
 5 1メモリ・リラクゼーション.mp3
 6 
 7 #EXTINF:-1,2本編1-きびだんごください
 8 2メモリ・性感マッサージ.mp3
 9 
10 #EXTINF:-1,3本編2-鬼ヶ島
11 3メモリ・オナニー誘導.mp3
12 
13 #EXTINF:-1,4エピローグ-めでたしめでたし
14 脱脂綿・解除誘導.mp3

Winamp がかなりヒドくて、再生が進むごとにひとつひとつバラしていってしまう。つまり「2本編1-きびだんごください」だと騙したいのに、再生が始まると「2メモリ・性感マッサージ.mp3」だとバレてしまうのだ。これは「実装のレベルが低い」と思いたいけれど、普通に考えれば考え違いをしてるんだよね。正しい優先度について考えてないんだろう。

てな感じで、なんかね、かなりストレスがたまる、これ。なんというか、ソフトウェアを「自分のために」作ってないときにこういうことが起こりがちなんだけれど、これもそれなんだろうか?