Android'de ses çalmak için şu mekanizmaları kullanabilirsiniz:
Her mekanizma, Android'de ses çalmaya olanak tanır. Radyo için
oynatma veya oynatma gibi işlemler için bu seçenekler yeterli olmayabilir.
Her biri ses yakalama özelliğiyle birleştirilebilir veya
MediaRecorder
sınıfını kullanacak şekilde güncelleyin. Sistem için
bir girişi bağlamak için aşağıdaki bilgiler kullanılabilir
cihazı AAOS'deki bir çıkış mikserine bağlayabilirsiniz.
HwAudioSource çalar
HwAudioSource
, ses kaynağı cihazını doğrudan bir Android karıştırıcıya bağlar.
Motivasyonlar
Cihazlar arası ses veya donanım sesi kullanırken çeşitli sınırlamalar ortaya çıkabilir. yama özelliğini kullanabilirsiniz. Her seçenek aşağıdakiler gibi medya önemli etkinliklerini alamaz: PLAY, PAUSE ve STOP. Bunlar Android'in sesini atlattıkları için her biri, yamanın Android'den gelen diğer seslerle karıştırılması için donanım gerektirir.
HwAudioSource'u kullan
HwAudioSource
, yazılım yaması olarak tasarlanmış yeni bir oynatıcı türüdür. Bu
Bu oynatıcıyı kullanan uygulamaların, medya önemli etkinliklerini ve çıktılarını almasını sağlar
Android tarafından karıştırılacak ve yönlendirilecek.
mHwAudioSource = new HwAudioSource.Builder()
.setAudioDeviceInfo(AudioDeviceInfo: info)
.setAudioAttributes(new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.build())
.build();
mHwAudioSource.play();
mHwAudioSource.stop();
Ses HAL'si ile ilgili değişiklikler
Bu yeni oynatıcıda, ses HAL'si için bu beklentileri göz önünde bulundurun. Örneğin,
örnek, device/generic/car/emulator/audio/driver/audio_hw.c
.
adev_create_audio_patch
, isteğin ses yaması oluşturmasını bekliyor bir cihazdan miksere dönüştürülebilir.adev_open_input_stream
,audio_source
değerinin olmasını bekliyorAUDIO_SOURCE_FM_TUNER
.in_read
, ses arabelleğini yayın radyo ses verileriyle doldurur.
AUDIO_DEVICE_IN_FM_TUNER
türünde bir tarayıcı cihazı yapılandırmanızı öneririz
audio_policy_configuration.xml
içinde:
<devicePort
tagName="Tuner_source"
type="AUDIO_DEVICE_IN_FM_TUNER"
role="source"
address="tuner0">
<profile
name=""
format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000"
channelMasks="AUDIO_CHANNEL_IN_STEREO"/>
</devicePort>
Bu cihaz yapılandırmasıyla FM radyo girişini kolayca bulabilirsiniz
AudioManager.getDevices(AudioManager.GET_DEVICES_INPUTS
kullanarak
AudioDeviceInfo.TYPE_FM_TUNER
ile bağlantılı.
Ses yamaları oluştur
Bir miks bağlantı noktası veya bir diğeri ise iki ses bağlantı noktası arasında bir ses yaması oluşturabilirsiniz cihaz bağlantı noktası. Genellikle, mix bağlantı noktasından cihaz bağlantı noktasına uygulanan bir ses yaması emin olun.
Örneğin, FM_TUNER
kaynaktan ses örneklerini yönlendiren bir ses yaması
atlar, yazılım karıştırıcıyı atlar. Daha sonra
Android'den ses örneklerini karıştırmak üzere FM_TUNER
ve
lazım. Doğrudan FM_TUNER
kaynağından medyaya ses yaması oluştururken
havuz:
Ses düzeyi kontrolü medya havuzu için geçerlidir ve hem Android ve
FM_TUNER
ses.Kullanıcılar basit bir uygulama aracılığıyla Android ile
FM_TUNER
ses arasında geçiş yapabilirler anahtarı (belirtilen medya kaynağı seçimi gerekmez).
Otomotiv uygulamalarının ayrıca,
iki ses yaması arasında bir ses yaması oluşturması gerekebilir.
cihaz bağlantı noktalarını görürsünüz. Bunu yapmak için önce cihaz bağlantı noktalarını tanımlamanız ve olası
audio_policy_configuration.xml
içindeki rotaları ilişkilendirin ve ardından mixport'ları
cihaz bağlantı noktalarını görürsünüz.
Örnek yapılandırma
Bu örnek yapılandırmayı inceleyin.
device/generic/car/emulator/audio/audio_policy_configuration.xml
<audioPolicyConfiguration>
<modules>
<module name="primary" halVersion="3.0">
<attachedDevices>
<item>bus0_media_out</item>
<item>bus1_audio_patch_test_in</item>
</attachedDevices>
<mixPorts>
<mixPort name="mixport_bus0_media_out" role="source"
flags="AUDIO_OUTPUT_FLAG_PRIMARY">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000"
channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort>
<mixPort name="mixport_audio_patch_in" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000"
channelMasks="AUDIO_CHANNEL_IN_STEREO"/>
</mixPort>
</mixPorts>
<devicePorts>
<devicePort tagName="bus0_media_out" role="sink" type="AUDIO_DEVICE_OUT_BUS"
address="bus0_media_out">
<profile balance="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
<gains>
<gain name="" mode="AUDIO_GAIN_MODE_JOINT"
minValueMB="-8400" maxValueMB="4000" defaultValueMB="0" stepValueMB="100"/>
</gains>
</devicePort>
<devicePort tagName="bus1_audio_patch_test_in" type="AUDIO_DEVICE_IN_BUS" role="source"
address="bus1_audio_patch_test_in">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_IN_STEREO"/>
<gains>
<gain name="" mode="AUDIO_GAIN_MODE_JOINT"
minValueMB="-8400" maxValueMB="4000" defaultValueMB="0" stepValueMB="100"/>
</gains>
</devicePort>
</devicePorts>
<routes>
<route type="mix" sink="bus0_media_out" sources="mixport_bus0_media_out,bus1_audio_patch_test_in"/>
<route type="mix" sink="mixport_audio_patch_in" sources="bus1_audio_patch_test_in"/>
</routes>
</module>
</modules>
</audioPolicyConfiguration>
Ses sürücüsü API'sı
Kullanılabilir kaynakların listesini almak için getExternalSources()
işlevini kullanabilirsiniz.
(adresle tanımlanır) ardından, bu kaynaklar ve
havuz bağlantı noktalarının
bulunduğundan emin olun. Ses HAL'sinde ilgili giriş noktaları
IDevice.hal
içinde görünüyor:
Interface IDevice {
...
/
* Creates an audio patch between several source and sink ports. The handle
* is allocated by the HAL and must be unique for this audio HAL module.
*
* @param sources patch sources.
* @param sinks patch sinks.
* @return retval operation completion status.
* @return patch created patch handle.
*/
createAudioPatch(vec<AudioPortConfig> sources, vec<AudioPortConfig> sinks)
generates (Result retval, AudioPatchHandle patch);
* Release an audio patch.
*
* @param patch patch handle.
* @return retval operation completion status.
*/
releaseAudioPatch(AudioPatchHandle patch) generates (Result retval);
...
}
Radyo tarayıcısı
Radyo uygulaması oluştururken HwAudioSource
kullanmanızı öneririz.
medya anahtarını işlemek için hem yama oluşturmayı hem de bir medya oturumunu işler
etkinlikler. Aynı kaynak ve ses için birden çok ses kaynağı oluşturulabilir
özellikleri hakkında daha fazla bilgi edinin. Bunun yanı sıra düzenli radyo kullanımı için bir hesabınız
ikincisi trafik duyurularıdır.
FM_TUNER
kaydediliyorsa Android 11'de
işlemi için izin android.permission.CAPTURE_AUDIO_OUTPUT
olarak değiştirildi.
İçerik artık geçerli olan OP_RECORD_AUDIO
izin kontrolünden geçmez
mikrofona takılır. FM_TUNER
zaten bu işlemden etkilenmeyecektir
erişim için SYSTEM_API
izni gerektirir.
Ayrıntılı bilgi için Radyoyu uygulama bölümüne bakın bir radyo uygulaması oluşturmayı düşünmeliyim.