Jak zawsze używać mikrofonu Macbook z Bose QuietComfort 35?

30

Mam słuchawki z redukcją szumów (Bose QC 35), które mają również wbudowany mikrofon. Jeśli mikrofon jest aktywny, funkcja redukcji szumów nie działa, po prostu przechodzą przez dźwięki otoczenia (jest to zgodne z projektem. Przypuszczam, że zrobili to, abyś nie czuł, że jesteś w „próżni” podczas rozmowy) .

W każdym razie problem polega na tym, że za każdym razem, gdy podłączam słuchawki do systemu macOS, system przełącza się z mikrofonu wewnętrznego na jeden ze słuchawek. Dlatego redukcja szumów nie działa, chyba że przejdę do ustawień systemowych i przełączę mikrofon z powrotem na wewnętrzny.

Jest to bardzo denerwujące, zwłaszcza biorąc pod uwagę, że muszę to robić za każdym razem, gdy podłączam słuchawki.

Czy jest jakiś sposób, aby zmusić system macOS, aby zawsze używał mikrofonu wewnętrznego, czy też nie używać określonych słuchawek?

Aktualizacja z 10/2017:

Dowiedziałem się, że „mikrofon słuchawkowy” jest używany tylko wtedy, gdy Skype jest uruchomiony. Ale odkąd przestałem używać Skype'a (lub ciągle go mam), problem zniknął!

To nie jest rozwiązanie pierwotnego pytania, pozostawiam to tutaj na przyszłość.

kovpas
źródło
Jak podłączyć słuchawki przez Bluetooth? Jeśli tak, jak to wygląda w Preferencjach Bluetooth, jako pojedyncze urządzenie lub jako para dwóch urządzeń, słuchawek i mikrofonu?
toma
@toma the Bose QC 35 to bezprzewodowy zestaw słuchawkowy, ale można go również używać przez złącze telefonu
Northsea
@northsea, jak widzę na oficjalnej stronie internetowej, słuchawki obsługują zarówno interfejsy, bluetooth, jak i przewód audio. więc jeśli podłączysz je przez bluetooth, jak będą wyświetlane w ustawieniach BT? bose.com/en_us/products/headphones/over_ear_headphones/…
toma
@toma Używam ich przez bluetooth, tak. Są pokazane jako słuchawki.
kovpas
4
To nie jest rzeczywiste rozwiązanie, ale możesz szybko przełączać źródła wejściowe, przytrzymując Optioni klikając ikonę Dźwięk na pasku menu, a następnie wybierając źródło wejściowe z listy. Przynajmniej jest to trochę szybsze niż używanie Preferencji systemowych.
aaplmath

Odpowiedzi:

6

Nie jestem pewien, na ile jest to praktyczne (nie miałem okazji zmierzyć zużycia procesora itp.), Ale poniższy AppleScript wykona zadanie - wystarczy zastąpić [YOUR HEADPHONES' NAME]rzeczywistą nazwą słuchawek. To jest zmodyfikowana wersja skryptu z wątku Społeczności wsparcia Apple .

Zapisz poniższy skrypt jako aplikację, uruchom go i dodaj do elementów startowych - powinien on działać nieprzerwanie w tle.

repeat
    set statusOld to checkStatus()
    set statusNew to checkStatus()
    repeat while statusOld is equal to statusNew
        delay 5 --for 5 second checks
        set statusNew to checkStatus()
    end repeat
    if statusNew is true then
        tell application "System Preferences" to activate
        tell application "System Preferences"
            reveal anchor "input" of pane id "com.apple.preference.sound"
        end tell
        delay 0.5
        tell application "System Events" to tell process "System Preferences"
            tell table 1 of scroll area 1 of tab group 1 of window 1
                select (row 1 where value of text field 1 is "Internal Microphone")
            end tell
        end tell
        tell application "System Preferences" to quit
    else
        -- Nothing needs to happen, the device was removed
    end if
end repeat

on checkStatus()
    set bluetoothDeviceName to "[YOUR HEADPHONES' NAME]"
    set myString to do shell script "system_profiler SPBluetoothDataType"

    --initial check if it's not even there
    if myString does not contain bluetoothDeviceName then
        return false
    else

        --find out if connected/disconnected
        set AppleScript's text item delimiters to "name:"
        set myList to the text items of myString --each item of mylist is now one of the devices

        set numberOfDevices to count of myList
        set counter to 1
        repeat numberOfDevices times --loop through each devices checking for Connected string
            if item counter of myList contains bluetoothDeviceName then
                if item counter of myList contains "Connected: Yes" then
                    return true
                else if item counter of myList contains "Connected: No" then
                    return false
                else
                    display dialog "Something went wrong with the script" --this shouldn't happen
                end if
            end if
            set counter to counter + 1
        end repeat
    end if
end checkStatus

Możesz grać z czasem między czekami (wiersz z komentarzem for 5 second checks), aby zmniejszyć zużycie zasobów.

W AVFoundationmacOS High Sierra pojawiło się wiele nowych API (szczególnie w ), które pozwoliłyby na znacznie czystsze rozwiązanie tego problemu. Jeśli nie masz ochoty na Swift lub Objective-C (lub mostek skryptowy Cocoa w AppleScript i JXA), po wydaniu High Sierra zastanowiłbym się nad użyciem tych API zamiast tego skryptu. W szczególności Przewodnik po programowaniu sesji audio Apple i ten artykuł dotyczący przepełnienia stosu pokazują niektóre techniki wykrywania połączeń Bluetooth za pomocą AVAudioSession.

aaplmath
źródło
Tak, wygląda na porządny kompromis. Jestem naprawdę rozczarowany, że Bose wciąż nie może wymyślić dobrego wsparcia dla swojego produktu w Sierra ... Do tego czasu wydaje się, że musiałbym zastosować takie obejścia :(. Dziękuję!
kovpas
@aaplmath Skrypt jest naprawdę interesujący ... i bardzo podoba mi się ta sugestia na końcu twojego postu. Pisanie aplikacji na pasku menu (lub aplikacji bezgłowej), która monitoruje sesję audio i zawsze przekierowuje do wewnętrznego mikrofonu, byłoby fajnym projektem do pracy i może być trochę bardziej niezawodna ... (może) Ale nadal lubię wersja AppleScript, ponieważ jest to coś, czego każdy mógłby dziś użyć. Dzięki!
Evan Stone,
18

Nadal bardzo podoba mi się sugestia @ aaplmath (i może być najlepsza w przyszłości), ale natknąłem się również na to rozwiązanie, które nie wymaga kodowania (AppleScript / Swift / ObjC / Other) w High Sierra i jest bardzo łatwe do skonfigurowania .

Pamiętaj, że odpowiedź znajdowała się w sekcji komentarza w artykule i wydaje się, że działa ona w High Sierra (mam 10.13.6), ale nie wiem, czy to działa w Mojave i poza nią.

Otwórz standardowe narzędzie „Audio MIDI Setup.app” i kliknij + u dołu, aby utworzyć urządzenie agregujące. Następnie wybierz mikrofon wewnętrzny jako jedyny element tego urządzenia agregującego i wybierz go jako domyślne wejście. Z jakiegoś powodu uniemożliwia to Mac OS X wybór Mikrofonu Bluetooth i pozostanie na wewnętrznym po ponownym połączeniu.

Po utworzeniu tego zagregowanego wejścia przejdź do zwykłych Preferencji systemowych -> Dźwięk -> Wejście (karta)

Źródło: http://ssrubin.com/posts/fixing-macos-bluetooth-headphone-audio-quality-issues-with-hammerspoon.html#comment-4018174387

Evan Stone
źródło
Miałem również problem z Bose QC 35 ii. To rozwiązanie działa idealnie. Dziękuję Ci.
Charles Han
Działa to również ze słuchawkami audiomx.
Danny Staple
Nie działa na macOS Catalina. Moje AirPods v2 ponownie staje się głównym mikrofonem, a nowo utworzona agregacja wydaje się niczego nie blokować: ”(
MoOx
Działa w Mojave i nie mam jeszcze zainstalowanej Cataliny. Apple prawdopodobnie zmieniło coś, co sprawia, że ​​teraz to nie działa ... bardzo rozczarowujące. Dobrze wiedzieć, że to koniec drogi, jeśli tak jest ... Wygląda na to, że Catalina ma jednak pierwotny problem, a jeśli tak, to bardzo rozczarowuje.
Evan Stone,
6

Mam ten problem podczas korzystania z symulatora systemu iOS i wydaje on dźwięk, na przykład z klawiatury. Mój Bose 35 przełącza się na strumień audio niższej jakości i wszystko brzmi okropnie.

Z innych wyników wyszukiwania wynika, że ​​przełączenie na wewnętrzny mikrofon komputera Mac rozwiązuje problem. Na podstawie tego pytania zdałem sobie sprawę, że mogę nie być w stanie ustawić tego ustawienia dla mojego komputera Mac, ale mogę je ustawić dla mojego symulatora iOS.

Symulator iOS: Sprzęt -> Wejście audio -> Mikrofon wewnętrzny

Michael Ozeryansky
źródło
-2

Jeśli używasz słuchawek za pomocą kabla zamiast bluetooth, najprostszym rozwiązaniem powinno być użycie kabla z gniazdem telefonicznym TRS (Tip + Ring + Sleeve) zamiast gniazda telefonicznego TRRS (Tip + Ring + Ring + Sleeve). Gniazdo telefoniczne TRS obsługuje tylko sygnał stereo, ale nie ma mikrofonu. W ten sposób nie będzie przesyłany żaden sygnał mikrofonu, a wbudowany mikrofon powinien pozostać aktywny.

morze Północne
źródło
1
Nie, używam ich przez bluetooth. Bezprzewodowy był głównym powodem, dla którego kupili je w pierwszej kolejności :)
kovpas