長年愛用していたPC用スピーカーが故障したようだ。突然バリバリと隣の部屋の家族もビックリしてしまうくらいの爆音が出力される。ビックリしすぎてポックリ逝ってしまう可能性も否定できないためスピーカーを入れ替えることに。(-_-;)
若い時に真空管アンプやスピーカーの自作を趣味にしていたこともあって買い替えるならある程度まともな音がでるスピーカーが欲しかったので選定にあたってはあまりに小さいのはボツとしたが大きすぎるのも設置場所がないしでいろいろ悩んで多少大き目ではあるもののなんとかなるだろうということでJBLの4305Pをチョイス。高いけど所有欲は満たされるかな。
このスピーカーは下記サイトから購入したがここはお勧めだ。自宅で新品を視聴できてしかも返品できるなんて素晴らしいというしかない。近くに視聴するお店がない人にとっては涙が出るくらい嬉しい存在。こういうお店は末永く続いてほしいものだ。
昔からJBLは憧れだったけど高くて手が出せなかったというかお金もなかったしで人生後半でようやくゲット。(/・ω・)/
でも、時すでに遅しというか難聴で片方の耳は聞こえないからモノラルでもいいかな?みたいな状況なのが少し悲しかったりもする。耳が壊れる前にいい音聞いておきたかったな...(T_T)
4305PはBLE接続なら電源ケーブルのみの接続で済むところがなんとも簡単でいい。が、BLE接続は遅延が結構あるのでPC用としては少し厳しい。ゲームなどで何か音が出る操作をしたときにちょっと遅れて音が出るのがなんだか気持ちが悪いのでUSB接続に変更したところ今度はスピーカーが突然切り替わる現象が発生。
状況を確認してみると4305Pはスタンバイモードになっていた。説明書には無音の状態が10分間続くとスタンバイモードに移行するとある。その後、以前のアクティブ・ソースから信号が再度検出されると復帰するとあるが4305Pはスタンバイモードになったときに自身でUSB接続を切断しているため自動復帰ができない。本体かリモコンの手動操作により再接続するしか方法はないようだがPCに接続している人も結構いると思われるのでこれはぜひ改善して頂きたい点だ。
で、とりあえずスタンバイモードを回避する方法を考えてみた。4305Pは無音状態を検出してるから定期的に何か音を出力してあげるだけでいいということになるが定期的に意図しない音が聞こえるのもイマイチなので4305Pには検出できるが人間には聞こえない20KHz以上の高い周波数の音を出力すればよいのではと考えた。
WindowsのBeep関数を使って指定周波数を指定時間出力するだけというシンプルなプログラムを作って試してみたがうまくいっている。下記コマンドを実行するショートカットをスタートアップに登録しておけばOKだ。5分間隔で20KHzの信号を100ms間出力する。
ちなみにWindowsの問題であるがBeep関数実行時に微かにノイズのような音が出てしまうのはなんとかならんもんだろうか...
[パス]\beep.exe -f 20000 -d 100 -i 300000
なお、この方法だけではスタンバイモードからの自動復帰ができないがPC連動タップ等を使い4305Pの電源を連動させることで電源オン時に自動復帰することができる。
【ダウンロード (windows x64)】
beep.zip
【プログラム】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
/* beep.cpp - Beep Output Copyright (c) 2023 Sasapea's Lab. All right reserved. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include <windows.h> #include <stdio.h> void usage(void) { printf("Beep Output Utility, version 1.00\n"); printf("Copyright(c) 2023 Sasapea's Lab. All right reserved.\n"); printf("\n"); printf("Usage: beep [options]\n"); printf("\n"); printf(" options:\n"); printf(" -f frequency ... frequency (37 - 32767 Hz)\n"); printf(" -d duration ... duration (ms)\n"); printf(" -i interval ... interval (ms)\n"); printf(" -h ... this help\n"); printf("\n"); exit(1); } int main(int argc, char **argv) { DWORD dwFreq = 1000; DWORD dwDuration = 1000; DWORD dwInterval = 0; for (int i = 1; i < argc; ) { char *p = argv[i++]; if (*p == '-') { ++p; if (strcmp(p, "f") == 0) { if (i < argc) dwFreq = atoi(argv[i++]); } else if (strcmp(p, "d") == 0) { if (i < argc) dwDuration = atoi(argv[i++]); } else if (strcmp(p, "i") == 0) { if (i < argc) dwInterval = atoi(argv[i++]); } else usage(); } } do { Beep(dwFreq, dwDuration); Sleep(dwInterval); } while (dwInterval); return 0; } |