Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 70f806ef80 | |||
| 0773d9496d | |||
| 1a4857ed62 | |||
| 962d814318 |
@@ -79,8 +79,8 @@ android {
|
|||||||
applicationId "com.ariacockpit"
|
applicationId "com.ariacockpit"
|
||||||
minSdkVersion rootProject.ext.minSdkVersion
|
minSdkVersion rootProject.ext.minSdkVersion
|
||||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||||
versionCode 809
|
versionCode 901
|
||||||
versionName "0.0.8.9"
|
versionName "0.0.9.1"
|
||||||
// Fallback fuer Libraries mit Product Flavors
|
// Fallback fuer Libraries mit Product Flavors
|
||||||
missingDimensionStrategy 'react-native-camera', 'general'
|
missingDimensionStrategy 'react-native-camera', 'general'
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,13 +79,11 @@ class PcmStreamPlayerModule(reactContext: ReactApplicationContext) : ReactContex
|
|||||||
val minBuf = AudioTrack.getMinBufferSize(sampleRate, channelConfig, encoding)
|
val minBuf = AudioTrack.getMinBufferSize(sampleRate, channelConfig, encoding)
|
||||||
val bytesPerSecond = sampleRate * channels * 2 // 16-bit = 2 bytes
|
val bytesPerSecond = sampleRate * channels * 2 // 16-bit = 2 bytes
|
||||||
val prerollTarget = (bytesPerSecond * prerollSec).toInt()
|
val prerollTarget = (bytesPerSecond * prerollSec).toInt()
|
||||||
// Buffer entkoppelt von Preroll — fester ~3s-Buffer reicht. Wenn er
|
// Buffer entkoppelt von Preroll — fester ~4s-Buffer. OnePlus A12
|
||||||
// an Preroll gekoppelt ist (z.B. 7s bei preroll=3.5s) und nur kurz
|
// mit USAGE_ASSISTANT laeuft AudioTrack erst ab ~3s gepufferter
|
||||||
// gefuettert wird, stallt AudioTrack auf manchen Geraeten (OnePlus
|
// Daten an. Wir padden Kurztexte vor play() auf 3s (siehe Block
|
||||||
// Android 12: pos bleibt 0 obwohl play() lief).
|
// nach mainLoop), Buffer braucht ~1s Headroom weil write() blockt.
|
||||||
// 3s damit Padding bis 2s vor play() noch Headroom hat (write() ist
|
val bufferSize = (bytesPerSecond * 4).coerceAtLeast(minBuf * 8)
|
||||||
// blocking — wenn Buffer voll ist, deadlockt es vor play()).
|
|
||||||
val bufferSize = (bytesPerSecond * 3).coerceAtLeast(minBuf * 8)
|
|
||||||
prerollBytes = prerollTarget
|
prerollBytes = prerollTarget
|
||||||
bytesBuffered = 0
|
bytesBuffered = 0
|
||||||
playbackStarted = false
|
playbackStarted = false
|
||||||
@@ -94,7 +92,12 @@ class PcmStreamPlayerModule(reactContext: ReactApplicationContext) : ReactContex
|
|||||||
val newTrack = AudioTrack.Builder()
|
val newTrack = AudioTrack.Builder()
|
||||||
.setAudioAttributes(
|
.setAudioAttributes(
|
||||||
AudioAttributes.Builder()
|
AudioAttributes.Builder()
|
||||||
.setUsage(AudioAttributes.USAGE_ASSISTANT)
|
// USAGE_MEDIA statt USAGE_ASSISTANT — auf OnePlus A12 stallt
|
||||||
|
// AudioTrack mit USAGE_ASSISTANT wenn play() nach komplettem
|
||||||
|
// Buffer-Fuellen called wird (pos bleibt 0). USAGE_MEDIA ist
|
||||||
|
// robust. AudioFocus wird eh separat ueber AudioFocusModule
|
||||||
|
// gehandhabt, nicht ueber dieses USAGE-Tag.
|
||||||
|
.setUsage(AudioAttributes.USAGE_MEDIA)
|
||||||
.setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
|
.setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
|
||||||
.build(),
|
.build(),
|
||||||
)
|
)
|
||||||
@@ -229,10 +232,11 @@ class PcmStreamPlayerModule(reactContext: ReactApplicationContext) : ReactContex
|
|||||||
bytesBuffered += silence.size
|
bytesBuffered += silence.size
|
||||||
}
|
}
|
||||||
// Bei kurzem Text (play() noch nicht gestartet): Buffer auf min.
|
// Bei kurzem Text (play() noch nicht gestartet): Buffer auf min.
|
||||||
// 2s padden + DANN play(). Auf OnePlus A12 startet AudioTrack
|
// 3s padden + DANN play(). Auf OnePlus A12 startet AudioTrack
|
||||||
// bei einem zu duennen Buffer nicht — pos bleibt auf 0 stehen.
|
// bei < 3s Buffer-Inhalt nicht — pos bleibt auf 0 stehen.
|
||||||
|
// (2s war zu wenig, 8 Worte ~2.5s gingen, 3 Worte ~1s nicht.)
|
||||||
if (!playbackStarted && !writerShouldStop) {
|
if (!playbackStarted && !writerShouldStop) {
|
||||||
val minStartBytes = bytesPerSecond * 2
|
val minStartBytes = bytesPerSecond * 3
|
||||||
if (bytesBuffered < minStartBytes) {
|
if (bytesBuffered < minStartBytes) {
|
||||||
val padBytes = (minStartBytes - bytesBuffered.toInt()) and 0x7FFFFFFE
|
val padBytes = (minStartBytes - bytesBuffered.toInt()) and 0x7FFFFFFE
|
||||||
val pad = ByteArray(padBytes)
|
val pad = ByteArray(padBytes)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "aria-cockpit",
|
"name": "aria-cockpit",
|
||||||
"version": "0.0.8.9",
|
"version": "0.0.9.1",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"android": "react-native run-android",
|
"android": "react-native run-android",
|
||||||
|
|||||||
Reference in New Issue
Block a user