質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.00%

pythonにてマイクは認識されているが録音されない

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 894

vega

score 23

 音声をマイクから入力しwavファイルで保存したい

pythonで音声認識のApiをためそうと思い、pyaudioで録音しようとしたところファイルは出力されるが音声が入力されていなかった。
入力装置はUSBヘッドセットのマイクを使用しようとしている。

 発生している問題・エラーメッセージ

出力されたファイルに音声が入っておらず、無音になっている
また、実行結果にエラーのようなものが出力される

ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm_route.c:867:(find_matching_chmap) Found no matching channel map
recording...
finished recording

 該当のソースコード

import pyaudio  #録音機能を使うためのライブラリ
import wave     #wavファイルを扱うためのライブラリ

RECORD_SECONDS = 5 #録音する時間の長さ(秒)
WAVE_OUTPUT_FILENAME = "sample.wav" #音声を保存するファイル名
iDeviceIndex = 2 #録音デバイスのインデックス番号

#基本情報の設定
FORMAT = pyaudio.paInt16 #音声のフォーマット
CHANNELS = 1             #モノラル
RATE = 44100             #サンプルレート
CHUNK = 2**10            #データ点数
audio = pyaudio.PyAudio() #pyaudio.PyAudio()

stream = audio.open(format=FORMAT, channels=CHANNELS,
        rate=RATE, input=True,
        input_device_index = iDeviceIndex, #録音デバイスのインデックス番号
        frames_per_buffer=CHUNK)

#--------------録音開始---------------

print ("recording...")
frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
    data = stream.read(CHUNK)
    frames.append(data)


print ("finished recording")

#--------------録音終了---------------

stream.stop_stream()
stream.close()
audio.terminate()

waveFile = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
waveFile.setnchannels(CHANNELS)
waveFile.setsampwidth(audio.get_sample_size(FORMAT))
waveFile.setframerate(RATE)
waveFile.writeframes(b''.join(frames))
waveFile.close()

 デバイスの番号

cat /proc/asound/modulesの実行結果

 0 snd_hda_intel
 1 snd_hda_intel
 2 snd_usb_audio


aplay -lの実行結果

**** ハードウェアデバイス PLAYBACK のリスト ****
カード 0: PCH [HDA Intel PCH], デバイス 0: ALC892 Analog [ALC892 Analog]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 0: PCH [HDA Intel PCH], デバイス 1: ALC892 Digital [ALC892 Digital]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 1: NVidia [HDA NVidia], デバイス 3: HDMI 0 [HDMI 0]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 1: NVidia [HDA NVidia], デバイス 7: HDMI 1 [HDMI 1]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 1: NVidia [HDA NVidia], デバイス 8: HDMI 2 [HDMI 2]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 1: NVidia [HDA NVidia], デバイス 9: HDMI 3 [HDMI 3]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 2: Headset [Logitech G633 Gaming Headset], デバイス 0: USB Audio [USB Audio]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0

 試したこと

・マイクがミュートになっていないことはalsamixerから調整して確認済み
・マイクを0番のマイクにすると音声が入るがノイズのみになる

開発環境

os:ubuntu 16.04.5 LTS
python :Python 3.6.3 :: Anaconda custom (64-bit)
使用しているヘッドセット:logicool g633

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

check解決した方法

+1

おそらくlogicoolのヘッドセットがubuntuに対応していないのが原因と推測されました。
3.5mmプラグのマイクに変更したところ無事音声の入力ができたのでそれで解決とします。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

もしかしたらUbuntuのALSAの設定をいじったら行けるのかなあと思いました。

raspberryPi と pyaudioで録音、音声波形処理 |

/etc/modprobe.d/alsa-base.conf ファイルを、以下のような雰囲気で編集してみてください。

- options snd-usb-audio index=-2
+ options snd-usb-audio index=0

ストレートな回答ではなくて申し訳ないです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/14 09:16

    回答ありがとうございました。
    試してみたのですが、音声の入力は認識されませんでした。
    おそらくですが、入力に使用したヘッドセットがubuntuに対応していなかったのが原因だと思います。
    ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.00%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる