2013-02-26 36 views
6

Tôi đang sử dụng qt5.0. Tôi tạo dll và đặt tất cả các tập tin âm thanh của tôi bên trong dll. bây giờ tôi đang tạo tập tin từ tài nguyên và chơi. nó hoạt động tốt.Cách phát Âm thanh và xóa tệp trong QMediaPlayer?

Nhưng vấn đề là sau khi phát tệp tôi không thể xóa tệp đó và tạo lại tệp mới.

nếu tôi cố xóa theo cách thủ công, tôi cũng gặp lỗi. "một số chương trình khác sử dụng tệp đó". một khi tôi dừng chương trình thì chỉ có thể xóa tập tin đó.

Cách xóa tệp sau khi phát lại ngay lập tức. đây mã của tôi

player = new QMediaPlayer; 
connect(player,SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)),this,SLOT(mediaStatusChanged(QMediaPlayer::MediaStatus))); 

QFile file2(QDir::tempPath() + "/temp0.mp3"); 

if (file2.open(QIODevice::ReadWrite)) 
{ 
    QFile workFile(":/AUDIO/" + fn +".mp3"); 
    if(workFile.open(QIODevice::ReadOnly)) 
    { 
     file2.write(workFile.readAll()); 
     workFile.close(); 
    } 

    file2.close(); 
} 

player->setMedia(QMediaContent(QUrl::fromLocalFile(QDir::tempPath() + "/temp0.mp3"))); 
player->setVolume(100); 
player->play(); 

void Audio::mediaStatusChanged(QMediaPlayer::MediaStatus state) 
{ 
    if(state==QMediaPlayer::EndOfMedia) 
    { 
     QFile::remove(QDir::tempPath() + "/temp0.mp3"); 
     qDebug()<<"Audio played"; 
    } 
} 

tôi nhận được "âm thanh chơi" tin nhắn nhưng nó không deleteing tập tin.

hãy giúp tôi giải quyết vấn đề này.

+0

có cách nào trực tiếp phát trực tiếp từ tệp DLL mà không tạo bất kỳ tệp tạm thời nào không? – Saravanan

+0

Có vẻ như người chơi có thể giữ một tay cầm cho tập tin. Nếu bạn xóa đối tượng trình phát, tệp có thể bị xóa không? – TheDarkKnight

+0

tốt, tôi đã thử tất cả mọi thứ nhưng tôi vẫn gặp lỗi. vì vậy tôi đặt các tệp âm thanh vào thư mục windows/media và sử dụng trong ứng dụng. Cảm ơn. – Saravanan

Trả lời

1

Các docs nói với chúng tôi để biết QMediaPlayer :: setMedia:

Thiết tài sản này cho một người QMediaContent null sẽ gây ra người chơi loại bỏ tất cả các thông tin liên quan đến nguồn phương tiện truyền thông hiện tại và để chấm dứt tất cả các I/O các hoạt động liên quan đến phương tiện đó.

Thật không may này không hoạt động trên Windows 7 với Qt 5.1.1 - Đây lý do tại sao tôi đã đệ đơn bug report

Ngay cả các folks trong kênh irc Qt nói với tôi không sử dụng QMediaPlayer trên Windows. Họ đề nghị sử dụng SDL. Hơi lạ đối với một nền tảng đa nền tảng với một API đa phương tiện.

3

Gần đây, tôi đã gặp cùng một vấn đề. Tôi đã giải quyết nó bằng cách thay đổi trình biên dịch từ msv sang mingw. Tôi nghĩ rằng những kẻ Qt đã không giải quyết lỗi này vì tình trạng của nó là 'cần thêm thông tin'. Mã để phát hành tệp phương tiện có thể như sau.

player->setMedia(QMediaContent()); 

Tuy nhiên, nếu tôi sử dụng trình biên dịch mingw, video không phát trong máy ảo win7 x86 và báo cáo DirectShowPlayerService::doRender: Unresolved error code 80040266. Điều này dường như là một bế tắc với tôi.

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