おはこんばんにちは!
S高1年!
YAMATO AAAです!!!
初めて記事を書きます!あたたかい目で見ていただけると嬉しいです!
PSPとは?
タイトルのPSPという文字を見て、懐かしいと思ったん人も多いんじゃないでしょうか!?
Wikipediaによると、
「PlayStation Portable(プレイステーション・ポータブル、略称: PSP[3])は、ソニー・コンピュータエンタテインメント(略: SCE)[注 1]が2004年12月12日に発売した携帯型ゲーム機[4]。」
だそうです!
実はPSP、ゲーム以外に、画像、動画、音楽などさまざまなものが再生できる,すごいやつなんですよね!今ほどスマホも普及してないですし、なによりあのプレイステーションの携帯機ですから、DSほどではありませんが当時は多くの人が持っていたそうです!
で、なぜ今回PSPなのかというと、単純に自分がウォークマンみたいに通学等で使ってるからなんですよね!使ってる理由はSensMe™ channelsとか、特定のフォルダ内の曲しか読み込まないから逆に便利だったりとか、リモコンが使いやすかったりとか、ロマンとか、色々あります!
本題
PSPは、\PSP\PLAYLIST\MUSIC\の音楽プレイリストを読み込みます。m3u8ファイルです。バイナリではありません。メモ帳などで編集が可能です。
今回作ったツールはタイトル通り、プレイリストを作りやすくするものです。
仕様
| 種類 | 内容 |
|---|---|
| 推奨OS | Windows |
| 対応ファイル | m3u8,txt |
| 言語 | kotlin(スクリプト) |
| インターフェース | CLI |
| 再生確認機種 | PSP1000 |
使い方
準備 パソコンがkotlinを使える(動かせる)状態にする
- 1 PSPをUSB接続、または挿入しているメモリースティックの \PSP\PLAYLIST\MUSIC\ に、txtファイル、またはm3u8ファイルを作成する
- 2 その中に1行ずつ \MUSIC\ (ルートの中にある方です) の下にある音楽ファイルのパスをwindowsのエクスプローラーで「パスをコピー」し、貼り付ける ※ ここでの順番がプレイリストの順番になります!
- 3 その後ファイルの変更を保存し、コマンドプロンプトやパワーシェルで
PS C:\Users\UserName> kotlin <本スクリプトのパス> <プレイリストのパス>
を入力し実行すると…出来上がり!(<と>は入力しない)
実行例
元ファイルの中身
(H:はPSPの場所です)
(コピペ時に¥は\にされてしまいました…)
"H:\MUSIC\ボイスレコーダー\FOLDER02\120503_001.MP3"
"H:\MUSIC\ボイスレコーダー\FOLDER04\120120_001.MP3"
"H:\MUSIC\ボイスレコーダー\FOLDER05\120111_001.MP3"
"H:\MUSIC\ボイスレコーダー\FOLDER05\120101_002.MP3"
"H:\MUSIC\ボイスレコーダー\FOLDER05\120101_001.MP3"
"H:\MUSIC\ボイスレコーダー\FOLDER01\120101_010.MP3"
"H:\MUSIC\ボイスレコーダー\FOLDER01\120101_009.MP3"
"H:\MUSIC\ボイスレコーダー\FOLDER01\120101_007.MP3"
"H:\MUSIC\ボイスレコーダー\FOLDER01\120101_005.MP3"
"H:\MUSIC\ボイスレコーダー\FOLDER01\120101_004.MP3"
"H:\MUSIC\ボイスレコーダー\FOLDER01\120101_002.MP3"
ちなみに、ここがWindows推奨の原因でして。
"H:\MUSIC\ボイスレコーダー\FOLDER02\120503_001.MP3"という、エクスプローラーの「パスのコピー」で得られるパスの形を元にして変換するようにしています。なのでこの形に記入すればmacでもlinuxでもできると思います。多分
txtファイルの場合
PS C:\Users\UserName> kotlin "C:\Users\UserName\Downloads\PlayListsPSP.kts" "H:\PSP\PLAYLIST\MUSIC\FileName.txt"
今から処理を始めます
処理中です: /MUSIC/ボイスレコーダー/FOLDER02/120503_001.MP3
処理中です: /MUSIC/ボイスレコーダー/FOLDER04/120120_001.MP3
処理中です: /MUSIC/ボイスレコーダー/FOLDER05/120111_001.MP3
処理中です: /MUSIC/ボイスレコーダー/FOLDER05/120101_002.MP3
処理中です: /MUSIC/ボイスレコーダー/FOLDER05/120101_001.MP3
処理中です: /MUSIC/ボイスレコーダー/FOLDER01/120101_010.MP3
処理中です: /MUSIC/ボイスレコーダー/FOLDER01/120101_009.MP3
処理中です: /MUSIC/ボイスレコーダー/FOLDER01/120101_007.MP3
処理中です: /MUSIC/ボイスレコーダー/FOLDER01/120101_005.MP3
処理中です: /MUSIC/ボイスレコーダー/FOLDER01/120101_004.MP3
処理中です: /MUSIC/ボイスレコーダー/FOLDER01/120101_002.MP3
変換は終了しました</MUSIC/ボイスレコーダー/FOLDER02/120503_001.MP3
/MUSIC/ボイスレコーダー/FOLDER04/120120_001.MP3
/MUSIC/ボイスレコーダー/FOLDER05/120111_001.MP3
/MUSIC/ボイスレコーダー/FOLDER05/120101_002.MP3
/MUSIC/ボイスレコーダー/FOLDER05/120101_001.MP3
/MUSIC/ボイスレコーダー/FOLDER01/120101_010.MP3
/MUSIC/ボイスレコーダー/FOLDER01/120101_009.MP3
/MUSIC/ボイスレコーダー/FOLDER01/120101_007.MP3
/MUSIC/ボイスレコーダー/FOLDER01/120101_005.MP3
/MUSIC/ボイスレコーダー/FOLDER01/120101_004.MP3
/MUSIC/ボイスレコーダー/FOLDER01/120101_002.MP3>
書き込めました
のようになり、同じディレクトリに同じ名前のm3u8ファイルが作成されます。
m3u8ファイルの場合
PS C:\Users\UserName> kotlin "C:\Users\UserName\Downloads\PlayListsPSP.kts" "H:\PSP\PLAYLIST\MUSIC\FileName.m3u8"
今から処理を始めます
処理中です: /MUSIC/ボイスレコーダー/FOLDER02/120503_001.MP3
処理中です: /MUSIC/ボイスレコーダー/FOLDER04/120120_001.MP3
処理中です: /MUSIC/ボイスレコーダー/FOLDER05/120111_001.MP3
処理中です: /MUSIC/ボイスレコーダー/FOLDER05/120101_002.MP3
処理中です: /MUSIC/ボイスレコーダー/FOLDER05/120101_001.MP3
処理中です: /MUSIC/ボイスレコーダー/FOLDER01/120101_010.MP3
処理中です: /MUSIC/ボイスレコーダー/FOLDER01/120101_009.MP3
処理中です: /MUSIC/ボイスレコーダー/FOLDER01/120101_007.MP3
処理中です: /MUSIC/ボイスレコーダー/FOLDER01/120101_005.MP3
処理中です: /MUSIC/ボイスレコーダー/FOLDER01/120101_004.MP3
処理中です: /MUSIC/ボイスレコーダー/FOLDER01/120101_002.MP3
変換は終了しました</MUSIC/ボイスレコーダー/FOLDER02/120503_001.MP3
/MUSIC/ボイスレコーダー/FOLDER04/120120_001.MP3
/MUSIC/ボイスレコーダー/FOLDER05/120111_001.MP3
/MUSIC/ボイスレコーダー/FOLDER05/120101_002.MP3
/MUSIC/ボイスレコーダー/FOLDER05/120101_001.MP3
/MUSIC/ボイスレコーダー/FOLDER01/120101_010.MP3
/MUSIC/ボイスレコーダー/FOLDER01/120101_009.MP3
/MUSIC/ボイスレコーダー/FOLDER01/120101_007.MP3
/MUSIC/ボイスレコーダー/FOLDER01/120101_005.MP3
/MUSIC/ボイスレコーダー/FOLDER01/120101_004.MP3
/MUSIC/ボイスレコーダー/FOLDER01/120101_002.MP3>
書き込めました
のようになり、
指定したファイル(H:\PSP\PLAYLIST\MUSIC\FileName.m3u8)が書き換えられます。
コード部分
import java.io.File
run{
try {
if (args.isEmpty()) {
println("使い方: kotlin <このスクリプトのパス> <ファイル名>")
return@run
}
println("今から処理を始めます")
if (!(args[0].endsWith(".m3u8") || args[0].endsWith(".txt"))) {
return@run
}
val playLIst = File(args[0])
val text: List<String> = playLIst.readLines()
val outputTextlist = text.map { line ->
val trimmed = line.trim('"')
val converted = if (trimmed.startsWith("/MUSIC")) {
trimmed
} else {
val noDrive = trimmed.replace(Regex("^[A-Z]:[\\\\¥]?"), "")
"/" + noDrive.replace("\\", "/").replace("¥", "/")
}
println("処理中です: $converted")
converted
}
val outputText = outputTextlist.joinToString("\n")
println("変換は終了しました" + "<" + outputText + ">")
if (args[0].endsWith(".m3u8")) {
playLIst.writeText(outputText)
println("書き込めました")
} else if (args[0].endsWith(".txt")) {
val Filename = playLIst.nameWithoutExtension
val Filepath = playLIst.parent
var newm3u8 = File(Filepath,Filename + ".m3u8")
newm3u8.createNewFile()
newm3u8.writeText(outputText)
println("書き込めました")
}
return@run
}catch (e: Exception){
println("エラーです" + "\n" + e )
return@run
}
}
このコード、実はプログラミング初めて数ヶ月の頃にChatGPTを頼りまくって書いたものなので、だいぶアレです。ご容赦下さい。
上から、
- 1 パスの入力がなかったら使い方を表示、
- 2 拡張子がtxtかm3u8でなかったら処理を終了
- 3 「"ドライブの場所(H:など)¥MUSIC¥以下パス"」を「/MUSIC/以下パス」に(PSPが読めるように)。もともと「/MUSIC/以下パス」な行はそのまま
- 4 m3u8ならそのファイルに、txtなら同じ名前のm3u8を作ってそこに書き込み
という感じだと思います。なにぶんだいぶ前に作ったやつなので…間違ってたらすみません
最後に
いかがでしたでしょうか。
正直需要は全くないと言っていいほどニッチなツールですが、私が今まで作ってきたものの中で一番使用頻度が高いのはこいつです。
前までは、プレイリスト作るってなった時に、いちいちH:や”を消して¥を\に変えて、たまに誤字や消し忘れで読み込まなくなって、大量の文字列の中から原因を探し出して直して…しかもこれが100曲のプレイリストとかになってくるとそれはもう地獄でした。
しかし、これを作成したことにより、エクスプローラーからメモ帳にパスをコピペしてツールに投げればはい完成と超お手軽。散歩の時やWiiFitの時のプレイリストをいくらでも作れるようになり、QOLが爆上がりしました。多分。
こういう絶対自分しか使わないツールを作れるのがプログラミングを学ぶ利点だと思います。これのおかげで多分24時間ぐらい時間節約したんじゃないかな。
ということで、もしよかったらPSPで音楽を聞いてみるのはいかがでしょうか。
途中にちょろっと書きましたが、SensMe™ channelsという音楽を分類してシャッフルしてくれるものがあって、すっごい便利なので超おすすめです!(公式からの配布は終了しましたが…)
容量もmicroSDカードをメモリースティックDuo(多分)に変換するアダプタを使えば32GBとかはいります!
問題は音源を準備しなければならないことですが、この機会にCDもおすすめします!
あとMediaGoもっとくとすっごい便利です!(こちらも公式のダウンロードサービスやサポートは終了しましたが…)
というわけで、ここまで読んでくださりありがとうございました!