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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2286閲覧

Python を利用した出力音声の録音

namagon

総合スコア5

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2018/04/05 04:49

前提・実現したいこと

Python3.6 でスピーカーから出力されている音声を録音し、ファイルに出力したいと思っています。
マイクの音は同時に別ファイルに出力したいのと、OSに依存しないツールを作りたいので
ステレオミックスしてマイクをミュートするという手段は取りたくありません。

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

pyaudioを使用してスピーカーの音を撮ろうとしています。
マイクからの音声は録音できましたが、スピーカーから流している音を撮る方法がわかりません。
pyaudioを使用する以外の手段をとるべきでしょうか

試したこと

input_device をスピーカーに指定して録音してみたら以下のエラーが発生しました。

OSError: [Errno -9998] Invalid number of channels

補足情報(FW/ツールのバージョンなど)

MacOS 10.13.3
Python 3.6.4
PyAudio==0.2.11

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coco_bauer

2018/04/05 05:28

スピーカーから出す音のデータは、pythonのプログラムで扱っているのですから、それを収集すれば良いのではないでしょうか。わざわざ、音にしてから、録音するという手間をかける必要は無さそうに思います。
namagon

2018/04/05 05:55

> スピーカーから出す音のデータは、pythonのプログラムで扱っているのですから 申し訳ございません、ここの部分がよくわかりません。 MacOS においてスピーカーから出てくる音のデータはOSXに標準搭載されているpythonで扱われているという認識でよろしいでしょうか?
tachikoma

2018/04/05 05:59

python以外のアプリケーションからスピーカーに流れている信号をハックしたいんですかね。これはpyaudioの守備範囲外ですよ。
namagon

2018/04/05 06:01

おっしゃるとおりです、ありがとうございます。pythonでやる必要も無いので別の手段で実現しようと思います。ありがとうございました。
guest

回答2

0

検索してみた印象でコメントしてます。間違いあったらご容赦ください。


音声の出力デバイスと入力デバイスはOSの違いはあるものの大雑把にいって

出力デバイス:
そのデバイスへwriteするとシステムに接続しているなんらかのハードウェアへ音声信号が送信され「音声が出力される」という仕組み。

入力デバイス:
そのデバイスからreadするとシステムに接続しているなんらかのハードウェアから音声信号からの波形データが読み込める仕組み。

つまり出力デバイスはwriteするものとして設計されており、それに対して一般的にreadも行えるように設計されているかといえば「NO」だと思います。

ただし、システムによっては「音声出力を音声入力へループバックする」機能が備わっていることがあり、Windowsですとそれが標準で備わってますが例えばMacintoshには「その機能が標準にない」ようです。ただしそれをサポートした製品はあるようです。

ためしに「system sound loopback macintosh」で検索すると
https://rogueamoeba.com/loopback/
http://www.kuwatec.co.jp/preflight/jp/man/index.html
などいくつかヒットしました。

一方「system sound loopback linux」で調べてみると
http://manual.audacityteam.org/man/tutorial_recording_computer_playback_on_linux.html
など別の手法らしい情報がヒットしました。

思うに「ループバックを実現すること」と「システムの入出力デバイスとのやりとり」は別の機能として捉えるべきではないかと思います。PyAudioあるいは別のモジュール(pygameとか)は後者の機能しかカバーしていないのではありますまいか?それゆえ前者はOSごとに「なにかしらの別の方法で」準備しておかなければならないような気がします。

投稿2018/04/05 06:07

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KSwordOfHaste

2018/04/05 06:11

loopback機能がOSごとにどうなってるんだろうと思い検索してみたのですが、質問コメントを見るとなんか解決しちゃったようですね。蛇足回答だったかも知れません。
namagon

2018/04/05 06:31

大変勉強になりました、ありがとうございます。 質問前に実現したいことの切り分けをすべきでした。 SoXで録音すればOS依存は解消できると思ったのでその方針でやってみようと思います。
KSwordOfHaste

2018/04/05 06:36

なるほど、そういう目的のことがしたかったんですね。loopbackとか関係ないですねw;
guest

0

自己解決

pyaudioによるスピーカーへの信号をジャックするのは無理とのことなので
SoXコマンドを実行するような実装で実現する方針にしました。

投稿2018/04/05 07:38

編集2019/08/10 07:54
namagon

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問