Audio Share は、Windows/Linux コンピュータのオーディオをネットワーク経由で Android 携帯電話に共有できるため、携帯電話がコンピュータのスピーカーになります。 (新しいスピーカーを購入する必要はありませんか?)
Windows または Linux をサーバーとして搭載した PC。
Microsoft Visual C++ 2015-2022 再頒布可能パッケージ (x64) (vc_redist.x64.exe) を備えた Windows 10 以降 x86_64。
PipeWire を使用した Linux。
PC上のオーディオプレーヤーは正常に動作します。つまり、サウンド カードがあり、オーディオ エンドポイントが利用可能な状態になっている必要があります。それ以外の場合は、追加のセットアップが必要になります。
Android 6.0(API 23)以降。
最新リリースから APK ファイルと AudioShareServer.exe をダウンロードします。
コンピュータで AudioShareServer.exe を開きます。デフォルトの引数はうまく機能する可能性があります。ただし、「ホスト」部分を確認する必要がある場合があります。通常、これは192.168.xxx.xxx
などの LAN アドレスです。電話機がこの IP アドレスを介してコンピュータに接続できることを確認してください。次に、「サーバーの開始」ボタンをクリックします。
APKを携帯電話にインストールして開きます。 「ホスト」の部分を変更して、前の手順の値 ( 192.168.xxx.xxx
など) と同じになるようにします。 「▶」ボタンをクリックして音声をお楽しみください。
注意
このアプリは現在、自動再接続機能をサポートしていません。アプリが強制終了されるか、Android の省電力機能によって切断されると、オーディオの再生は停止します。省電力のホワイトリストにアプリを追加することをお勧めします。これを行うには、アプリの設定で「バッテリーの最適化を無視するリクエスト」を押します。
Windows の場合はaudio-share-server-cmd-windows.zip
、Linux の場合はaudio-share-server-cmd-linux.tar.gz
をダウンロードします。
アーカイブ ファイルを解凍します。
as-cmd -b
を実行してサーバーを起動するだけです。最初の LAN アドレスをポート65530
のホストとして使用し、デフォルトのオーディオ エンドポイントを選択します。ほとんどの場合、問題なく動作します。そうでない場合は、 as-cmd -h
使用してヘルプを表示し、適切な引数を設定します。
Windows ではファイアウォール ルールを自動的に追加するように求められますが、Linux では自動的に追加されません。したがって、Linux ディストリビューションでファイアウォールが有効になっている場合は、ファイアウォールを手動で構成する必要があります。
APKを携帯電話にインストールして開きます。 「ホスト」の部分を変更して、前の手順の値 ( 192.168.xxx.xxx
など) と同じになるようにします。 「▶」ボタンをクリックして音声をお楽しみください。
アドレス=192.168.3.2 # 変更します。ポート=65530 # 変更します。sudo firewall-cmd --add-rich-rule="ルールファミリー=ipv4 宛先アドレス=$アドレス ポートポート=$ポート プロトコル=tcp accept"sudo ファイアウォール-cmd --add-rich-rule="ルール ファミリ=ipv4 宛先アドレス=$アドレス ポート ポート=$ポート プロトコル=udp accept"sudo ファイアウォール-cmd --ランタイムから永続化
sudo ファイアウォール-cmd --list-rich-rules
出力:
ルールファミリー="ipv4" 宛先アドレス="192.168.3.2" ポートポート="65530" プロトコル="tcp" accept ルールファミリー="ipv4" 宛先アドレス="192.168.3.2" ポート port="65530" プロトコル="udp" accept
address=192.168.3.2 #change it.port=65530 #change it.sudo firewall-cmd --remove-rich-rule="rule family=ipv4 destination address=$address port port=$port protocol=tcp accept"sudo firewall -cmd --remove-rich-rule="ルール ファミリ=ipv4 宛先アドレス=$アドレス ポート ポート=$ポート プロトコル=udp accept"sudo firewall-cmd --runtime-to-permanent
音声フォーマットには次の 2 種類があります。
キャプチャ音声フォーマット
転送オーディオフォーマット
転送音声フォーマットは非圧縮 PCM データであり、キャプチャ音声フォーマットと同じです。
server.log
を開いて、転送オーディオ形式を確認できます。
[2024-10-26 14:52:48.967] [info] AudioFormat: encoding: ENCODING_PCM_16BIT channels: 2 sample_rate: 44100
上に示すように、エンコードは16 bit integer PCM
、チャネル数は2
、サンプルレートは44.1kHz
です。
Android では、AudioTrack API は以下にリストされている PCM オーディオ形式のみをサポートします。
ENCODING_PCM_FLOAT ENCODING_PCM_8BIT ENCODING_PCM_16BIT ENCODING_PCM_24BIT_PACKED ENCODING_PCM_32BIT
https://developer.android.com/reference/android/media/AudioFormat#encoding
Audio Share はこれら 5 種類の PCM 形式をサポートしていますが、特定の形式が利用できるかどうかはオーディオ エンドポイントによって異なります。
Windows では、デフォルトのキャプチャ音声形式はオーディオ エンドポイントのデフォルト形式によって異なります。サウンドパネル( mmsys.cpl
)の設定で変更できます。サウンド パネルのPlayback
タブで、使用可能なエンドポイントを 1 つ右クリックし、 [プロパティ] パネルを開いて [ Advanced
] タブを選択し、 Default Format
変更してApply
をクリックします。 Realtek オーディオ カードを使用している場合、これはRealtek Audio Console
でも実行できます。キャプチャオーディオ形式は、オーディオエンドポイントと同じチャネルとサンプルレートを持つ必要があります。したがって、それらを変更したい場合は、サウンドパネルを開いてデフォルトの形式を設定するだけです。 Linux との互換性を保つために、 as-cmd
Windows でも--channels
または--sample-rate
を設定できます。ただし、ほとんどの場合、期待される形式をサポートしていないため、適切なオーディオ形式にフォールバックします。
https://learn.microsoft.com/en-us/windows/win32/coreaudio/device-formats
Linux では、デフォルトのキャプチャ オーディオ形式は完全に PipeWire によって提供される可能性があります。ただし、デフォルトのオーディオ エンコーディングはSPA_AUDIO_FORMAT_F32P
などの平面的なものである場合があります。 AndroidのAudioTrackでは再生できません。したがって、デフォルトのオーディオ エンコーディングはSPA_AUDIO_FORMAT_F32_LE
(リトル エンディアンの 32 ビット フロート PCM) に強制されます。デフォルトのチャンネルとサンプルレートはそのままで、PipeWire によって与えられます。
ビット単位のエンコードまたはサンプル レートを下げると、ネットワーク帯域幅が減少する可能性がありますが、音声損失とも呼ばれるブランク ノイズも増加する可能性があることに注意してください。
最終的に聞こえる音量は、次の音量の影響を受けます。
PCのシステムボリューム。
PCのオーディオプレーヤーの音量。
Android システムのメディア ボリューム。
Androidアプリの「オーディオボリューム」。
Androidアプリの「ラウドネスエンハンサー」。
それらはすべて独立しています。 PC やオーディオ プレーヤーの音量を最大にしてもまだ足りないと感じるが、Android のシステム音量を変更したくない場合は、アプリの設定で「ラウドネス エンハンサー」を大きくすることができます。システムの音量には影響しません。アプリの「オーディオ音量」を使用すると、システム音量を変更せずに聞こえる音量を下げることができます。
うるさすぎると耳が痛くなります! 「ラウドネスエンハンサー」には3000mB
の制限があります。ほとんどの場合、これで十分です。さらに音量が必要な場合は、Android システムの音量を直接変更してください。
Realtek サウンド カードを使用すると、スピーカーが接続されていないときにオーディオ エンドポイントを利用できるようになります。Realtek オーディオ コンソールを開き、[デバイスの詳細設定] タブを選択して、[フロント パネルのフロント ポップアップ ダイアログを無効にする] オプションをオンにするだけです。すると、オーディオエンドポイントが表示されます。他のサウンドカードにも同様のオプションがある場合があります。見つからない場合は、方法 2 に進みます。
現時点では、仮想オーディオエンドポイントを作成する方法が見つかりません。これを実現する唯一の方法は、仮想オーディオ デバイス ドライバーを作成することです。ただし、署名するには EV コード署名証明書が必要です。そうしないと、ユーザーはインストールできません。お金は払いたくないんです。また、サードパーティの仮想オーディオ デバイス ドライバーが多数存在します。 Windows の仮想オーディオ デバイス ドライバーで、知っているものを見つけたり、投稿したりできます。通常、ドライバーには INF ファイルがあります。右クリックして「インストール」をクリックしてインストールします。
PipeWire のおかげで、root 権限がなくても、Linux で仮想オーディオ エンドポイントを非常に簡単に作成できます。以下の設定を~/.config/pipewire/pipewire.conf.d/audio-share-sink.conf
にコピーするだけです。
context.objects = [ { factory = adapter args = { factory.name = support.null-audio-sink node.name = "Audio Share Sink" media.class = Audio/Sink object.linger = true audio.position = [ FL FR ] priority.session = 1009 priority.driver = 1009 monitor.channel-volumes = true monitor.passthrough = true } } ]
次に、 systemctl --user restart pipewire
を実行して PipeWire サービスを再起動します。
最後に、追加されたエンドポイント「Audio Share Sink」が表示されます。
[abc@localhost ~]$ as-cmd -l [2024-03-17 22:46:14.563] [情報] パイプワイヤーヘッダーバージョン: 0.3.48、ライブラリーバージョン: 0.3.67 endpoint_list: * id: 30 name: オーディオ共有シンク 合計: 1
Androidアプリ
Android Studio はすべての依存関係を自動的にインポートします。
サーバーMFC
vcpkg はインストールの依存関係に必要です。
vcpkg install asio protobuf spdlog[wchar] wil nlohmann-json
を実行して deps をインストールします。 vcpkg トリプレットはx64-windows-static-md
です。
コンパイルには、「C++ によるデスクトップ開発」ワークロードと「最新 v143 ビルド ツール用 C++ MFC (x86 & x64)」オプションを備えた Visual Studio 2022 が必要です。
サーバーCMD
CMake とコンパイラのサポート C++20 が必要です。 Linux にはlibpipewire-dev
またはpipewire-devel
も必要です。
vcpkg をインストールし、 VPCKG_ROOT
環境を設定します。この環境はCMakePresets.json
に必要です。
vcpkg install asio protobuf cxxopts
実行して deps をインストールします。 vcpkg トリプレットは、Windows の場合はx64-windows-static-md
、Linux の場合はx64-linux
です。さらに、Windows ではvcpkg install spdlog[wchar] wil
実行する必要があり、Linux ではvcpkg install spdlog
実行する必要があります。
cmake --preset linux-Release
を実行して構成します。
cmake --build --preset linux-Release
実行してビルドします。 as-cmd
out/install/linux-Release/bin/as-cmd
にあります。
Windows の場合は、前の 2 つの手順でlinux
windows
に置き換えます。
このプロジェクトは、Apache-2.0 ライセンスに基づいてライセンスされています。
Copyright 2022-2024 mkckr0 <https://github.com/mkckr0> Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
MIT ライセンスに基づいてライセンスされた nlohmann/json
WIL は MIT ライセンスに基づいてライセンスされています
Asio は BSL-1.0 ライセンスに基づいてライセンスを取得しています。
LICENSE に基づいてライセンスが付与されたプロトコル バッファ。
spdlog は MIT ライセンスに基づいてライセンスされています。
{fmt} は LICENSE に基づいてライセンスを取得しています。
cxxopts は MIT ライセンスに基づいてライセンスされています
Netty は Apache-2.0 ライセンスに基づいてライセンスされています。
Android 用のマテリアル コンポーネントは、Apache-2.0 ライセンスに基づいてライセンスされています。
Gradle 用 Protobuf プラグインは、LICENSE に基づいてライセンスされています。
PipeWire は LICENSE に基づいてライセンスされています。
モスクリア
ユファンティン