2012-10-19 26 views
5

Tôi đã học cách tạo danh sách phát trong câu hỏi trước, nhưng giờ tôi không thể tìm ra cách thêm bản nhạc vào danh sách phát. Ngay bây giờ tôi có:Cách thêm bản nhạc vào danh sách phát iTunes bằng Python và Scripting Bridge

tracks.sort(key=lambda tup: tup[0]) 
i = 0 
for trackList in generatePlaylists(tracks,10): 
    i += 1 
    playlistname = str(i) 
    p = {'name': playlistname} 
    playlist = iTunes.classForScriptingClass_("playlist").alloc().initWithProperties_(p) 
    iTunes.sources()[0].playlists().insertObject_atIndex_(playlist, 0) 

    # Find the playlist I just made 
    for playlist in iTunes.sources()[0].playlists(): 
     if playlist.name() == playlistname: 
      newPlaylist = playlist 

    # Add the tracks to it 
    for track in trackList: 
     print track[1].name() 
     iTunes.add_to_(track[1],newPlaylist) 

bài hát của tôi đang ở trong một danh sách các hàng tracks, nơi mà các yếu tố đầu tiên của tuple là một số điểm và thứ hai là đối tượng theo dõi thực tế. generatePlaylists là trình lặp mà chia tất cả các bài hát trong thư viện thành 10 danh sách.

Đoạn mã trên chạy mà không có lỗi, nhưng trong iTunes danh sách phát trống.

Trả lời

7

Thứ nhất, đây là câu trả lời ngắn:

track.duplicateTo_(newPlaylist) 

Vấn đề là iTunes.add_to_ gửi lệnh add, trong đó có một tập tin (bí danh) và nhập khẩu nó vào một danh sách nhạc; bạn muốn gửi lệnh duplicate, lấy bất kỳ đối tượng nào và tạo một bản sao của đối tượng khác. Bạn không có tệp, bạn có một bản nhạc. (Bạn có thể nhận tệp qua track.location(), nhưng bạn không muốn nhập lại tệp, chỉ cần sao chép bản nhạc.)

Ngoài ra, trong trường hợp này, bạn cần gọi phương thức trên đường đi hơn là gọi nó trên ứng dụng và chuyển nó theo dõi.

Nửa đầu này khó giải thích mà không hiểu rõ mô hình đối tượng iTunes (và mô hình AE bên dưới mô hình này). Nhưng bạn không thực sự cần phải hiểu nó. Trong hầu hết các trường hợp, bằng cách xem qua từ điển kịch bản iTunes (trong AppleScript Editor) và dùng thử và lỗi (trong AppleScript Editor hoặc với py-appscript), bạn có thể tìm ra những gì bạn muốn. (Chỉ cần đảm bảo bạn đang làm việc trên thư viện phế liệu hoặc có bản sao lưu ...) Trong trường hợp này, các lệnh duy nhất có thể là add, copy, duplicate hoặc move, vì vậy hãy thử tất cả và xem những gì họ làm . Hoặc, cách khác, đi đến dougscripts và tải về một loạt các mẫu và tìm thấy một trong những hiện những gì bạn muốn.

Phần thứ hai, tìm cách dịch sang ScriptingBridge… tốt, tôi không thể giải thích nó mà không đi sâu vào SB (hhas làm tốt hơn tôi nhiều nếu bạn muốn đọc) . Nhưng những điều cơ bản là: Theo như iTunes có liên quan, duplicate là một lệnh. Nếu bạn cho nó một đối tượng trực tiếp (tell application "iTunes" to duplicate theTrack to thePlaylist), nó sẽ sử dụng nó; nếu không, bạn đang yêu cầu đối tượng sao chép chính nó (tell theTrack to duplicate to thePlaylist). Nó hoạt động chính xác như tiếng Anh. Nhưng SB nhấn mạnh vào một mô hình hướng đối tượng, trong đó duplicate là một phương pháp trên một số đối tượng. Vì vậy, chỉ một trong hai dạng đó sẽ hoạt động. Nói chung, bạn có thể tìm ra cái nào bằng cách chỉ xem dir(iTunes)dir(track) để xem cái nào có một phương thức trông giống như lệnh mà bạn muốn.

Như bạn có thể nói từ trên, bạn đã có rất nhiều thử nghiệm và lỗi trước bạn nếu bạn đang cố gắng làm bất cứ điều gì phức tạp. Chúc may mắn và tiếp tục hỏi.

PS, tôi không biết tại sao mã của bạn không hoạt động âm thầm. Cách rõ ràng phương pháp add_to_ nên dịch thành một lệnh sẽ tăng một lỗi -1708 (như appscript iTunes.add(track, to=newPlaylist) hoặc AppleScript add theTrack to newPlaylist cả hai đều làm ...).

+0

Họ sẽ cung cấp cho bạn phần thưởng cho các câu trả lời kết hợp! Cảm ơn. 'iTunes.add_to_' là một cá trích màu đỏ, tôi không nghĩ đến việc tìm kiếm ở nơi khác nhưng bây giờ bạn giải thích nó, nó có ý nghĩa. – abroekhof

Các vấn đề liên quan