Open1

Windows10/11 で PyAudio を使用してマイクが使用できない AttributeError: 'NoneType' object has no attribute 'close'

PINTOPINTO

Windows10/11 にUSBマイクを接続してPythonのコードから pyaudio/SpeechRecognition を使用してマイクが使用できない。下記の本質的ではないエラーが表示されてAbortする。

AttributeError: 'NoneType' object has no attribute 'close'

まず、Windows10/11 では、自作プログラムからのマイクへのアクセス権がデフォルトで無効化されているのでアクセスを有効化する必要がある。これは、普段Windows上で開発・検証していない場合のWindowsのデフォルト設定の問題であり、最初に1回だけ設定を変更すれば以降は同様の問題が発生しない。

  • Windows 10でマイクのアプリのアクセス許可を有効にする

https://support.microsoft.com/ja-jp/windows/windows-10でマイクのアプリのアクセス許可を有効にする-94991183-f69d-b4cf-4679-c98ca45f577a

どうせビッグテック仕草でしばらくしたら 404 とかになるだろうからココに転記しておく。

  1. [ スタート ] > [設定] > [プライバシー > マイク] を 選択します。 [このデバイスのマイクへのアクセスを許可する] で [変更] を選択し、[Camera access for this device] (このデバイスのマイク アクセス) が有効になっていることを確認します。

  2. 次に、アプリがマイクにアクセスできるようにします。 [マイクの設定] で、[アプリによるマイクへのアクセスを許可する] に移動し、オンになっていることを確認します。

  3. アプリにマイクへのアクセスを許可したら、アプリごとに設定を変更することができます。 [ マイク の設定] で、[マイクにアクセスできる Microsoft アプリを選択する] に移動し、使用するアプリをオンにします。 デスクトップ アプリの場合は、[デスクトップ アプリによるマイクへのアクセスを許可する] がオンになっていることを確認します。

test.py
import speech_recognition as sr

def audio():
    print('')
    for idx, name in enumerate(sr.Microphone.list_microphone_names()):
        if idx not in [1, 7, 14, 28]:
            print(f'idx: {idx} {name}')
        else:
            print(f'idx: {idx} {name.encode("shift_jis").decode("utf-8")}')

    r = sr.Recognizer()
    with sr.Microphone() as source:
        print("say something ...")
        audio = r.listen(source)
        data = r.recognize_google(audio)
        print(data)

if __name__ == "__main__":
    audio()
python test.py

idx: 0 Microsoft Sound Mapper - Input
idx: 1 マイク (USB Microphone)
idx: 2 マイク配列 (インテル® スマート・サウンド・テクノロジー)
idx: 3 Microsoft Sound Mapper - Output
idx: 4 スピーカー (Realtek(R) Audio)
idx: 5 スピーカー (USB Microphone)
idx: 6 プライマリ サウンド キャプチャ ドライバー
idx: 7 マイク (USB Microphone)
idx: 8 マイク配列 (インテル® スマート・サウンド・テクノロジー)
idx: 9 プライマリ サウンド ドライバー
idx: 10 スピーカー (Realtek(R) Audio)
idx: 11 スピーカー (USB Microphone)
idx: 12 スピーカー (Realtek(R) Audio)
idx: 13 スピーカー (USB Microphone)
idx: 14 マイク (USB Microphone)
idx: 15 マイク配列 (インテル® スマート・サウンド・テクノロジー)
idx: 16 Speakers 1 (Realtek HD Audio output with SST)
idx: 17 Speakers 2 (Realtek HD Audio output with SST)
idx: 18 PC スピーカー (Realtek HD Audio output with SST)
idx: 19 ステレオ ミキサー (Realtek HD Audio Stereo input)
idx: 20 Headphones 1 (Realtek HD Audio 2nd output with SST)
idx: 21 Headphones 2 (Realtek HD Audio 2nd output with SST)
idx: 22 PC スピーカー (Realtek HD Audio 2nd output with SST)
idx: 23 Mic in at rear panel (black) (Mic in at rear panel (black))
idx: 24 マイク配列 1 (インテル(R) スマート・サウンド・テクノロジー・マイク)
idx: 25 マイク配列 2 (インテル(R) スマート・サウンド・テクノロジー・マイク)
idx: 26 マイク配列 3 (インテル(R) スマート・サウンド・テクノロジー・マイク)
idx: 27 スピーカー (USB Microphone)
idx: 28 マイク (USB Microphone)
say something ...