Macで作成したプレイリストをSony WALKMAN NW-A306で正しく使う方法

Macのミュージックアプリ(旧iTunes)で作成したプレイリストをそのままSONY WALKMAN NW-A306(Android) に転送して再生しようとしても、プレイリストが認識されません。
その原因はファイルパス形式の不一致をはじめ様々な要因がありました。
この記事では 公式仕様・実体験・簡単な手順 を基に、macOSのプレイリストをWALKMANで正しく認識できるようにする方法をわかりやすく解説します。

アルバムアートが表示されない
プレイリストがない、アルバムアートが表示されない

macOSのプレイリストがWALKMANで認識されない理由

Macのプレイリスト(m3u)は絶対パス形式なのでWALKMANは正しく読み込むことができません。WALKMANの認識できるプレイリストは相対パス仕様なので、プレイリスト内の曲の位置を正しく認識できないからです。これは SONY の公式サポートでも指摘されている仕様です。

SONY公式プレイリスト仕様:
https://helpguide.sony.net/gbmig/44666681/v1/eng/contents/03/01/04/04.html

絶対パスと相対パスの違い

Macが出力するプレイリストはF:\Music\Artist\のような絶対パスで曲の位置を指定します。一方、WALKMANはmicroSDや内部ストレージのフォルダ構造内「..\Artist\…」のように相対的なパスのみしか解釈できないため、書き出したm3u が無効になります。

公式仕様の前提

SONY の公式ヘルプによると、WALKMANはファイル転送自体はWindowsやMacで可能ですが、プレイリストとして解釈できるのはWALKMAN内部の構造に沿ったパス形式である必要があるとされています。

SONY公式Q&A:
https://knowledge.support.sony.jp/electronics/support/articles/S1304100048930

WALKMAN対応プレイリスト形式

WALKMANはm3u / m3u8形式を認識しますが、UTF-8(BOM無し)かつ相対パス形式であることが必須です。これは実体験でも再現性があり、直接プレイリストとして認識できる形式です。

m3uもm3u8もUTF-8で出力している限り大して変わりません。一番の違いは多言語対応でしょうか。m3uはそれほど得意ではなく日本語で文字化けすることもあります。m3u8は世界中の言語に対応しているといわれています。

WALKMANが読み込む形式

WALKMANは相対パスかつUTF-8(BOMなし)形式のプレイリストを安定して読み込みます。しかし、絶対パスから相対パスに変換してもMacのプレイリストを認識することはできませんでした。それは絶対パスのほかにも次の要因が関わってくるからです。

  • UNIXパスからWindowsパス
  • /Users/…/Media.localized/Music/以降だけのパス
  • URLデコード(%20などが文字列に入っている)
  • NFDからNFC
  • ローマ数字からASCII
  • 絶対パスから相対パス

少なくともこれくらいの変換作業をしなくてはMacのプレイリストをWALKMANで認識することはできません。MacとWALKMAN、相性がとてつもなく悪いと思います。

MacのプレイリストをWALKMAN用に変換する方法

Macで書き出したm3uプレイリストをWindowsで相対パス+UTF-8(BOMなし)形式と上記様々な問題を解決した形に変換するスクリプトにより、WALKMAN で正しく認識・再生できます。

Macから書き出したプレイリストは見事に絶対パスでした
Macから書き出したプレイリストは見事に絶対パスでした

Macで書き出したm3uをテキストエディタで開くと、見事なまでの絶対パスでした。

変換するための準備

PowerShellにスクリプトを張り付けるのですが、Windows PowerShellではなく、PowerShell 7を使うことになります。そのため、まずはPowerShell 7のインストールからはじめます。

公式ダウンロード場所:
PowerShell
https://github.com/PowerShell/PowerShell
AssetsからWindows用のmsiを選びます。例:PowerShell-7.5.4-win-x64.msi
インストールするとスタートメニューに「PowerShell」(紺色)が追加されます。

スクリプト設計思想

Macのミュージック.appで書き出したプレイリストはWALKMANでは絶対に読めない

出力されたm3uをそのまま加工するのではなく、WALKMANが理解できる形式に完全変換することを目的にしています。

ミュージック.appのm3uが抱える問題は複合的で単純な置き換えでは絶対に解決できません。このスクリプトはその複合的な問題をすべて潰すをコンセプトに作ってみました。

m3uの変換は段階的に行う

Mac → Windows → WALKMANの順に必要な変換を段階的に積み重ねていきます

  1. Macの絶対パスから、Musicフォルダ以降を抽出
  2. UNIXパスをWindowsパスに変換
  3. URLデコード(日本語復元)
  4. NFDからNFC(Macの濁点問題を解消)
  5. ローマ数字をASCII
  6. WALKMANの絶対パスを構築
  7. プレイリストからの相対パスに変換
  8. UTF-8 (BOMなし)でm3u8として保存する

Macの癖を取り除き、WALKMANの仕様に完全準拠させるという思いです。

NW-A306用プレイリスト変換スクリプト

WALKMANの仕様に完全準拠させたスクリプトです。C:\Music\Playlistsというフォルダを作り、Macで出力したm3uを全て入れておいてください。

また仮にWALKMANのmicroSDカードのドライブはF:\でプレイリストはF:\Music\Playlists\に変換後出力されるようになっています。音楽が格納されているフォルダはF:\Music\Artist\以下です。無いフォルダは作ってください。

# 設定

$PlaylistDir = "C:\Music\Playlists"
$MacMusicRoot = "/Users/kazuma/Music/Music/Media.localized/Music/"

$WalkmanMusicRoot   = "F:\Music"
$WalkmanArtistRoot  = Join-Path $WalkmanMusicRoot "Artist"
$WalkmanPlaylists   = Join-Path $WalkmanMusicRoot "Playlists"

$Utf8NoBom = New-Object System.Text.UTF8Encoding($false)

# ローマ数字からASCII
$RomanMap = @{
    "Ⅰ"="I"; "Ⅱ"="II"; "Ⅲ"="III"; "Ⅳ"="IV"; "Ⅴ"="V"; "Ⅵ"="VI";
    "Ⅶ"="VII"; "Ⅷ"="VIII"; "Ⅸ"="IX"; "Ⅹ"="X"; "Ⅺ"="XI"; "Ⅻ"="XII"
}

function Convert-RomanToAscii([string]$text) {
    foreach ($k in $RomanMap.Keys) {
        $text = $text -replace [regex]::Escape($k), $RomanMap[$k]
    }
    return $text
}

function Normalize-Text([string]$text) {
    if ([string]::IsNullOrEmpty($text)) { return $text }
    $normalized = $text.Normalize([Text.NormalizationForm]::FormC)
    $normalized = Convert-RomanToAscii $normalized
    return $normalized
}

# メイン処理

if (-not (Test-Path $WalkmanPlaylists)) {
    New-Item -ItemType Directory -Path $WalkmanPlaylists -Force | Out-Null
}

$m3uFiles = Get-ChildItem -Path $PlaylistDir -Filter *.m3u

foreach ($m3u in $m3uFiles) {

    $inputM3U   = $m3u.FullName
    $baseName   = $m3u.BaseName
    $outputM3U8 = Join-Path $WalkmanPlaylists ($baseName + ".m3u8")

    Write-Host "=== 変換中: $($m3u.Name) → $($baseName).m3u8 ==="

    $lines = Get-Content -Path $inputM3U -Encoding UTF8
    $out   = @()

    foreach ($line in $lines) {

        if ($line.StartsWith("#") -or [string]::IsNullOrWhiteSpace($line)) {
            $out += $line
            continue
        }

        $work = $line.Trim()

        $idx = $work.IndexOf($MacMusicRoot)
        if ($idx -ge 0) {

            # MacのMusicルート以降を抽出
            $relativeFromMacRoot = $work.Substring($idx + $MacMusicRoot.Length)

            # UNIXパスからWindowsパスへ
            $relativeFromMacRoot = $relativeFromMacRoot -replace "/", "\"

            # URLデコード(日本語復元)
            $relativeFromMacRoot = [System.Web.HttpUtility]::UrlDecode($relativeFromMacRoot)

            # NFDからNFCとローマ数字からASCII
            $relativeFromMacRoot = Normalize-Text $relativeFromMacRoot

            # WALKMAN側の絶対パス
            $walkmanAbs = Join-Path $WalkmanArtistRoot $relativeFromMacRoot

            # PowerShell 7の相対パス生成
            $relativeForPlaylist = [System.IO.Path]::GetRelativePath($WalkmanPlaylists, $walkmanAbs)

            $out += $relativeForPlaylist
        }
        else {
            $out += (Normalize-Text $work)
        }
    }

    [System.IO.File]::WriteAllLines($outputM3U8, $out, $Utf8NoBom)
    Write-Host " → 出力: $outputM3U8"
}

Write-Host ""
Write-Host " すべてのm3uをm3u8に一括変換できました "

このスクリプトを実行すると、Cドライブに入れたMacのm3uが自動変換されてFドライブのプレイリストフォルダにm3u8として保存されます。

この処理により、NW-A306でプレイリストが正しく認識し再生できました。

アルバムアートが表示されない場合の対処

埋め込み形式(JPEG推奨)と画像仕様(1,000×1,000px以下)が原因です。

原因は「埋め込み」と「画像仕様」

NW-A306 はかなり厳格です。

  • アルバムアートは埋め込み必須です(外部画像は不可)
  • JPEG形式を強く推奨(JPEG原理主義と呼びたくなります)
  • 1,000x1,000px以上は無視されます

Macのミュージック.app側での対処

  • 曲の情報を表示する
  • アートワークの有無を確認
  • WALKMANで表示されない曲の場合、アルバムアートをJPEGに変換後、再度貼り付けます

図のようにアートワークをデスクトップに置いてから、また戻すと埋め込むことは簡単です。ただし表示させるには、画像がJPEGに変換されてあることが前提です。

アルバムアートを表示させる方法
アルバムアートを表示させる方法

NW-A306 の再スキャンを安定させる方法

WALKMANがmicroSD内のファイルを再スキャンする際、存在しない曲パスが残っていると不安定になることがあります。不要曲の除去スクリプトを併用することで、再スキャンの失敗を防げます。

存在しない曲を除去するPowerShell

便宜的に、プレイリストはC:\Playlists\に置いてください。またmicroSDのドライブは「F:\」とします。

$Playlist = "C:\Playlists\playlist.m3u8"
$MusicRoot = "F:\Music"

$utf8NoBom = New-Object System.Text.UTF8Encoding($false)

$out = foreach ($line in Get-Content $Playlist -Encoding UTF8) {

    if ($line.StartsWith("#") -or [string]::IsNullOrWhiteSpace($line)) {
        $line
        continue
    }

    $fullPath = Join-Path $MusicRoot ($line -replace '^../Music/', '')

    if (Test-Path $fullPath) {
        $line
    }
}

[System.IO.File]::WriteAllLines($Playlist, $out, $utf8NoBom)

これで再スキャンも安全に行えると思います。

実体験:NW-A306での認識・再生検証

上記手順に従い変換→転送→再スキャンを行った結果、Playlistsが表示され、曲順も維持された状態で再生できました。同様の手順は他モデルでも応用できます。

FAQ

Q
Walkman でプレイリストが表示されない原因は何ですか?
A

多くの場合、m3uファイル内の絶対パス形式がWalkmanの仕様と合わないことが原因です。

Q
NW-A306はm3uとm3u8のどちらに対応していますか?
A

m3uおよびm3u8形式に対応していますが、文字化けのことを考えるとm3u8に変換した方がよさそうです。

Q
Mac標準のミュージック.appで書き出したプレイリストは使えますか?
A

そのままでは正しく動作しないケースが多いため、上記変換手順が必要です。。

Q
MacからMusic Centerで転送できますか?
A

SONY公式ではWindows向けのMusic Centerを推奨しており、MacのContent Transferが対応していないモデルもあります。

まとめ

Macで作成したプレイリストをSONY WALKMANで正しく再生させるためには、パス形式の違いという仕様上の制約を理解し、相対パス形式に変換することがポイントです。またWindows PowerShellではなく、PowerShell 7を活用した変換方法で実体験として確実に再生できることを確認しました。

関連記事

コメント

  1. […] iPod classicからWalkmanに乗り換えてみました> […]