2010-10-21 30 views
12

Về cơ bản, những gì tôi cần là một cách để khai thác đầu ra âm thanh hiện tại và kiểm tra mức âm thanh, tức là tôi cần kiểm tra xem có thứ gì đó đang phát trên thiết bị âm thanh hay không.Làm thế nào để lập trình có được mức âm thanh hiện tại?

Tôi không cần kiểm tra cài đặt âm lượng, nhưng mức âm thanh của luồng âm thanh phát thực tế.

Xin lỗi, tôi đã được hỏi về làm thế nào để làm điều đó trong Windows, trên Visual Studio 2008.

@mikerobi: Đó là một phần của lý luận của tôi - nếu nó đang được hiển thị trên đồng hồ khối lượng hệ thống, có phải là cuộc gọi hệ thống có thể lấy lại số điện thoại

+0

Tôi không hiểu phản hồi tiêu cực, chắc chắn có cách để xem âm thanh đang phát gì? Tôi không biết nếu nó sẽ được dễ dàng để trích xuất và thông tin hữu ích từ dòng đó nhưng những ý kiến ​​không chỉ các poster đúng hướng. –

+0

+1, giờ đây nền tảng được đề cập. Kể từ Windows Vista/7, chúng tôi có [API lõi âm thanh] (http://msdn.microsoft.com/en-us/library/dd370784%28VS.85%29.aspx), nhưng tôi chắc chắn không bao giờ sử dụng chúng. Hãy thử gắn thẻ 'cửa sổ-api' này và xem chúng ta vẽ ai.:) –

+0

Có thể bạn có thể tìm thấy nội dung nào đó tại đây http://www.dreamincode.net/forums/topic/45693-controlling-sound-volume-in-c%23/#/ – BrunoLM

Trả lời

2

Đây là một câu hỏi hay. Câu trả lời, cho các ứng dụng Windows 32-bit, là móc vào winmm.dll và các tệp điều khiển âm thanh mức thấp khác. Trong C# Tôi muốn tạo ra một lớp wrapper chứa phương pháp nguyên mẫu extern:

public class MyAudioWrapper 
{ 
    [DllImport("winmm.dll", EntryPoint = "waveOutGetVolume")] 
    public extern void GetWaveVolume(IntPtr devicehandle, out int Volume); 

    ... 
} 

Có một cái nhìn tại this link cho một danh sách các phương pháp âm thanh Windows; bạn có thể sử dụng bộ trộn, hoặc chỉ bộ điều khiển sóng ra để đặt âm lượng. Những gì bạn muốn sử dụng sẽ quyết định thư viện nào cần nhập. Bạn sẽ phải nghiên cứu cách tốt nhất để xác định nguyên mẫu và cách xử lý thiết bị âm thanh/máy trộn.

+1

Câu trả lời hay hơn cho Vista và hơn thế nữa là mở một luồng âm thanh ở chế độ lặp lại và chụp từ đó. –

2

Dưới đây là một liên kết hữu ích cho invokations Windows API, và đây là chính xác những gì bạn đang tìm kiếm:

http://www.pinvoke.net/default.aspx/winmm.waveOutGetVolume


Kể từ khi yêu cầu thay đổi và bạn không cần mức độ âm thanh Tôi đề nghị những điều sau đây có thể giúp ích:

Tôi nghĩ bạn cần đọc những gì đang được phát lại trên luồng đầu ra và bằng cách phân tích dữ liệu trong một số thuật toán bạn có thể quyết định thời tiết đang được phát lại hay không. Để làm điều này bạn cần API MMDevice

http://msdn.microsoft.com/en-us/library/dd316556(v=VS.85).aspx

Tôi không muốn discorage bạn nhưng tôi tin rằng đây không phải là chuyện dễ dàng để thực hiện nếu bạn không quen thuộc với mã không được quản lý.

  • Bạn phải điền vào nhiều cấu trúc trong mỗi lần khám phá.
  • Bạn phải thực hiện các lời mời theo thứ tự cụ thể.
  • Hướng dẫn tham chiếu đến cấu trúc.

Và ngay cả khi bạn thực hiện điều đó, bạn không thể lường trước được hành vi kết quả của thiết bị. Chúc may mắn.

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