ダイナミックマイクとオペアンプ

 

昔、中学校のなんかの工作で「インターホン」なるものを
 作成した記憶があり。
 
その前にインターホンって何?
 という人も沢山いると思うので、
  wikiで調べてみたけど、なんか解説難しいので、
   テレビドアホンのテレビのないバージョン(声だけ)と考えてください。
 
それで、その構成ですが、
 スピーカー→アンプ→スピーカー
  って感じになっていたと記憶していて、
 
親機側のスイッチを押しながら、
 なにか話すと子機側から声が聞こえて、
 
親機側のスイッチを離すと、
 回路が入れ替わって、
  子機側の音が親機側から聞こえるという
   簡単な回路になっていた気がする。
   
子機側にもスイッチが付いていて、
 押すと親機側からブザー音が聞こえて、親機側の人が気づいて、
 
親機側の人がボタンを押しながら「はい〇〇です。」とか会話を開始して、
   最後に「どうぞ」と言いつつ、ボタンを離して
    子機側の人が話すって事になっていた。と思う。
 
上記のように同時には話せず、片方が送信中は片方が受信専用になる
  半2重通信ですね。

 

こんなの見つけました。

 https://www.marutsu.co.jp/contents/shop/marutsu/mame/145.html

  これの、片側通話方式その2ですね。
 
話している方のスピーカーがマイクの代わりになるってことですね。

 

ダイナミックマイク
 
 googleで聞くとAIが以下のように回答してくれました。
 

  空気の振動をコイルと磁石を使って電気信号に変換する方式をダイナミックマイクと言う。
  ダイナミックマイクとは、電磁誘導を利用して音声信号を得るマイクのことです。 構造は非常にシンプル。 
  ダイヤフラム、コイル、磁石がひとつのカプセルに納められ、空気の振動を受けたダイヤフラムが動くと、
  ダイヤフラムに取り付けられた金属のコイルが磁石の磁界の中で振動して、
  電気信号を得る仕組みになっています。
 
 つまり、スピーカーの構造と同じです。
  スピーカーの振動板が声の影響で振動して、
    中のコイルが一緒に振動、
     近くにくっついている磁石とコイルによって、
      微弱な電流が発生する。
      この微弱な電流をアンプで増幅することで声を大きくしたり、
       遠くまで運んだり出来るってことですね。
 
回路図(LM358版)
 
 
 
 前にオペアンプの記事はいくつか書いてます。
  https://miha.jugem.cc/?eid=309
   そちらとの変更点を書きますね。
 
 発信防止の為に以下の3点変更を加えております。
  RaとRbを10KΩに変更これは気分
  R1とR2をそれぞれ1KΩと200KΩに変更 R2が1メガ超えると発信しやすい
  Cf1を追加
  Rpを追加
  
 参考に秋月のコンデンサーマイクアンプキットの場合
  https://akizukidenshi.com/goodsaffix/ae-micamp_20200626.pdf
  たぶん、これと同じ定数でもうまくいく。
  
 参考 オペアンプの発振に関して
  マルツさん
   https://www.marutsu.co.jp/contents/shop/marutsu/mame/106.html
   こちらを参考にして、上記の発振防止の回路を入れています。
 
動作


 シャーっていうホワイトノイズみたいな音が聞こえるのはそういうものなんですかね?
 すごい気になる感じではないんですけど、
  昔カセットテープを再生した時に後ろで鳴っている音に似ている感じの音です。
 
 上で書いた秋月のコンデンサーマイクキットでは気にならないので、
  比較するとなんだろう?って気になります。
   秋月のコンデンサーマイクキット
    https://akizukidenshi.com/goodsaffix/ae-micamp_20200626.pdf
 
 以前記事にした、NJM4580でマイクアンプを作ったときも気にならなかった。
   https://miha.jugem.cc/?eid=88
  ですので、NJM4580で作り直してみました。
 
NJM4580回路図
 

 
 
 
 こちらは両電源方式のアンプになりますので、
 電源回路を追加しています。
 
 当初、マイナスの電圧を作り出すICを使ってみたのですが、
  https://miha.jugem.cc/?eid=247
 オーディオで使うには不向きで、ビーっていうノイズが乗ることが判明しました。
 なので、使えず。
 
 電圧を分圧するしてプラスとマイナスとGNDを作り出す回路とました。

 

電源
 電池は006P型の充電式を使いたいと思い。
  amazonから
    https://www.amazon.co.jp/gp/product/B08Z7979WM
   を購入してみたのですが、こちらもノイズがビーってなったので、即返品。
   
   
   
   充電用のUSB端子が電池の下についているタイプだったので、
    充電用の回路と、もしかしたら放電時に昇圧するような
     回路が入っているんだと思います。
  
  その代わりとして、
   https://www.amazon.co.jp/gp/product/B08BJ1YPY6
   
   
   
   
  同じメーカーの充電器が分離しているやつを購入しました所、
  快適に使えるようになりました。こっちはノイズ入らないです。

 

使用感
 
 コンデンサーマイクと比較して、近くの音しか拾わないです。
 ダイナミックマイクの特徴ですね。
 ですので、屋外で環境音を録音するなどには向かないけど、
 朗読とか音声系の近くの音だけを録音したいときには向いているのではないでしょうか?

 

完成図
 
 
 
 
 中身

 

  

 

 

蛍光灯の安定器の作成

 

いわゆる蛍光灯は2027年末で製造あんど輸入禁止


 https://www.env.go.jp/content/000200659.pdf
 との事であと3年半で手に入らなくなるようですね。
  使用するのはOKですので、使い続けるのは良いんですけど。
   蛍光灯は寿命が短いので、大量に買い込んでおく人も現れそうです。

 

蛍光灯のあの不安定な感じが好きです。
 無くなってしまうのは悲しいですね。

蛍光灯には安定器と、グローランプが必要で、
 どちらも価格が上がっていると感じています。
 
回路図

アカリセンターより
 https://www.akaricenter.com/chokkan/fujiidenki/img/ecd-20100ab1-kessen.gif

 


 

それで、
そもそも蛍光灯ってどうやってるんだっけ?
 と思い、グローランプ繋いで、直接100Vに接続してみると、一瞬ピカッと光り、
  お亡くなりになりました。
   上の回路の安定器を抜いたバージョンですね。

 

google先生解説
『放電ランプの場合はランプ電流が増加するにつれてランプ電圧が
 低下すると いう特性(負特性)があるため、
 ランプに電流が流れ始めると急激に電流が増大して、
 ランプが壊れてしまいます。 
 そこで、ランプに大きな電流が流れないようにするのが、
 安定器の役割です。』 

 

電流を制限するですね。ちょっと判んないですが、
 間の所にコイルをくっつけて抵抗にするってことですかね?

 

安定器を追加で購入
 ECD-20100AB1
  20W1灯のもので
  1000円ぐらいでした。
   ちなみに蛍光灯はDAISOで150円

 

で、上記の通りに接続して
 電源ON。予定通り光りますね。

 

 

 

この安定器と同じものを挟めば良いって事が判ったので
 測定。1-3間のコイルの直流抵抗とインダクタンスを測定してみた。
  430mH
  28.3Ω
  
これと同じようにコイル巻けば良いんですよね。
って事で。巻いてみた。というか昔巻いたのを持ち出してきた。

 

 

何回巻いたか忘れたけど、
 0.2mmのポリウレタン線を6.8mmの鉄の棒にぐるぐる巻いて、
 電磁石になるまで巻いたのが有ったので、それを使ってみました。
  多分100回から120回ぐらい。

 

自作コイルの測定。
 350mH
 67Ω
 直流抵抗が多めで、インダクタが7割程度ですが、壊れることはなかろう。

 

これで、上記の通りに接続して
 電源ON。ちゃんと光りますね。

 

 

測定すると、蛍光灯の両端にかかっている電圧が78V
 全体の消費電力が12Wでした。蛍光灯が20W型で消費電力18Wの定格のものなので、
  省エネです。

 

1時間程度安定して点灯したのを確認しましたが、
 自作安定器=コイルはほんのり温かい感じです。
 安定機の部分で消費している電力が約2.6Wになる計算です。

 

サンキャッチャーなるものをぐるぐる回す装置。

 

はじめに

 

サンキャッチャーなるものをもらいました。
太陽の光の当たる場所に置くと、反射したり、屈折したりして、
家の中の壁に星のような模様を浮かべてくれます。
おっちゃんは手で回すのが面倒だったのでこれを回転する装置を考えてみました。

 

動いている様子
 https://youtu.be/j7XFsv0Efww

 


 なんか最後のカットが未確認の空飛ぶ飛行物体みたいになった。

 

材料は

 

 タミヤのプーリーがメインで、
  https://www.tamiya.com/japan/products/70140/index.html
  タミヤの 3mmシャフトセット
   https://www.tamiya.com/japan/products/70105/index.html

 

 あとはどこかから集めてきた板の端切れと
  モーター固定するやつ
   https://www.monotaro.com/g/06009597/?t.q=%E3%83%A2%E3%83%BC%E3%82%BF%E3%83%BC%20%E5%9B%BA%E5%AE%9A

 

 手持ちの材料でなんでも作りたいんですけど、
  回転部分の抵抗は少なくしたいので内径3ミリ、
   外形6ミリのベアリングを採用しています。
    https://www.amazon.co.jp/gp/product/B0CFZQRL8C

 

 特別なことはないんですが、
  垂直に穴を開けるのが味噌です。
   ドリルガイド有ったほうが良き
    https://www.amazon.co.jp/gp/product/B0B1ZTB3SW
    

 あと130モーター。
  https://www.amazon.co.jp/gp/product/B00288BIE4
  
プログラムもいらないですね。電源にモーターを直結してください。

 

上から見た図


下から見た図

 

 

横から見た図

 


壁の光

 


キャッチャー

 


130モーターなので、結構動作音が気になります。

 もう少し、音の小さいほうが実用性はありそうですね。

 

UBUNTU22でSIPサーバーasteriskをインストール

 

■ubuntu22をダウンロード

 

https://jp.ubuntu.com/download
から Ubuntu Desktop 22.04.4 LTS をダウンロードしてきます。

 

■USBメモリに書き込みます。

 

ダウンロードすると
 ubuntu-22.04.4-desktop-amd64.iso
  が取得できます。
 isoの書き込めるソフトを使ってDVDか、USBに書き込みます。

今回はrufusを使ってUSBに書き込みます。

 

■UBUNTUの最新化

 

sudo apt update

 

sudo apt upgrade

 

sudo shutdown -r now

 

■asteriskをインストール

 

sudo apt search asterisk


sudo apt show asterisk


sudo apt install asterisk -y

 

これで終わり。centOSに比べてすごい簡単。

途中でソースを変更したり、必要なパッケージを足したりとかは不要でした。

 

■asteriskを有効化して起動

 

systemctl enable asterisk

 

systemctl start asterisk

 

sudo systemctl status asterisk

 

■pjsip

 

※pjsipは上記で有効になるのでしょうか?
※centOSでは別にインストールしていたんですけどね。

 

===============
asterisk設定と音声ガイダンス

===============

 

■音声ガイダンス

 

前回と同じく6003にかけた時に
 「こちら〇〇です。電話がつながったらお話ください。」とガイダンスを流します。
ファイルはgsmという形式で配置するので、
 wavファイルに録音後、http://convertio.co/ja/m4a-gsm/
 にアクセスして変換しておきます。
  
ガイダンス用の応答の音声ファイルの置き場
 CentOSと違って、/var/lib/asterisk/sounds配下にenが無くてcustomが存在するのでそこに配置

ls /var/lib/asterisk/sounds
cp /home/housou/eiwadai.gsm /var/lib/asterisk/sounds/custom

 

■設定を入れます。

 

vi /etc/asterisk/pjsip.conf 

 

[transport-udp]
type=transport
protocol=udp
;udp,tcp,tls,ws,wss,flow
bind=0.0.0.0

[6001]
type=endpoint
transport=transport-udp
context=default
disallow=all
allow=ulaw
allow=gsm
auth=6001
aors=6001
rewrite_contact=yes

[6001]
type=auth
auth_type=userpass
password=6001
username=6001

[6001]
type=aor
max_contacts=2

[6002]
type=endpoint
transport=transport-udp
context=default
disallow=all
allow=ulaw
allow=gsm
auth=6002
aors=6002
rewrite_contact=yes

[6002]
type=auth
auth_type=userpass
password=6002
username=6002

[6002]
type=aor
max_contacts=2

[6003]
type=endpoint
transport=transport-udp
context=default
disallow=all
allow=ulaw
allow=gsm
auth=6003
aors=6003
rewrite_contact=yes

[6003]
type=auth
auth_type=userpass
password=6003
username=6003

[6003]
type=aor
max_contacts=2

※pjsip.confはCentOSと変わらず

 

vi /etc/asterisk/extensions.conf

 

[default]
exten => 6001,1,Dial(PJSIP/6001,,r)
exten => 6001,2,Hangup()

exten => 6002,1,Dial(PJSIP/6002,,r)
exten => 6002,2,Hangup()

exten => 6003,1,Answer()
exten => 6003,2,Playback(/var/lib/asterisk/sounds/custom/eiwadai)
exten => 6003,3,Dial(PJSIP/6003,,r)
exten => 6003,4,Hangup()

※ポイントは「音声ガイダンスをフルパスで書く」です。

 

systemctl stop asterisk

 

systemctl start asterisk

 

systemctl status asterisk

 

■Zoiperをインストール

 

ダウンロード
https://www.zoiper.com/en/voip-softphone/download/current
Linux用をダウンロードしてきます。

 

解凍
 tar Jxfv Zoiper5_5.6.4_x86_64.tar.xz

 

起動

cd Zoiper5/
./zoiper

 

起動してくる画面でfreeで進んで
ログインID : 6003@192.168.120:5060
パスワード : 6003
↑はpjsip.confに設定したもの

自動応答
 proにアップグレードして、設定から自動応答
   再起動後に設定を維持をクリックしておく

 

■自動ログイン

 

 OS起動と同時にZoiperも起動したいので、
 UBUNTUの設定で自動ログインにしておく。
 設定→ユーザ→ロック解除→自動ログイン
 

DELL-inspironにLinuxをインストールする方法

 

DELL inspiron 14 5430にLinuxをインストールする時に
 いろいろハマりましたので記録に残します。

 

■ハマりポイント

 

 3つあります。

 そもそもCentOS7.9はM.2のSSDには対応できない。
 ビットロッカーで暗号化されているために、Linuxから認識できない。
 セキュアブートがBios設定ONになっているため、Linuxを入れるのはOFFにしなきゃならない

 

■CentOS7.9

 

CentOS7.9はもう古いんです。Windows7でも同じ事象が出てるみたいですが、
 M.2のSSDはインストール先として一覧に出てきません。
 自分としては色々使っていたOSなので、名残惜しいですが、
 今年7月だったかなーでサポート切れでセキュリティーアップデートも出なくなるので
 今後はUbuntuに乗り換えかなーと思います。
 Ubuntuの22.04.4ならあと3年は大丈夫です。
 
■ビットロッカー
 
インストールされてきたWindows11ですが、ビットロッカーが標準でONになってます。
このため、他から見ようと思ってもその領域見れません。
Windowsの設定 セキュリティーからOFFにしておきます。
 
■セキュリティーブート

 

これはCentOS7.9でやろうとしていたからなんですけど、
 古いLinuxをインストールする場合はBios設定のセキュリティーブートを
  OFFにするのが効く場合もあるようです。
 Unbuntuの22.04.4はセキュリティーブートに対応しているようで大丈夫ですね。
 いちおう記録としてメモっておきます。

DELL-inspironにWindows11をクリーンインストールする方法

 

DELL inspiron 5430にLinuxをインストールした後に、
 Windowsに戻すのにいろいろハマりましたので記録に残します。

 

■まえがき

 

Windowsに対応していないソフトが有りまして、
  Linuxでシステムを作りたかったので、
  簡単にノートパソコンを購入し、
   Windowsを消してLinuxに入れ替えて使い終わったら
  Windowsに戻す!!ということを考えておりました。
 戻すときの方法を普通にマイクロソフトのサイトからWindows11を
 ダウンロードしてインストールすればよいと思っておりました。
 
 これが甘かった。

 

■ハマった所
 
 自作PCとかだと、MicrosoftからダウンロードしたWindows11の
  インストーラーのisoをdvdに焼いて起動すれば、インストールOK
   となるんですけど。
 
 本パソコンでは
  DVDから起動して進むんだけど、インストール先のHDDの指定で
   SSDのディスクが表示されない事象が発生。
 
 ここから調べたり試したりが始まって・・・
 
 M.2のSSDだと出来ない場合がある。
  とか、
 M.2のSSDだと、SerialATAじゃ無いのでNVMEがー
  とか
 BIOSでIntel VMDに関する項目を探して確認。有効の場合は無効にするか、
  有効のままドライバーを組み込んでWindowsをインストール
   とか
 いろいろ情報があったんですけど、本パソコンにはいまいち当てはまらず。
 
 何時間か経過・・・・

 

■解決

 

 なんか翻訳がおかしくて「Linuxを再インストールする」ってなってますけど、
  Winodws11のクリーンインストールが可能です。
   もともとLinuxで出荷されたのはLinuxが入るのかもです。
 
 OS Recovery Toolを以下からダウンロードして
 https://www.dell.com/support/home/ja-jp/drivers/osiso/recoverytool/w2021
 ツールを起動するとUSBにリカバリブート用のセットアップを書き込んでくれる。
 そのUSBをパソコンにセットして、
  起動直後F12を押してUSBから起動させて、後はメニューに合わせて進んでいく。
 いちおう、システム検査後、リセットを選択。

 


 Windows11の初期化へ進んで無事Windows11に戻りました。

 途中の試行錯誤でBios設定を色々いじってたので、工場出荷状態に戻したり、
  工場出荷状態に戻らない項目は手動で戻したりいろいろしましたけど、
   結果は上記の通り

音声転送プログラム

 

■前書き


 現代において
  インターネット回線を使ってPC同士で会議とか、通話とかする事が出来ます。

今回はその初歩的部分。
  pythonを使って一方通行ですが、
   音声を送るプログラムを作ってみたので、そのプログラムとセットアップ方法を
    記録しておきます。

 

■構成

 

  マイク-PC1-(LAN)-PC2-アンプスピーカー

 

■方式
 
 PC1
   PyAudioでマイクから音声を入力。44.1Khz モノラル 16Bit
    そのままUDPで宛先を指定して送信
 
 PC2
    UDPでデータを受け取って
    PyAudioでスピーカーに音声を入力。44.1Khz モノラル 16Bit

 ※この方式の欠点
    全く圧縮していないので、ネットワーク帯域を結構使う。
      といっても、計算すると
       44100×2×8=約71Kbps 
        ぐらいですので、構内LANで単独使用なら問題ないかなーと思います。
    UDPなので、順序保証とか、データの保障が無い。
      とはいえ、こちらも多少ノイズとして聞こえるぐらいの
       影響しかないかなーと思います。
     送信側と受信側で同期を取っていないので、長時間使うと遅延したり、
      バッファーがオーバーフローする可能性あり。
     送受信の両方でエラー時に自動的に再起動するとか、対処必要になると
      思われ。

 

========================
セットアップ
========================

 

■ファイル配置

 

 /usr/local/bin/audio-transferに所定のファイルを配置していく

 

[root@localhost audio-transfer]# pwd

/usr/local/bin/audio-transfer

 

[root@localhost audio-transfer]# ls -al
合計 12
drwxr-xr-x. 2 root root   57  3月 21 09:42 .
drwxr-xr-x. 3 root root   28  3月 21 09:42 ..
-rw-r--r--. 1 root root 1241  3月 21 09:42 recv.py
-rw-r--r--. 1 root root 1526  3月 21 09:42 send.py
-rw-r--r--. 1 root root 1248  3月 21 09:42 show-audio.py
[root@localhost audio-transfer]# 

 

■python準備

 

Windowsも手順は同じ。
以下はCentOSの場合を記載しています。

 

[root@localhost audio-transfer]# python --version
Python 2.7.5

古い。せめて3系にしたいなー
って事で・・・

 

yum install -y python36
yum install -y python36-devel
pip3 install pyaudio

 

■テスト

 

python3.6 show-audio.py

これで、パソコンに入っているオーディオの入出力ポートが一覧出力される。

 

 Device 0: HDA Intel HDMI: HDMI 0 (hw:0,3), Channels: 0
 Device 1: HDA Intel HDMI: HDMI 1 (hw:0,7), Channels: 0
 Device 2: HDA Intel HDMI: HDMI 2 (hw:0,8), Channels: 0
 Device 3: HDA Intel HDMI: HDMI 3 (hw:0,9), Channels: 0
 Device 4: HDA Intel HDMI: HDMI 4 (hw:0,10), Channels: 0
 Device 5: HDA Intel PCH: ALC269VC Analog (hw:1,0), Channels: 2
 Device 6: hdmi, Channels: 0
 Device 7: pulse, Channels: 32
 Device 8: default, Channels: 32
 
しかし、このままではどれがマイクからの入力なのかわからん。
 なので、0から順番に試していって、
  5番がそれである事を突き止めて、
   input_device_index = 5 #
    に決定。

 

だけど、一瞬つながった後にエラーになる。
 その一瞬に送信側でなにか叫ぶと受信側のスピーカーから音が鳴る。
  少し成功。あと一歩です。

 

Traceback (most recent call last):
  File "send.py", line 42, in <module>
    data = stream.read(chunk)
  File "/usr/local/lib64/python3.6/site-packages/pyaudio/__init__.py", line 571, in read
    exception_on_overflow)
OSError: [Errno -9981] Input overflowed

[root@localhost audio-transfer]# 

 

バッファーが足りなくなるとダメっぽいので5倍にする。
「chunk = 50240」に変更

 

Traceback (most recent call last):
  File "send.py", line 45, in <module>
    sock.sendto(data, addr)
OSError: [Errno 90] Message too long
[root@localhost audio-transfer]# 

 

今度はUDP送信でメッセージが長いって。

 

試行錯誤・・・・

 

結局googleで探して
音声をマイクから読み込む部分に「exception_on_overflow=False」を追加。
data = stream.read(chunk, exception_on_overflow=False)

 

いちおうこれで落ち無くなった。

 

いろいろいじってると判るんだけど、
chunkを大きくすると遅延が出ることが判明。
結局chunkは元に戻して1024とする。
「chunk = 1024」

 

■解決

 

音はクリアですね。デジタル通信なんだから当たり前といえば当たり前。
 しかし、圧縮してないので、理論的に考えて普通のIP電話よりクリアですね。
帯域さえ確保できれば(といいつつも、それほど大きな帯域でもないし)
44.1Khz/16Bitですから、CD音質で音を運ぶのは現代の通信回線において余裕です

 

■起動

 

受信側PC(Windows)
 python3.6 recv.py
 ※受信側はOSのFW設定でUDPの5005を開けてください。

 

送信側PC(CentOS)
 python3.6 send.py

 

■結果のソース。

 

「送信側」

 

import pyaudio
import socket
import sys

# ネットワーク設定
UDP_IP = "192.168.10.111"  # 送信先のIPアドレス
UDP_PORT = 5005  # 送信先のポート番号
addr = (UDP_IP, UDP_PORT)

# PyAudioの設定
chunk = 1024 # 音声データのチャンクサイズ
#chunk = 10240 # 音声データのチャンクサイズ
format = pyaudio.paInt16  # 音声のフォーマット
channels = 1  # モノラル
rate = 44100  # サンプリングレート
input_device_index = 5 # 

# UDPソケットの初期化
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# PyAudioの初期化
p = pyaudio.PyAudio()

# 音声入力ストリームの開始
stream = p.open(format=format,
                channels=channels,
                rate=rate,
                input=True,
                frames_per_buffer=chunk,
                input_device_index=input_device_index)

# 音声出力ストリームの開始
#output_stream = p.open(format=format,
#                       channels=channels,
#                       rate=rate,
#                       output=True,
#                       frames_per_buffer=chunk)

print("録音を開始します。CTRL+Cで終了します。")

try:
    while True:
        data = stream.read(chunk, exception_on_overflow=False)
        #output_stream.write(data)  # スピーカーから音声出力
        sock.sendto(data, addr)  # UDPで音声データを送信
except KeyboardInterrupt:
    print("録音を終了します。")

# ストリームを閉じる
stream.stop_stream()
stream.close()
#output_stream.stop_stream()
#output_stream.close()
p.terminate()

# ソケットを閉じる
sock.close()

 

 

 

「受信側」

 

import pyaudio
import socket
import sys

# ネットワーク設定
HOST = ""  # 送信先のIPアドレス
PORT = 5005  # 送信先のポート番号

# PyAudioの設定
chunk = 102400  # 音声データのチャンクサイズ
format = pyaudio.paInt16  # 音声のフォーマット
channels = 1  # モノラル
rate = 44100  # サンプリングレート

# UDPソケットの初期化
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((HOST, PORT))

# PyAudioの初期化
p = pyaudio.PyAudio()

# 音声出力ストリームの開始
output_stream = p.open(format=format,
                       channels=channels,
                       rate=rate,
                       output=True,
                       frames_per_buffer=chunk)

print("受信を開始します。CTRL+Cで終了します。")

try:
    while True:
        data, address = sock.recvfrom(chunk*2)
        #print(f"address: {address}")
        output_stream.write(data)  # スピーカーから音声出力
except KeyboardInterrupt:
    print("受信を終了します。")

# ストリームを閉じる
output_stream.stop_stream()
output_stream.close()
p.terminate()

# ソケットを閉じる
sock.close()

 

「オーディオデバイス確認」

import pyaudio

p = pyaudio.PyAudio()

# 使用可能なオーディオデバイスのリストを表示
for i in range(p.get_device_count()):
    info = p.get_device_info_by_index(i)
    print(f"Device {i}: {info['name']}, Channels: {info['maxInputChannels']}")

# 目的のデバイスのインデックスを選択
input_device_index = 0  # 例えば、リストから選んだ入力デバイスのインデックス
output_device_index = 2  # 例えば、リストから選んだ出力デバイスのインデックス

# 音声入力ストリームの開始(特定のデバイスを使用)
stream = p.open(format=pyaudio.paInt16,
                channels=1,
                rate=44100,
                input=True,
                frames_per_buffer=1024,
                input_device_index=input_device_index)  # 入力デバイスを指定

# 音声出力ストリームの開始(特定のデバイスを使用)
output_stream = p.open(format=pyaudio.paInt16,
                       channels=1,
                       rate=44100,
                       output=True,
                       frames_per_buffer=1024,
                       output_device_index=output_device_index)  # 出力デバイスを指定
 

CentOSのSELINUXとFWをOFFにしていたので、ONにして穴開けする。

 

 CentOS7.9の記事の続き

   https://ameblo.jp/fc2miha/entry-12843730608.html

 

 

■SELINUXをONにする

 

su - root

 

vi /etc/selinux/config

ELINUX=enforcing
SELINUXTYPE=targeted

:wq

 

reboot

→SELINUXをONにすると起動が遅くなった

 

getenforce
→Enforcingになっている

 

■FWをONにして穴開け

 

systemctl enable firewalld


systemctl start firewalld


systemctl status firewalld

 

FWがONになる。この時点でasteriskはうまく動作できない

 

■FW穴開け

 

firewall-cmd --add-port=5060/udp --zone=public --permanent

 

firewall-cmd --reload

 

firewall-cmd --list-all

 

reboot

 

asteriskの設定 ガイダンスを流した後に通話開始

 

 

■音声ファイルをサーバー上に配置する。


ls /var/lib/asterisk/sounds/en
上のディレクトリにeiwadai.gsmという名前でファイルを配置。
このファイルはgsmなので、
 wavファイルに録音後、http://convertio.co/ja/m4a-gsm/
  にアクセスして変換しておく

 

■extensions.confの6003を書き換える。


exten => 6003,1,Answer()
exten => 6003,2,Playback(eiwadai)
exten => 6003,3,Dial(PJSIP/6003,,r)
exten => 6003,4,Hangup()

 

answerで電話をとって、Playbackで音声ファイルを再生する。
その後、ダイヤルする

SIPクライアントzoiperをLinuxのCentOS7.9へインストール

 

SIPクライアントzoiperをLinuxへインストールする場合に
 Netに出回っている情報と違ったのでハマりました。
 みんなハマってないのかなー

 

CentOS7.9にSIPクライアントであるZoiperをインストールする記事です。

 

■ダウンロード

 

zoiperのページからtar.xz版をダウンロード

 

■解凍

 

tar Jxfv Zoiper5_5.6.4_x86_64.tar.xz

 

■起動

 

cd Zoiper5

 

./zoiper

 

エラーになる・・・

 

■エラー対応

 

./zoiper: error while loading shared libraries: libXss.so.1: cannot open shared object file: No such file or directory

 

yum install libXScrnSaver

 

■再度起動

 

./zoiper

 

起動してきた。
動作確認。
けど、いろいろ操作できない。
ctrl+Cで終了

 

■再度再度

 

suでrootになっているせいかもしれないので
一般ユーザーで再度

 

./zoiper

 

今度は大丈夫

アカウントを登録
 6003@192.168.10.11:5060
通話できる。

 

成功!!

 

■ログイン時自動起動

 

 Tweaksの自動起動に設定しようと思ったらもう既に入っていた。
 上の./Zoiperの時に設定されるらしい。

 

■自動着信設定

 

※これは、お金払わないと出来ない

 設定→通話
  着信通話処理を有効をチェック
  自動応答 3秒で設定
  再起動後も設定を維持をチェック

 

■自動ログイン設定

 

アプリケーション→システムツール→設定

 →詳細→ユーザー

 ロック解除

 自動ログイン オン