スクリプトを使ってiTunesをいじった話
あれは夢だったか・・・
iTunesのバグのくだりは、今やってみても再現しないので、きっと夢で見た話です。
Track 10 (Left Handshake)
Skinny Puppyの『Last Rights』というアルバムをiTunesで聴いていた時、画面を見て気がついた。
10曲目の再生回数だけが上がっていない。おかしい。
この曲(?)はそもそも曰くつきで、権利関係の問題で削除されているんだけど、削除されていないという。
曲は削除されているんだけど、CD上はゼロ秒の曲として残っています。Track 10がゼロ秒で残っていると。
さすがにSpotifyにはないですね。
ダブルクリックすると、再生したのかエラーなのかわからん感じで、一瞬で次の曲へ移動。再生回数は上がらず。
VBScriptで再生回数を修正
どうでもいいけど、見た目が気持ち悪いので、その昔どこかで拾ってきた VBScript で修正することにした。
(使用される場合は自己責任でお願いします。)
Option Explicit
Dim iTunesApp ' iTunes.Application
Dim SelectedTracks ' iTunes上で選択されている曲(複数選択可)
Dim i ' カウンター
Dim TargetTrack ' 処理対象の曲
Dim NewPlayedCount ' 新しい再生回数
Set iTunesApp = WScript.CreateObject("iTunes.Application")
Set SelectedTracks = iTunesApp.SelectedTracks
For i = 1 To SelectedTracks.Count
Set TargetTrack = SelectedTracks.Item(i)
NewPlayedCount = InputBox(TargetTrack.Name, "新しい再生回数の設定", TargetTrack.PlayedCount)
If Trim(NewPlayedCount) <> "" And isNumeric(NewPlayedCount) = True Then
TargetTrack.PlayedCount = NewPlayedCount
End If
Next
iTunesのバグか?
しかし、、、反応しない。iTunesの仕様が変わったか?
Windowsの仕様が変わったか?
キーワードをあれこれ変えながらネット検索すること数日。
こんな記事を見つけました。
まさにこれや―、と歓喜!
Set SelectedTracks = iTunesApp.BrowserWindow.SelectedTracks
BrowserWindowを挟むと回避できるのね。
2009年の記事!そんな前からこんな状態か。
確かにPowerShellでデバッグしてみると、 iTunesApp.SelectedTracks は null になってる。
いつの間にか問題は解消されていた
それから数カ月後、せっかくだから記事にしてみるかと書き始め、件の10曲目をダブルクリックする。
あれ?再生回数上がるやん。
再生時間が短すぎてカウントされんのかと思ったけど、そうでもない。
しかも、BrowserWindow挟まんスクリプトで再生回数が更新されるやん。
iTunesのバージョンを確認すると「12.13.3.2」
2024/9/19リリースとなってる。
(この記事執筆の1週間前。自動更新にしておいたのが仇になったか。良かったのか。)
このタイミングでバグ修正された?まじで?ググっても分からん。
そもそもこんな機能使う人おらんのやろうな。
おまけのPowerShell版
おまけでPowerShellに移植しました。
といっても中でVB使ってます。InputBox使いたいので。
自己責任で使用をお願いします。
PowerShellだと起動するのが面倒ですよね。
Set-PSDebug -Strict
Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"
# PowerShellでVisualBasicを利用する
Add-Type -AssemblyName Microsoft.VisualBasic
# iTunes アプリケーションのオブジェクトを作成
$iTunesApp = New-Object -ComObject iTunes.Application
$SelectedTracks = $iTunesApp.SelectedTracks
# 各トラックに対して処理を行う
foreach($TargetTrack in $SelectedTracks) {
# 新しい再生回数の入力を要求するダイアログを表示
$NewPlayedCount = [Microsoft.VisualBasic.Interaction]::InputBox(
"現在の再生回数: $($TargetTrack.PlayedCount)`n新しい再生回数を入力してください。",
"新しい再生回数の設定",
$TargetTrack.PlayedCount.ToString()
)
# 入力がキャンセルされなかった場合
if ($NewPlayedCount -ne "") {
# 数値かどうかをチェック
if ([int]::TryParse($NewPlayedCount, [ref]$null)) {
# 新しい再生回数を設定
$TargetTrack.PlayedCount = [int]$NewPlayedCount
} else {
# 数値でない場合の警告を表示
[System.Windows.Forms.MessageBox]::Show("無効な入力です。再生回数は数値でなければなりません。", "エラー")
}
}
}
MSはInputBoxを自作せよと
MS公式はInputBoxを自作する方法を教えてくれてるんですが、めんどくさい。
さらに詳しく知りたい人は
iTunes COM Interfacesについての資料は、Apple Developer のサイトでダウンロードできます。
ログインしないと見れないけど、アカウント持ってる人は、
https://developer.apple.com/download/all/?q=iTunes%20COM で検索。
おしまい
なんだ、夢か。という話でした。
ちゃんちゃん
この記事が気に入ったらサポートをしてみませんか?