목차

  1. 앨범별 임의 재생
  2. 방법
  3. 결론
  4. 단점
  5. iOS 6.1.2 업데이트

앨범별 임의 재생

iTunes에는 앨범별 임의 재생을 이용해 음악을 들을 수 있는 기능이 있습니다.

iTunes

개인적으로 아티스트가 앨범의 곡 배치 또한 잘 생각해서 만들어야 한다고 생각하고, 또 그렇게 만든다고 믿는 편입니다. 그래서 보통 앨범에 있는 곡들을 1번 트랙부터 순서대로 들으려는 경향이 있습니다.

그런데 앨범의 곡들을 순서대로 들으려니 문제가 하나 있습니다. 아이폰에서 앨범의 곡들을 순서대로 듣는 방법은 앨범을 선택해서 들어간 후, 1번 트랙을 터치하는 것뿐이라는 겁니다. 그러면 마지막 트랙이 끝났을 때 아이폰 스피커 혹은 이어폰에서 정적만 흐르고 있겠죠. 하지만 전 귀찮은 것을 상당히 싫어하는 사람이라, 다음 앨범은 어떤 걸 선택해도 큰 상관이 없습니다. 다만 노래가 끊기지 않고 계속 나왔으면 좋겠어요.

하지만 딱히 방법이 없어서 그냥 앨범을 하나씩 순서대로 듣거나 전체 노래를 임의 재생하면서 듣고 다녔습니다. iOS 6이 나온 후로는 순정 아이폰으로 잘 쓰고 다녔죠. 그러다가 iOS 6.1 업데이트가 출시되고, 얼마 되지 않아 탈옥 툴이 공개된 겁니다. 탈옥을 하고 몇 가지 트윅을 찾으면서 이런 생각을 하게 됐습니다.

앨범별 임의 재생을 구현해 놓은 트윅이 있지 않을까?

하지만 찾는 것은 쉽지 않았습니다. 우선 그 기능을 구현한 트윅은 없는 것처럼 보였습니다. 음악과 관련된 트윅은 대부분 기존의 음악 어플을 쉽게 제어할 수 있도록 하는 것이었고, 임의 재생과 관련된 것은 찾기 어려웠습니다.

그래도 희망의 끈을 놓지 않고 계속 검색해 보던 중에, 앨범별 임의 재생에 관한 질문을 발견하게 되었습니다.

그렇습니다! 저처럼 앨범별 임의 재생을 하고 싶은 사람이 올린 질문이었습니다. 댓글을 살펴보면 탈옥한 아이폰에서 작동한다는 글을 볼 수 있었습니다. 물론 2007년에 작성된 댓글이라서 지금의 iOS에 그대로 적용하면 작동하지 않습니다.

하지만 추가적인 검색과 삽질로, 결국 iOS 6.1이 깔려 있는 아이폰에서 ‘앨범별 임의 재생’으로 음악을 듣는 방법을 알아냈습니다.

방법

우선 몇 가지 준비물이 필요한데, 제 환경은 다음과 같았습니다.

  1. iOS 6.1에서 탈옥된 아이폰 4
  2. iFunBox
  3. 텍스트 편집기

이건 제가 테스트한 환경일 뿐이므로 하위 iOS나 다른 iOS 기기에서도 가능한 방법일 수 있습니다. iBackupBot을 이용하면 탈옥되지 않은 iOS 기기에도 적용될 가능성이 있습니다. 하지만 시스템 파일을 바꾸는 것이므로 불가능할 가능성이 높습니다. 혹시 순정 iOS 기기에서 성공하셨다면 알려주시기 바랍니다.

이제 본론으로 들어가겠습니다. 변경할 파일은 단 하나입니다.

/System/Library/PreferenceBundles/MusicSettings.bundle/Music.plist

확장자는 plist지만 그냥 메모장으로 열어도 편집할 수 있을 것입니다. 이 파일에는 설정 - 음악에서 볼 수 있는 모든 정보를 담고 있습니다.

설정 - 음악

위 사진에서 보이는 것들의 정보를 가지고 있다고 생각하시면 됩니다. 소스를 직접 봅시다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>items</key>
  <array>
    <dict>
      <key>PostNotification</key>
      <string>com.apple.mobileipod-prefsChanged</string>
      <key>cell</key>
      <string>PSSwitchCell</string>
      <key>default</key>
      <false/>
      <key>defaults</key>
      <string>com.apple.mobileipod</string>
      <key>id</key>
      <string>ShakeToShuffle</string>
      <key>key</key>
      <string>MusicShakeToShuffleEnabledSetting</string>
      <key>label</key>
      <string>SHAKE_TO_SHUFFLE</string>
    </dict>
    <dict>
      <key>PostNotification</key>
      <string>com.apple.mobileipod-prefsChanged</string>
      <key>cell</key>
      <string>PSSwitchCell</string>
      <key>default</key>
      <false/>
      <key>defaults</key>
      <string>com.apple.mobileipod</string>
      <key>id</key>
      <string>SoundCheck</string>
      <key>key</key>
      <string>MusicSoundCheckEnabledSetting</string>
      <key>label</key>
      <string>SOUND_CHECK_IPHONE</string>
    </dict>
    <dict>
      <key>PostNotification</key>
      <string>com.apple.mobileipod-prefsChanged</string>
      <key>cell</key>
      <string>PSLinkListCell</string>
      <key>default</key>
      <string>Off</string>
      <key>defaults</key>
      <string>com.apple.mobileipod</string>
      <key>detail</key>
      <string>EQPresetListController</string>
      <key>get</key>
      <string>EQ</string>
      <key>id</key>
      <string>EQ</string>
      <key>key</key>
      <string>MusicEQPresetName</string>
      <key>label</key>
      <string>EQ_IPHONE</string>
      <key>set</key>
      <string>setEQ:</string>
    </dict>
    <dict>
      <key>cell</key>
      <string>PSLinkListCell</string>
      <key>detail</key>
      <string>VolumeLimitController</string>
      <key>get</key>
      <string>volumeLimitEnabled:</string>
      <key>id</key>
      <string>VolumeLimit</string>
      <key>label</key>
      <string>VOLUME_LIMIT_IPHONE</string>
    </dict>
    <dict>
      <key>PostNotification</key>
      <string>com.apple.mobileipod-prefsChanged</string>
      <key>cell</key>
      <string>PSSwitchCell</string>
      <key>default</key>
      <true/>
      <key>defaults</key>
      <string>com.apple.mobileipod</string>
      <key>id</key>
      <string>LyricsAndPodcastInfo</string>
      <key>key</key>
      <string>LyricsAndPodcastInfoEnabledDefaultsKey_1_Key</string>
      <key>label</key>
      <string>LYRICS_AND_PODCAST_INFO_IPHONE</string>
    </dict>
    <dict>
      <key>PostNotification</key>
      <string>com.apple.mobileipod-prefsChanged</string>
      <key>cell</key>
      <string>PSSwitchCell</string>
      <key>default</key>
      <true/>
      <key>defaults</key>
      <string>com.apple.mobileipod</string>
      <key>id</key>
      <string>GroupByAlbumArtistPad</string>
      <key>key</key>
      <string>MusicGroupByAlbumArtistEnabledSetting</string>
      <key>label</key>
      <string>GROUP_BY_ALBUM_ARTIST_IPAD</string>
    </dict>
    <dict>
      <key>PostNotification</key>
      <string>com.apple.mobileipod-prefsChanged</string>
      <key>cell</key>
      <string>PSSwitchCell</string>
      <key>default</key>
      <true/>
      <key>defaults</key>
      <string>com.apple.mobileipod</string>
      <key>id</key>
      <string>GroupByAlbumArtistPhone</string>
      <key>key</key>
      <string>MusicGroupByAlbumArtistEnabledSetting</string>
      <key>label</key>
      <string>GROUP_BY_ALBUM_ARTIST_IPHONE</string>
    </dict>
  </array>
</dict>
</plist>

이해할 수 없는 문구들이 많이 있습니다. 좀더 자세히 봅시다. com.apple.mobileipod이라는 문구가 보이네요. iPod과 관련된 무언가라는 것은 알 수 있습니다. 사진과 코드의 순서에 주목해 봅시다. 각 <key>id</key> 아래의 <string></string> 사이에 있는 문구들을 보면, 위에서부터 아래로 ShakeToShuffle, SoundCheck, EQ, VolumeLimit, LyricsAndPodcastInfo, GroupByAlbumArtistPad, GroupByAlbumArtistPhone인데, 위의 사진도 한 번 봅시다. 흔들어서 임의 재생, 음량 자동 조절, EQ, 음량 제한, 가사 및 Podcast 정보, 앨범 아티스트별 그룹. 이제 감이 오셨나요?

<dict>…</dict>설정 - 음악에서 하나의 셀을 의미합니다. 조금만 더 보면, <key>cell</key> 아래의 <string></string> 사이의 문구를 봤을 때, PSSwitchCell, PSLinkListCell 이 두 가지 종류가 존재한다는 것을 알 수 있습니다. 이름에서도 알 수 있듯이, PSSwitchCell은 스위치 형태의 셀이고, PSLinkListCell은 터치했을 때 여러 옵션 중 하나를 선택할 수 있는 셀입니다.

지금까지 아이폰에서는 노래별 임의 재생만을 할 수 있었습니다. 여기에서 우리는 메뉴에 노래별 임의 재생이나 앨범별 임의 재생을 선택할 수 있도록 PSLinkListCell을 하나 만들 것입니다. 위치는 음량 자동 조절 바로 아래가 적당할 것 같습니다. <string>SOUND_CHECK_IPHONE</string>으로 끝나는 <dict>…</dict> 바로 아래에 다음 코드를 추가하시면 됩니다.

<dict>
  <key>PostNotification</key>
  <string>com.apple.mobileipod-prefsChanged</string>
  <key>cell</key>
  <string>PSLinkListCell</string>
  <key>defaults</key>
  <string>com.apple.mobileipod</string>
  <key>detail</key>
  <string>PSListItemsController</string>
  <key>key</key>
  <string>MusicShuffleSetting</string>
  <key>label</key>
  <string>임의 재생</string>
  <key>validTitles</key>
  <array>
    <string>노래별</string>
    <string>앨범별</string>
  </array>
  <key>validValues</key>
  <array>
    <string>Songs</string>
    <string>Albums</string>
  </array>
</dict>

우리가 바꿀 key는 바로 MusicShuffleSetting입니다. 이게 가장 중요한 포인트인데, MusicShuffleSetting이 현재 임의 재생 유형을 나타내고 있습니다. 값은 Songs거나 Albums가 되는데, 아이폰에서는 Songs로만 설정되어 있어서 노래별 임의 재생만을 할 수 있었던 것입니다. 이제 이 설정을 우리가 바꿀 수 있게 만듦으로써 아이폰에서도 앨범별 임의 재생을 할 수 있게 됩니다.

결론

아래는 수정한 Music.plist의 최종 결과입니다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>items</key>
  <array>
    <dict>
      <key>PostNotification</key>
      <string>com.apple.mobileipod-prefsChanged</string>
      <key>cell</key>
      <string>PSSwitchCell</string>
      <key>default</key>
      <false/>
      <key>defaults</key>
      <string>com.apple.mobileipod</string>
      <key>id</key>
      <string>ShakeToShuffle</string>
      <key>key</key>
      <string>MusicShakeToShuffleEnabledSetting</string>
      <key>label</key>
      <string>SHAKE_TO_SHUFFLE</string>
    </dict>
    <dict>
      <key>PostNotification</key>
      <string>com.apple.mobileipod-prefsChanged</string>
      <key>cell</key>
      <string>PSSwitchCell</string>
      <key>default</key>
      <false/>
      <key>defaults</key>
      <string>com.apple.mobileipod</string>
      <key>id</key>
      <string>SoundCheck</string>
      <key>key</key>
      <string>MusicSoundCheckEnabledSetting</string>
      <key>label</key>
      <string>SOUND_CHECK_IPHONE</string>
    </dict>
    <dict>
      <key>cell</key>
      <string>PSLinkListCell</string>
      <key>defaults</key>
      <string>com.apple.mobileipod</string>
      <key>detail</key>
      <string>PSListItemsController</string>
      <key>key</key>
      <string>MusicShuffleSetting</string>
      <key>label</key>
      <string>임의 재생</string>
      <key>validTitles</key>
      <array>
        <string>노래별</string>
        <string>앨범별</string>
      </array>
      <key>validValues</key>
      <array>
        <string>Songs</string>
        <string>Albums</string>
      </array>
    </dict>
    <dict>
      <key>PostNotification</key>
      <string>com.apple.mobileipod-prefsChanged</string>
      <key>cell</key>
      <string>PSLinkListCell</string>
      <key>default</key>
      <string>Off</string>
      <key>defaults</key>
      <string>com.apple.mobileipod</string>
      <key>detail</key>
      <string>EQPresetListController</string>
      <key>get</key>
      <string>EQ</string>
      <key>id</key>
      <string>EQ</string>
      <key>key</key>
      <string>MusicEQPresetName</string>
      <key>label</key>
      <string>EQ_IPHONE</string>
      <key>set</key>
      <string>setEQ:</string>
    </dict>
    <dict>
      <key>cell</key>
      <string>PSLinkListCell</string>
      <key>detail</key>
      <string>VolumeLimitController</string>
      <key>get</key>
      <string>volumeLimitEnabled:</string>
      <key>id</key>
      <string>VolumeLimit</string>
      <key>label</key>
      <string>VOLUME_LIMIT_IPHONE</string>
    </dict>
    <dict>
      <key>PostNotification</key>
      <string>com.apple.mobileipod-prefsChanged</string>
      <key>cell</key>
      <string>PSSwitchCell</string>
      <key>default</key>
      <true/>
      <key>defaults</key>
      <string>com.apple.mobileipod</string>
      <key>id</key>
      <string>LyricsAndPodcastInfo</string>
      <key>key</key>
      <string>LyricsAndPodcastInfoEnabledDefaultsKey_1_Key</string>
      <key>label</key>
      <string>LYRICS_AND_PODCAST_INFO_IPHONE</string>
    </dict>
    <dict>
      <key>PostNotification</key>
      <string>com.apple.mobileipod-prefsChanged</string>
      <key>cell</key>
      <string>PSSwitchCell</string>
      <key>default</key>
      <true/>
      <key>defaults</key>
      <string>com.apple.mobileipod</string>
      <key>id</key>
      <string>GroupByAlbumArtistPad</string>
      <key>key</key>
      <string>MusicGroupByAlbumArtistEnabledSetting</string>
      <key>label</key>
      <string>GROUP_BY_ALBUM_ARTIST_IPAD</string>
    </dict>
    <dict>
      <key>PostNotification</key>
      <string>com.apple.mobileipod-prefsChanged</string>
      <key>cell</key>
      <string>PSSwitchCell</string>
      <key>default</key>
      <true/>
      <key>defaults</key>
      <string>com.apple.mobileipod</string>
      <key>id</key>
      <string>GroupByAlbumArtistPhone</string>
      <key>key</key>
      <string>MusicGroupByAlbumArtistEnabledSetting</string>
      <key>label</key>
      <string>GROUP_BY_ALBUM_ARTIST_IPHONE</string>
    </dict>
  </array>
</dict>
</plist>

Music.plist의 수정 과정은 Bitbucket에서 보실 수 있습니다.

원본 Music.plist는 따로 백업해 두고, 변경한 Music.plist를 넣습니다. 그리고 리스프링 할 필요도 없이 설정 - 음악으로 들어가면 다음과 같은 화면을 볼 수 있습니다! 우리가 임의 재생 설정을 추가했습니다!

설정 - 음악 설정 - 음악 - 임의 재생

우선 모든 노래 중 아무 곡이나 재생한 후 설정 - 음악 - 임의 재생에 들어가서 앨범별을 선택하면 현재 노래 순서가 바뀐 것을 확인할 수 있습니다. 앨범별을 선택하는 순간 아이폰에서 재생 순서를 전부 만들어 놓는 것 같습니다.

단점

이렇게 우리가 아이폰에서 앨범별 임의 재생을 할 수 있게 되었지만, 안타깝게도 완벽하게 작동하는 것은 아닙니다. 사용해 본 결과, 음악을 듣다가 음악 앱을 끄고 다시 재생하게 되면 설정 - 음악 - 임의 재생에서는 노래별로 바뀌어 있습니다. 하지만 여기에서 다시 앨범별을 선택하면 노래의 순서가 재설정 되어버립니다! 노래별로 선택되어 있지만 사용자가 직접 선택하지 않는 이상 노래 순서가 재설정 되지는 않으니 그냥 끝까지 들으시면 모든 앨범을 들을 수 있으실 겁니다.

iOS 6.1.2 업데이트

iOS 6.1.2 업데이트가 있었습니다. 기본 Music.plist가 iOS 6.1의 Music.plist와 동일함을 확인하였고, 앨범별 임의 재생 또한 문제 없이 잘 적용됨을 확인했습니다.