Có thay thế "hiện đại" cho chức năng Windows sndPlaySound() cũ, đây là cách rất thuận tiện để phát tệp .wav trong nền trong khi bạn tập trung vào các vấn đề khác không? Bây giờ tôi thấy mình cần phải chơi một tập tin .mp3 trong nền và tôi tự hỏi làm thế nào để thực hiện điều tương tự trong một cách tương đối dễ dàng mà hệ thống hỗ trợ vốn có. Có lẽ có một thành phần COM để hoàn thành phát lại .mp3 cơ bản?đơn giản .wav hoặc .mp3 playbck trong Windows - nó đã biến mất ở đâu?
Trả lời
Khi bạn nói "Hiện đại", bạn có nghĩa là API Windows 8 WinRT không? Hoặc bạn có nghĩa là, "một API hơi mới hơn so với những người phát minh ra cho Windows 3.1"?
Một cuộc khảo sát của apis âm thanh và video có thể được tìm thấy here
Đối với các ứng dụng cổ điển máy tính để bàn Windows, có PlaySound, có thể chơi bất kỳ tập tin WAV.
Đối với MP3, nhóm của tôi đã phát minh ra giải pháp bằng DirectSound và Windows Media Format SDK. Sau này có thể giải mã bất kỳ tệp WMA và MP3 nào. Chúng tôi đã đưa luồng âm thanh trực tiếp vào bộ đệm DSound. Đây không phải là dành cho những người yếu tim.
Bạn có thể sử dụng giải pháp thay thế cấp cao hơn, Windows Media Player API.
DirectShow là một giải pháp thay thế rất kế thừa, nhưng rất dễ dàng để có được thứ gì đó hoạt động. Media Foundation là sự thay thế cho DirectShow.
PlaySound là một giải pháp cổ xưa nhưng đầy đủ, đặc biệt là khi thời gian để thực hiện một cái gì đó tinh vi hơn không thể được biện minh. Tôi đã chỉ hy vọng cho một cái gì đó tương đương với iOS AVAudioPlayer, nơi bạn có thể thực hiện điều này với khoảng năm dòng mã. Đây là Win32 mặc dù. Thở dài ... –
Câu trả lời đơn giản cho nhiều vấn đề như thế này là chỉ cần gọi ra một chương trình dòng lệnh với hệ thống ("play.exe soundfile.mp3") hoặc tương đương. Chỉ cần xử lý dòng lệnh như một API khác, một API có chức năng mở rộng và là chuẩn, di động, linh hoạt, dễ gỡ lỗi và dễ sửa đổi. Nó có thể không hiệu quả như gọi một hàm thư viện nhưng điều đó thường không quan trọng, đặc biệt nếu chương trình được gọi là đã có trong bộ nhớ cache của đĩa. Ngẫu nhiên, tránh sự phức tạp của phần mềm chỉ vì nó "hiện đại"; thường đó là bằng chứng của một phi hành gia kiến trúc và thực hành lập trình kém.
Qua nhiều năm đã có một vài API liên quan đến âm thanh và phương tiện và có một số cách để đạt được mục tiêu.
Điều tốt nhất về việc không có libs của bên thứ ba, phạm vi phiên bản hệ điều hành tốt nhất, tính năng và đơn giản là API DirectShow. 15 tuổi và vẫn đánh bại địa ngục của các đối thủ, được hỗ trợ trong tất cả các phiên bản Windows hiện tại và một vài phiên bản trước của Visual Studio có thể nhắm mục tiêu, ngoại trừ WinRT.
Đoạn mã bên dưới phát các tệp MP3 và WMA. Nó là C++
tuy nhiên vì nó là tất cả COM nó cũng di động trên các ngôn ngữ.
#include "stdafx.h"
#include <dshow.h>
#include <dshowasf.h>
#include <atlcom.h>
#pragma comment(lib, "strmiids.lib")
#define V(x) ATLVERIFY(SUCCEEDED(x))
int _tmain(int argc, _TCHAR* argv[])
{
static LPCTSTR g_pszPath = _T("F:\\Music\\Cher - Walking In Memphis.mp3");
V(CoInitialize(NULL));
{
CComPtr<IGraphBuilder> pGraphBuilder;
V(pGraphBuilder.CoCreateInstance(CLSID_FilterGraph));
CComPtr<IBaseFilter> pBaseFilter;
V(pBaseFilter.CoCreateInstance(CLSID_WMAsfReader));
CComQIPtr<IFileSourceFilter> pFileSourceFilter = pBaseFilter;
ATLASSERT(pFileSourceFilter);
V(pFileSourceFilter->Load(CT2COLE(g_pszPath), NULL));
V(pGraphBuilder->AddFilter(pBaseFilter, NULL));
CComPtr<IEnumPins> pEnumPins;
V(pBaseFilter->EnumPins(&pEnumPins));
CComPtr<IPin> pPin;
ATLVERIFY(pEnumPins->Next(1, &pPin, NULL) == S_OK);
V(pGraphBuilder->Render(pPin));
CComQIPtr<IMediaControl> pMediaControl = pGraphBuilder;
CComQIPtr<IMediaEvent> pMediaEvent = pGraphBuilder;
ATLASSERT(pMediaControl && pMediaEvent);
V(pMediaControl->Run());
LONG nEventCode = 0;
V(pMediaEvent->WaitForCompletion(INFINITE, &nEventCode));
}
CoUninitialize();
return 0;
}
Nếu bạn đang phát tệp của riêng mình, bạn chắc chắn không chứa phần thẻ ID3 lớn, the code might be twice as short.
- 1. Lucene.Net.Highlight đã biến mất ở đâu?
- 2. Link_to_function ở đâu đã biến mất trong Rails 3?
- 3. Lưu trữ Smalltalk đã mất ở đâu?
- 4. Cách đơn giản nhất để phát mp3 từ Visual C++
- 5. Xcode 5.0: Quy tắc Thêm quy tắc của Apple đã biến mất ở đâu?
- 6. Mongodb bị lỗi! Dữ liệu của tôi đã biến mất ở đâu?
- 7. Tệp âm thanh nhỏ nhất: MP3, Ogg hoặc Wav?
- 8. Mẫu trình duyệt WCF của trình duyệt đã biến mất ở đâu?
- 9. Cách giải mã wav, mp3 và/hoặc ogg trong .Net/Mono?
- 10. Chuyển đổi wav sang mp3 - ASP.NET
- 11. FxCop 1.36 đã biến mất
- 12. Python chuyển đổi wav thành mp3
- 13. Tôi mất nginx.pid, nó biến mất
- 14. Trong XMLHttpRequest, biến lỗi cờ ở đâu?
- 15. Chọn ..... ở đâu .... HOẶC
- 16. Phần mềm Text to Speech (TTS) cho Scripts WAV hoặc MP3 ouput
- 17. Biến đổi mã ở đâu?
- 18. Lưu Micrô vào mp3 hoặc wave
- 19. Tất cả các chức năng đơn giản đều ở đâu trong WebGL?
- 20. Học thuyết - hoặc ở đâu?
- 21. Tôi có thể tìm hướng dẫn đơn giản về xuggler ở đâu?
- 22. Windows PowerShell đặt hồ sơ $ ở đâu?
- 23. Trình chỉnh sửa trong nhật thực đã biến mất
- 24. Bạn nên sử dụng BlockingQueue Implementations thay vì triển khai hàng đợi đơn giản ở đâu?
- 25. IBM Worklight 6.0 - Bảng điều khiển Worklight của tôi đã mất ở đâu?
- 26. LINQ Ở đâu() Ống đơn/đôi/Ampersands
- 27. Cách chuyển đổi .wav sang .mp3 bằng Java?
- 28. Tải lên tệp WAV bằng Paperclip và lưu trữ cả hai phiên bản .wav và .mp3
- 29. Biến mất đường viền DIV hoặc DIV
- 30. Tôi có thể tìm các phóng viên HTML mở rộng cho Đơn giản ở đâu?
[Hai đề xuất ở đây] (http://stackoverflow.com/questions/8121570/use-windows-built-in-mp3-decoder-to-play-audio). – arx