ので、いくつかのマニュアルを読んで、いくつかのテストを行った後、これは私が日常的に私「MediaPause」に今持っているものです。
// Reset counter
i := 1;
// Reset device list
lstADevices.Clear;
while BASS_GetDeviceInfo(i, ADeviceInfo) do
begin
lstADevices.Add(ADeviceInfo.name);
inc(i);
end;
intDevice := -1;
for i := 0 to lstADevices.Count - 1 do
begin
if lstADevices[i] = 'Bluetooth A2DP Stereo Audio (Bose AE2w 01.02.00(Stereo))' then
begin
intDevice := i + 1; // + 1 is important, because the list starts with 0! (for BASS 0 means 'no device')
BASS_GetDeviceInfo(intDevice, ADeviceInfo);
intFlag := ADeviceInfo.flags;
if intFlag = 67108868 then
begin
for j := 0 to lstADevices.Count - 1 do
begin
if lstADevices[j] = 'Speakers (Realtek High Definition Audio)' then
begin
intDevice := j + 1; // The list starts at 0
break;
end;
end;
end;
break;
end;
end;
BASS_Init(intDevice, 44100, 0, Application.Handle, nil);
blnBASS := BASS_ChannelSetDevice(AudioStream, intDevice);
if not blnBASS then
intBASSErrorCode := BASS_ErrorGetCode;
BASS_ChannelPlay(AudioStream, False);
プログラムが開始されるとBluetoothヘッドセットが接続されていない場合、それは意志デバイスリストに入るために列挙されません。だから私はいつも必要な時にデバイスを列挙しなければならない。私は時間(秒単位のティック)を表示するためにこれを "チックカウンタ"に実装したかったのですが、次の動作のために私はまだそれをしませんでした。 Bluetoothヘッドセットとスピーカーの間で(BASS_ChannelSetDevice)を一度切り替えることができます。何らかの理由で、私が再度切り替えたい/しなければならないとき、私はBASS_ERROR_BUFLOSTを意味するエラーコード4を得る(サンプルバッファーが失われた)。 バッファサイズに応じて何かを見つけようとしましたが、何も見つかりませんでした。私は、デバイスが利用可能であるかどうかをチェックするために、他の方法を見つけることができなかったので
私は、Bluetoothデバイスのフラグ値67108868を確認してください。 Bluetoothデバイスがランタイム中に一度だけ接続されている場合は、後で切断されても常に列挙されます。それはまた、 "有効"状態を持っているので、私はフラグ値の違いを発見しただけです。 ディスプレイのティックカウンターに上記のコードを梱包して、デバイスをスピーカーからヘッドセットに自動的に変更することができました。これは、「完璧な」方法ですが、「バッファーが失われました」という問題が原因です私はティックカウンタのルーチンから削除しました。言及したビクトリアとアリオク「のような
は、私がデバイスを変更する前に、プレーヤーを一時停止しました。言及したように、それは一度動作し、次回には "バッファが失われました"というエラーに遭遇します。つまり、エラーは発生しませんが、出力は変更されません。
"私の方法"が正しいかどうかわからないので、デバイスを変更する "より安全な"方法がありますか?
MPAGE
一時停止再生は、(あなたは、デバイス情報を列挙することにより、新たに選択したデフォルトのデバイスを見つけることができます)再生を開始し、デバイスを設定します。 – Victoria
@Victoria 出力デバイスを列挙して設定するサンプルを私に見せていただければ幸いです。 :-) 事前に感謝します! –