2012-08-25 34 views
6

Tôi có một ứng dụng có âm thanh. Tôi có một tài sản toàn cầu để tắt tiếng. Vấn đề là, có rất nhiều thứ khác nhau có thể tạo ra âm thanh, tôi ghét phải lặp lại qua các loại lớp khác nhau và tắt/bật âm thanh của chúng. Thay vào đó, tôi đang tìm cách tắt âm thanh ở cấp ứng dụng toàn cầu. Tôi không có nghĩa là tắt toàn bộ khối lượng hệ thống.Làm thế nào để tắt âm thanh của ứng dụng của tôi?

Một kịch bản: Trong Windows 7, bạn có thể mở Bộ trộn âm lượng và điều chỉnh âm lượng của từng ứng dụng. Mặc dù tôi không có ý định thay đổi giá trị cụ thể thực tế này (như tôi biết đó là Windows 7 cụ thể), tôi muốn thay đổi khối lượng của tất cả mọi thứ trong ứng dụng của tôi cùng một lúc. Tôi cũng sẽ cần khả năng tắt tiếng hoàn toàn âm thanh của mọi thứ trong ứng dụng của mình. Tôi cần khả năng này tương thích với Windows XP trở lên. Tôi giả sử nó sẽ liên quan đến các cuộc gọi Windows API, nhưng tôi không có ý tưởng những gì các cuộc gọi để thực hiện.

+0

Có xem xét câu hỏi này: http://stackoverflow.com/questions/1092466/windows-xp-mute-unmute-audio-in-programmatically-in-python – Sebi

+3

cho những gì tôi nhớ, XP đã không mức âm thanh trên mỗi ứng dụng. Bạn sẽ có một số API đầu ra âm thanh trung tâm trong ứng dụng của bạn và có chuyển đổi nếu bạn để nó ra Windows API hoặc chỉ cần bỏ qua và xử lý –

+1

WinXP không có khả năng kiểm soát âm thanh ứng dụng. Điều này đã được thêm vào trong Vista, và nó sử dụng một API hoàn toàn mới (riêng biệt) để làm như vậy, với các giao diện mới được thêm vào để hỗ trợ nó. Larry Osterman (một trong những MS-giờ) đã có một loạt các API âm thanh mới trên blog của mình; Tôi không có một liên kết đến nó trên máy này, nhưng bạn sẽ có thể tìm thấy anh ta bằng cách Googling. Có những bài viết về điều này trên SO trong C/C++ Tôi nhớ nhìn thấy một trong khi trở lại là tốt; Tôi sẽ xem liệu tôi có thể tìm thấy cụm từ tìm kiếm để bạn sử dụng để tìm chúng hay không. –

Trả lời

3

Điều bạn đang yêu cầu không thể thực hiện được trên XP; hệ điều hành chỉ đơn giản là không hỗ trợ các mức âm lượng cho mỗi ứng dụng.

Bạn có thể thực hiện những gì bạn muốn bằng cách tạo lớp cài đặt giữ các thông tin như SoundActive: Boolean hoặc PlaySounds: Boolean hoặc tương tự. Đặt nó trong đơn vị riêng của nó, và có một phần khởi tạo tạo ra một thể hiện của nó và một phần hoàn thành giải phóng nó (làm cho nó có hiệu quả một tập hợp các giá trị toàn cầu).

Mỗi đơn vị cần truy cập vào các cài đặt này chỉ cần sử dụng đơn vị chứa chúng và điều chỉnh hành vi tương ứng. Vì vậy, mỗi lớp con quý vị hoặc hình thức hoặc bất cứ điều gì sẽ chỉ cần một tấm séc thêm:

if CurrentSettings.PlaySounds then 
    // Code that makes sounds, plays music, whatever. 

Các thiết lập lớp cũng có thể chứa các phương pháp theo dõi các mức âm lượng hiện tại (trên XP, mức system-wide), và các phương pháp để tăng hoặc giảm âm lượng bằng cách sử dụng các hàm số lượng MMSystem (có rất nhiều ví dụ ở đây và thông qua Google làm như vậy). Sau đó, ứng dụng của bạn có thể sử dụng các sự kiện OnActivateOnDeactivate để đặt mức âm lượng khi ứng dụng của bạn tăng tiêu điểm và khôi phục nó về âm lượng phù hợp khi ứng dụng của bạn mất tập trung.

Trong Vista trở lên, bạn có thể sử dụng giao diện IAudioEndPointVolume tôi đã đề cập trước đó và một trong hai GetMasterVolumeLevel hoặc SetMasterVolumeLevel phương pháp để kiểm soát hệ thống tích rộng (Tôi có một ví dụ để làm điều này, cùng với các MMDevAPI định nghĩa giao diện thích hợp) hoặc cấp thiết bị âm lượng (sử dụng IMMDevioce.Activate để chọn thiết bị phù hợp trước tiên và sau đó các phương pháp trên IAudioEndPointVolume trên giao diện thiết bị nhận được từ IMMDevice.Activate trong thông số ppInterface).

Đối với các ứng dụng riêng lẻ, bạn sử dụng giao diện ISimpleAudioVolume, trong đó có bốn phương pháp: GetMasterVolumeSetMasterVolume, mà kiểm soát mức âm lượng cho phiên âm thanh của ứng dụng của bạn, và GetMuteSetMute để cho phép bạn lấy giá trị cờ câm hiện tại hoặc thiết lập nó tương ứng. (Larry Osterman của MS, một trong những nhà phát triển đã làm việc về hỗ trợ âm thanh mới trong Vista và Win7, có một số lượng lớn starting point article trên blog của anh ấy về các loại âm thanh trong API mới và thời điểm sử dụng chúng.Có thể khái niệm có thể xác định thời gian chạy mà bạn đang sử dụng hệ điều hành và chuyển đổi giữa các chức năng MMSystem trên XP và trước đó, và chức năng MMDevAPI trên Vista và phiên bản cao hơn. Tuy nhiên, việc mong đợi một người nào đó ở đây cung cấp mã để làm như vậy là một chút không hợp lý. Các liên kết tôi đã cung cấp sẽ giúp bạn bắt đầu đi đúng hướng và khi bạn gặp phải sự cố theo cách giúp đỡ cụ thể trong quá trình làm việc thông qua những trò bịp đó sẽ là những câu hỏi hay.

4

XP không hỗ trợ điều khiển âm lượng cho mỗi ứng dụng. Khả năng đó đã được thêm vào trong Vista. Vì vậy, những gì bạn đang cố gắng để làm không thể được thực hiện trong XP bằng phương tiện công bằng.

Có phần mềm được gọi là IndieVolume mà retro phù hợp với điều khiển âm lượng trên mỗi ứng dụng cho XP. Tôi chỉ có thể tưởng tượng nó làm như vậy bằng phương tiện của hack cấp thấp, tiêm DLL và như vậy. Tôi nghi ngờ đó thực sự là một lựa chọn cho bạn.

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