Làm cách nào tôi có thể truy cập các mức âm lượng từ dòng lệnh trên Windows 7?


17

Tôi cân gi

Tôi đang tìm kiếm một công cụ hoặc một tập lệnh cho phép tôi truy cập các mức âm lượng của Windows từ dòng lệnh. Lý tưởng nhất là nó sẽ cho phép tôi lấy và thiết lập tất cả các tập bao gồm các cấp ứng dụng, nhưng tôi chỉ giải quyết để nhận và chỉ cấp chính. Tôi không quan tâm nếu nó sử dụng PowerShell, WMI, JavaScript, .Net, Voodoo, hay bướm. Bất kỳ giải pháp nào sẽ chỉ cho tôi một số mà tôi có thể xử lý thêm để phù hợp với phạm vi từ 0% đến 100% sẽ làm.

Nói cách khác, các phần nhanh chóng là hộp đen mà tôi cần điền:

C:\> getvol master
50

hoặc thậm chí

C:\> wmic <alias> where "device='master' and name='volume'" get name,value
Name    Value
Volume  0xDEADBEEF

Tôi không phiền nếu tôi phải dành một chút thời gian để bọc nó hoặc thậm chí tự viết một cái gì đó nếu các công cụ để làm điều đó có sẵn miễn phí. Trong trường hợp thứ hai, tôi cần một số gợi ý / bằng chứng về khái niệm cho lõi, nhưng tôi có thể tự mình quản lý hành trình. Ngoài ra tôi muốn tránh cài đặt các khuôn khổ phát triển mới chỉ dành riêng cho mục đích này (lưu ý rằng cả hai của music2myeariglvzx của câu trả lời đã được đưa ra trước khi tôi giới thiệu các yêu cầu này).

Là "nền tảng", tôi có sẵn:

  • bất cứ điều gì đi kèm với Windows 7 Home Premium
  • bất cứ điều gì đi kèm với Cygwin
  • Perl
  • Con trăn
  • Hồng ngọc

Nói chung, các giải pháp nguồn mở được ưu tiên rất nhiều. Các công cụ nguồn đóng là ok miễn là chúng là phần mềm miễn phí và nguồn có thể được tin cậy. Giải pháp thương mại là không đi.

Những gì tôi không cần

  • Có một vài câu hỏi tương tự chủ yếu liên quan đến việc đặt âm lượng. Trên hết, tôi cần lấy âm lượng, không đặt.
  • nircmdc, hỗ trợ cài đặt âm lượng, nhưng không nhận được.
  • Có một khóa [1] trong sổ đăng ký của tôi có các giá trị thay đổi có thể dự đoán được khi tôi điều chỉnh âm lượng qua bộ trộn GUI, nhưng tôi đoán việc đọc từ khóa đó dễ bị hỏng khi thay đổi phần cứng hoặc nâng cấp hệ thống. Trừ khi tôi có thể dựa vào giải pháp là bằng chứng tương lai hợp lý, tôi không thể sử dụng nó.
  • AutoHotKeyWSHgiải pháp cho việc thiết lập âm lượng trên Web, nhưng a) chúng cũng chỉ tốt cho cài đặt và tệ hơn là b) chúng sử dụng SendKeyshoặc di chuyển chuột tự động để điều khiển GUI. Tự động hóa GUI không phải là một lựa chọn.

Các ##windowskênh trên freenode là vô ích hơn bao giờ hết, Google tràn với hacks và cách giải quyết nửa nướng, và tôi không thể nói với một cuộc gọi WinAPI từ một câu thần chú Wiccan.

Có ai biết một cách?


  1. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E96C-E325-11CE-BFC1-08002BE10318}\0000\MixerSettings\eLineOutTopo\PrimaryNode000



Bạn có cần tôi mở rộng câu trả lời của tôi? Tôi không chắc bạn cần nhiều hơn, vì dường như bạn có kinh nghiệm với lập trình. Tôi có thể cung cấp một ví dụ về cách bạn có thể sử dụng AutoHotkey để dễ dàng đạt được mục tiêu của mình.
iglvzx

Tôi nghĩ rằng đó là một đề nghị rất tốt, cảm ơn một lần nữa, nhưng AHK cắn tôi một lần và tôi rất ngại kể từ đó. Tôi có lẽ sẽ không sử dụng nó ngay cả khi đó là một giải pháp hoàn chỉnh. Không có gì ngăn bạn mở rộng trên đó cho độc giả tương lai / nhiều upvote hơn mặc dù. :)
p

1
(như một lưu ý rằng reg. thậm chí dường như không tồn tại trên hộp của tôi, vì vậy ... nó thực sự có thể không ổn định). Xem thêm câu trả lời c ++ của tôi tại đây: stackoverflow.com/a/21056089/32453
rogerdpack

Câu trả lời:


5

Câu hỏi này đã được hỏi và trả lời trên StackOverflow: /programming/4640106/how-to-get-civerse-volume-of-system-sound-device-in-windows-7

Câu trả lời: /programming//a/4640225/704977

Bạn đang tìm kiếm API EndpointVolume. Đây là một phần của API âm thanh mới được phát hành trong Windows Vista và nó có thể được sử dụng để lấy hoặc đặt âm lượng chính.
... Có thư viện trình bao bọc được quản lý hoàn chỉnh có sẵn trên CodeProject: Vista Core Audio API Master Volume Control.


Cảm ơn con trỏ! Tôi sẽ phải tự viết mã này hay bạn có thể biết một công cụ nhỏ xuất hiện từ câu hỏi / câu trả lời không? Trước đây tôi chưa từng chạm vào C #: nếu tôi phải tự viết mã, có trình biên dịch nào miễn phí không?
peth

Tệ nhất là bạn cần tải xuống Visual Studio C # Express, miễn phí: microsoft.com/visualstudio/en-us/products/2010-editions/
trộm

Tôi chỉ tìm thấy câu trả lời cụ thể này trong khi tìm kiếm một giải pháp cho câu hỏi của bạn. Tôi đã không theo đuổi nghiên cứu sâu hơn để xem nếu có một nhị phân được biên dịch đã có sẵn công khai.
music2myear

Tìm kiếm google này dường như có một số lời hứa: google.com/search?q=get+civerse+volume+by+command+line+windows
music2myear

2
Đó là một định hướng C #. Nếu bạn đang tìm kiếm tùy chọn ish của C ++, hãy xem stackoverflow.com/a/21056089/32453
rogerdpack

4

Tôi biết bạn nói rằng bạn không muốn có giải pháp AutoHotkey, nhưng tôi tin API AutoHotkey có những gì bạn đang tìm kiếm:

Bạn không cần tạo GUI hoặc sử dụng phím nóng với AutoHotkey. Bạn có thể viết các tiện ích dòng lệnh mạnh mẽ bằng cách biên dịch một .ahktập lệnh. Điều đó đang được nói, bạn sẽ muốn xem lệnh FileAppend để làm việc với stdout.


Đây là một ứng dụng: gist.github.com/rdp/8363141 (mặc dù ứng dụng bảng điều khiển thẳng cho nó có thể đơn giản / dễ dàng hơn, xem các bình luận khác ở đây)
rogerdpack

0

Khối lượng chính được lưu trữ trong vị trí đăng ký:

...\#eSpeakerTopo\Properties\{7fb7b48f-531d-44a2-bcb3-5ad5a134b3dc}

Ví dụ: tệp REG này đặt âm lượng chính thành 100%.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\DeviceClasses\{6994ad04-93ef-11d0-a3cc-00a0c9223196}\##?#HDAUDIO#FUNC_01&VEN_8384&DEV_7680&SUBSYS_83847680&REV_1034#4&31e60982&0&0001#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\#eSpeakerTopo\Properties\{7fb7b48f-531d-44a2-bcb3-5ad5a134b3dc}\20000]
@=hex(ffff1003):00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  00,00,00

Tên khóa có thể khác nhau. Bạn cần khởi động lại để thay đổi có hiệu lực.

Bạn không thể chỉnh sửa hoặc mở Propertieshoặc nhập {7fb7b48f-531d-44a2-bcb3-5ad5a134b3dc}khóa regedit. Mặc dù bạn có các quyền truy cập cần thiết, bạn có thể nhận được một lỗi như thế này:

[Window Title]
Error Opening Key

[Content]
{7fb7b48f-531d-44a2-bcb3-5ad5a134b3dc} cannot be opened.
An error is preventing this key from being opened.

[OK]

Điều này là do tên khóa quá dài. Bạn sẽ phải tạm thời đổi tên tên khóa dài thành một ký tự và sau đó đổi tên lại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.