2010-04-07 38 views
5

Tôi có một PlayList được tải vào trường hợp WMP của mình và tôi muốn nó chỉ lặp lại một bài hát. Tất cả mọi thứ tôi đã Googled cho đến nay cho tôi biết để làm điều này:Lặp lại một bài hát trong một danh sách bài hát

private AxWindowsMediaPlayer wmp; 
wmp.settings.setMode("loop", true); 

Tuy nhiên, điều này chỉ làm cho toàn bộ PlayList lặp lại. Các hành vi tôi muốn là, nếu tôi kích hoạt "lặp lại" khi bài hát 5 trong PlayList đang chơi, sau đó bài hát 5 sẽ tiếp tục tự động lặp lại khi nó kết thúc (thay vì tiếp tục bài hát 6). Hầu hết các máy nghe nhạc MP3 trên xe đã hoạt động theo cách này; là có một cách tốt đẹp bản địa để làm điều này trong chương trình C# của tôi, hoặc tôi sẽ phải đưa ra một giải pháp "hack", như chặn các sự kiện cháy khi bài hát tiếp theo được nạp?

Trả lời

0

Bạn không thể xử lý sự kiện PlayStateChange và phát hiện khi trạng thái MediaEnded đã được đặt cho bản nhạc hiện tại và chỉ tua lại nó?

+0

Yep, in thực tế đó là một trong những cách tôi đã suy nghĩ để làm điều đó ... Tôi chỉ muốn đảm bảo rằng không có một cách "bản địa" của việc xử lý này, trước khi tôi đã làm một bó mã hóa tùy chỉnh. –

1

Cố gắng tạo một bộ mới chỉ với một bài hát bạn muốn phát lặp đi lặp lại.

+0

Vâng, điều đó sẽ giải quyết vấn đề, nhưng điều gì sẽ xảy ra khi tôi muốn tắt lặp lại? Tôi cần một cơ chế để tải lại danh sách phát ban đầu và quay lại chính xác bản nhạc và vị trí mà tôi đã ở khi tôi tắt "lặp lại". Nó sẽ đơn giản hơn để xử lý trạng thái phát và chỉ lưu trữ một lá cờ để biết tôi có lặp lại hay không. –

0

Câu trả lời ngắn gọn là WMP thực hiện không hỗ trợ lặp lại một bản nhạc duy nhất!

Vì vậy, tốt nhất bạn có thể làm là làm theo đề xuất của Machta và tự động chỉnh sửa danh sách phát. Ví dụ: khi bạn muốn lặp lại một bản nhạc trong danh sách phát, hãy chỉnh sửa danh sách phát, chẳng hạn như bản nhạc đó chỉ có một bản nhạc duy nhất và bật vòng lặp. Đừng quên lưu một nơi nào khác vào danh sách phát cũ của bạn. Khi người dùng tắt vòng lặp bài hát khôi phục danh sách phát cũ của bạn và đặt nó thành không lặp lại.

Thật không may bạn có nhược điểm là bài hát có thể bắt đầu ngay từ đầu khi bạn thay đổi danh sách phát: theo đề xuất của James và lên lịch cho danh sách phát của bạn thành trạng thái MediaEnded.

Đó là điều tốt nhất tôi có thể cho bạn biết.

1

Đây là cách tiếp cận của tôi. Đối với danh sách phát của tôi, thay vì sử dụng danh sách phát WMPLib, tôi đã tạo danh sách chung chung loại IWMPMedia. Điều này cho phép tôi thêm bài hát vào danh sách bài hát của mình mà không gặp khó khăn nào trong danh sách chung chứa tất cả các bài hát. Vì vậy, để lặp lại một bài hát, những gì tôi đã làm là tôi lấy chỉ mục hiện tại của bài hát hiện tại đang phát trong danh sách phát và đặt nó bằng một số nguyên, sau đó tôi đã thực hiện một số điều sau:

int repeatSongIndex = index;//in this case, our index is the current song playing 

player.URL = playlist[repeatSongIndex].sourceURL;//lets have player.URL point to the song object chosen to be repeated to its source url (the directory of the file). 
bool isRepeat = true;//to keep track of whether the repeat option is enabled or not. 
Các vấn đề liên quan